Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Pass FontBakery #2

Open
mjlagattuta opened this issue Aug 27, 2018 · 2 comments
Open

Pass FontBakery #2

mjlagattuta opened this issue Aug 27, 2018 · 2 comments

Comments

@mjlagattuta
Copy link
Collaborator

Checked on 8/27/18:

Fontbakery report

[23] Family checks
🔥 FAIL: Check font has a license.
  • com.google.fonts/check/028
  • 🔥 FAIL No license file was found. Please add an OFL.txt or a LICENSE.txt file. If you are running fontbakery on a Google Fonts upstream repo, which is fine, just make sure there is a temporary license file in the same folder. [code: none]
🍞 PASS: Checking all files are in the same directory.
🍞 PASS: Fonts have equal unicode encodings?
🍞 PASS: Make sure all font files have the same version value.
🍞 PASS: Fonts have consistent PANOSE proportion?
🍞 PASS: Fonts have consistent PANOSE family type?
🍞 PASS: Fonts have consistent underline thickness?
💤 SKIP: Does DESCRIPTION file contain broken links?
💤 SKIP: Is this a proper HTML snippet?
💤 SKIP: DESCRIPTION.en_us.html must have more than 200 bytes.
💤 SKIP: DESCRIPTION.en_us.html must have less than 1000 bytes.
💤 SKIP: Font designer field in METADATA.pb must not be 'unknown'.
💤 SKIP: METADATA.pb: Ensure designer simple short name.
💤 SKIP: METADATA.pb: Fontfamily is listed on Google Fonts API?
💤 SKIP: METADATA.pb: check if fonts field only has unique "full_name" values.
💤 SKIP: METADATA.pb: check if fonts field only contains unique style:weight pairs.
💤 SKIP: METADATA.pb license is "APACHE2", "UFL" or "OFL"?
💤 SKIP: METADATA.pb should contain at least "menu" and "latin" subsets.
💤 SKIP: METADATA.pb subsets should be alphabetically ordered.
💤 SKIP: METADATA.pb: Copyright notice is the same in all fonts?
💤 SKIP: Check that METADATA.pb family values are all the same.
💤 SKIP: METADATA.pb: According Google Fonts standards, families should have a Regular style.
💤 SKIP: METADATA.pb: Regular should be 400.

[110] MajorMonoDisplay.ttf
💔 ERROR: Checking with Microsoft Font Validator.
  • com.google.fonts/check/037
  • 💔 ERROR Failed with FileNotFoundError: [Errno 2] No such file or directory: 'fval.xsl'
  • ℹ️ INFO Microsoft Font Validator returned an error code. Output follows :

Unknown command line option: '-file'

🔥 FAIL: Checking file is named canonically.
  • com.google.fonts/check/001
  • 🔥 FAIL Style name used in "MajorMonoDisplay.ttf" is not canonical. You should rebuild the font using any of the following style names: "Thin", "ExtraLight", "Light", "Regular", "Medium", "SemiBold", "Bold", "ExtraBold", "Black", "Thin Italic", "ExtraLight Italic", "Light Italic", "Italic", "Medium Italic", "SemiBold Italic", "Bold Italic", "ExtraBold Italic", "Black Italic".
🔥 FAIL: "License URL matches License text on name table?
  • com.google.fonts/check/030
  • 🔥 FAIL A known license URL must be provided in the NameID 14 (LICENSE INFO URL) entry. Currently accepted licenses are Apache or Open Font License. For a small set of legacy families the Ubuntu Font License may be acceptable as well. [code: no-license-found]
🔥 FAIL: Font enables smart dropout control in "prep" table instructions?
  • com.google.fonts/check/072
  • 🔥 FAIL '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.
⚠️ WARN: Checking OS/2 achVendID.
⚠️ WARN: Show hinting filesize impact.
⚠️ WARN: Check if each glyph has the recommended amount of contours.
  • com.google.fonts/check/153
  • ⚠️ WARN This check inspects the glyph outlines and detects the total number of counters in each of them. The expected values are infered from the typical ammounts of counters 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: uniF000 Counters detected: 0 Expected: 14
Glyph name: uniF001 Counters detected: 2 Expected: 3
Glyph name: question Counters detected: 3 Expected: 2
Glyph name: B Counters detected: 1 Expected: 2 or 3
Glyph name: D Counters detected: 1 Expected: 2
Glyph name: G Counters detected: 2 Expected: 1
Glyph name: M Counters detected: 2 Expected: 1
Glyph name: R Counters detected: 4 Expected: 1 or 2
Glyph name: V Counters detected: 2 Expected: 1
Glyph name: X Counters detected: 3 Expected: 1
Glyph name: Z Counters detected: 2 Expected: 1
Glyph name: b Counters detected: 3 Expected: 2
Glyph name: e Counters detected: 1 Expected: 2
Glyph name: g Counters detected: 1 Expected: 2 or 3
Glyph name: i Counters detected: 1 Expected: 2
Glyph name: j Counters detected: 1 Expected: 2
Glyph name: r Counters detected: 2 Expected: 1
Glyph name: dieresis Counters detected: 4 Expected: 2
Glyph name: uni00AD Counters detected: 0 Expected: 1
Glyph name: questiondown Counters detected: 1 Expected: 2
Glyph name: Adieresis Counters detected: 6 Expected: 4
Glyph name: Edieresis Counters detected: 5 Expected: 3
Glyph name: Idieresis Counters detected: 5 Expected: 3
Glyph name: Eth Counters detected: 1 Expected: 2
Glyph name: Odieresis Counters detected: 6 Expected: 4
Glyph name: Udieresis Counters detected: 5 Expected: 3
Glyph name: adieresis Counters detected: 6 Expected: 4
Glyph name: ae Counters detected: 2 Expected: 3
Glyph name: egrave Counters detected: 2 Expected: 3
Glyph name: eacute Counters detected: 2 Expected: 3
Glyph name: ecircumflex Counters detected: 2 Expected: 3
Glyph name: edieresis Counters detected: 5 Expected: 4
Glyph name: idieresis Counters detected: 5 Expected: 3
Glyph name: odieresis Counters detected: 6 Expected: 4
Glyph name: divide Counters detected: 5 Expected: 3
Glyph name: udieresis Counters detected: 5 Expected: 3
Glyph name: ydieresis Counters detected: 5 Expected: 3
Glyph name: uniE0FF Counters detected: 0 Expected: 7
Glyph name: Cdotaccent Counters detected: 3 Expected: 2
Glyph name: cdotaccent Counters detected: 3 Expected: 2
Glyph name: Dcaron Counters detected: 2 Expected: 3
Glyph name: Dcroat Counters detected: 1 Expected: 2
Glyph name: emacron Counters detected: 2 Expected: 3
Glyph name: ebreve Counters detected: 2 Expected: 3
Glyph name: Edotaccent Counters detected: 3 Expected: 2
Glyph name: ecaron Counters detected: 2 Expected: 3
Glyph name: Gcircumflex Counters detected: 3 Expected: 2
Glyph name: gcircumflex Counters detected: 2 Expected: 3 or 4
Glyph name: Gbreve Counters detected: 3 Expected: 2
Glyph name: gbreve Counters detected: 2 Expected: 3 or 4
Glyph name: Gdotaccent Counters detected: 4 Expected: 2
Glyph name: uni0122 Counters detected: 3 Expected: 2
Glyph name: hbar Counters detected: 2 Expected: 1
Glyph name: iogonek Counters detected: 1 Expected: 2 or 3
Glyph name: Idotaccent Counters detected: 3 Expected: 2
Glyph name: Ldot Counters detected: 1 Expected: 2
Glyph name: ldot Counters detected: 1 Expected: 2
Glyph name: Ohungarumlaut Counters detected: 2 Expected: 4
Glyph name: oe Counters detected: 2 Expected: 3
Glyph name: Racute Counters detected: 5 Expected: 3
Glyph name: racute Counters detected: 3 Expected: 2
Glyph name: uni0156 Counters detected: 5 Expected: 3
Glyph name: uni0157 Counters detected: 3 Expected: 2
Glyph name: Rcaron Counters detected: 5 Expected: 3
Glyph name: rcaron Counters detected: 3 Expected: 2
Glyph name: Wcircumflex Counters detected: 3 Expected: 2
Glyph name: Ydieresis Counters detected: 5 Expected: 3
Glyph name: Zacute Counters detected: 3 Expected: 2
Glyph name: Zdotaccent Counters detected: 4 Expected: 2
Glyph name: zdotaccent Counters detected: 3 Expected: 2
Glyph name: Zcaron Counters detected: 3 Expected: 2
Glyph name: uni01C5 Counters detected: 3 Expected: 4
Glyph name: uni01C8 Counters detected: 2 Expected: 3
Glyph name: uni01C9 Counters detected: 2 Expected: 3
Glyph name: uni01CB Counters detected: 2 Expected: 3
Glyph name: uni01CC Counters detected: 2 Expected: 3
Glyph name: Gcaron Counters detected: 3 Expected: 2
Glyph name: gcaron Counters detected: 2 Expected: 3 or 4
Glyph name: aeacute Counters detected: 3 Expected: 4
Glyph name: uni0205 Counters detected: 3 Expected: 4
Glyph name: uni0206 Counters detected: 1 Expected: 2
Glyph name: uni0207 Counters detected: 2 Expected: 3
Glyph name: uni020B Counters detected: 1 Expected: 2
Glyph name: uni020C Counters detected: 2 Expected: 4
Glyph name: uni020E Counters detected: 2 Expected: 3
Glyph name: uni0210 Counters detected: 6 Expected: 4
Glyph name: uni0211 Counters detected: 4 Expected: 3
Glyph name: uni0212 Counters detected: 5 Expected: 3
Glyph name: uni022A Counters detected: 7 Expected: 5
Glyph name: uni022B Counters detected: 7 Expected: 5
Glyph name: uni0230 Counters detected: 1 Expected: 4
Glyph name: uni0231 Counters detected: 5 Expected: 4
Glyph name: approxequal Counters detected: 1 Expected: 2
Glyph name: lessequal Counters detected: 1 Expected: 2
Glyph name: greaterequal Counters detected: 1 Expected: 2
Glyph name: dotaccent Counters detected: 2 Expected: 1
Glyph name: f_f_i Counters detected: 3 Expected: 1, 2 or 4
Glyph name: uni0307 Counters detected: 2 Expected: 1
Glyph name: uni0308 Counters detected: 4 Expected: 2
Glyph name: dotbelowcomb Counters detected: 2 Expected: 1
Glyph name: uni0324 Counters detected: 4 Expected: 2
Glyph name: colonmonetary Counters detected: 2 Expected: 1 or 3
Glyph name: peseta Counters detected: 1 Expected: 2, 3 or 4
Glyph name: eogonek Counters detected: 1 Expected: 2
Glyph name: uni0123 Counters detected: 2 Expected: 3 or 4
Glyph name: Wgrave Counters detected: 3 Expected: 2
Glyph name: Wacute Counters detected: 3 Expected: 2
Glyph name: Wdieresis Counters detected: 6 Expected: 3
Glyph name: wdieresis Counters detected: 5 Expected: 3
Glyph name: uni1EA0 Counters detected: 4 Expected: 3
Glyph name: uni1EA1 Counters detected: 4 Expected: 3
Glyph name: uni1EAC Counters detected: 5 Expected: 4
Glyph name: uni1EAD Counters detected: 5 Expected: 4
Glyph name: uni1EB6 Counters detected: 5 Expected: 4
Glyph name: uni1EB7 Counters detected: 5 Expected: 4
Glyph name: uni1EB8 Counters detected: 3 Expected: 2
Glyph name: uni1EBB Counters detected: 2 Expected: 3
Glyph name: uni1EBD Counters detected: 2 Expected: 3
Glyph name: uni1EBF Counters detected: 3 Expected: 4
Glyph name: uni1EC1 Counters detected: 3 Expected: 4
Glyph name: uni1EC3 Counters detected: 3 Expected: 4
Glyph name: uni1EC5 Counters detected: 3 Expected: 4
Glyph name: uni1EC6 Counters detected: 4 Expected: 3
Glyph name: uni1EC7 Counters detected: 1 Expected: 4
Glyph name: uni1ECA Counters detected: 3 Expected: 2
Glyph name: uni1ECC Counters detected: 4 Expected: 3
Glyph name: uni1ECD Counters detected: 4 Expected: 3
Glyph name: uni1ECE Counters detected: 2 Expected: 3
Glyph name: uni1ED0 Counters detected: 3 Expected: 4
Glyph name: uni1ED8 Counters detected: 1 Expected: 4
Glyph name: uni1ED9 Counters detected: 5 Expected: 4
Glyph name: uni1EE3 Counters detected: 4 Expected: 3
Glyph name: uni1EE4 Counters detected: 3 Expected: 2
Glyph name: uni1EE5 Counters detected: 3 Expected: 2
Glyph name: uni1EF0 Counters detected: 3 Expected: 2
Glyph name: uni1EF1 Counters detected: 3 Expected: 2
Glyph name: uni1EF4 Counters detected: 3 Expected: 2
Glyph name: uni1EF5 Counters detected: 3 Expected: 2
Glyph name: uniEFFD Counters detected: 0 Expected: 9 or 7

⚠️ WARN: Checking correctness of monospaced metadata.
  • com.google.fonts/check/033
  • ⚠️ WARN Font is monospaced but 23 glyphs (3.3724340175953076%) have a different width. You should check the widths of: ['nonmarkingreturn', 'threequarters', 'uni018F', 'uni01C4', 'uni01C5', 'uni01C6', 'uni01C7', 'uni01C8', 'uni01C9', 'uni01CA', 'uni01CB', 'uni01CC', 'hungarumlaut', 'fi', 'fl', 'f_f', 'f_f_i', 'f_f_l', 'LJ.alt1', 'Lj.alt1', 'NJ.alt1', 'Nj.alt1', 'uni000D'] [code: mono-outliers]
⚠️ WARN: Combined length of family and style must not exceed 20 characters.
  • com.google.fonts/check/163
  • ⚠️ WARN The combined length of family and style exceeds 20 chars in the following 'MACINTOSH' entries: FONT_FAMILY_NAME = 'Major Mono Display' / SUBFAMILY_NAME = 'Regular'
  • ⚠️ WARN The combined length of family and style exceeds 20 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Major Mono Display' / SUBFAMILY_NAME = 'Regular'
⚠️ WARN: Checking Vertical Metric Linegaps.
⚠️ WARN: Monospace font has hhea.advanceWidthMax equal to each glyph's advanceWidth?
  • com.google.fonts/check/079
  • ⚠️ WARN This seems to be a monospaced font, so advanceWidth value should be the same across all glyphs, but 99.27% of them have a different value: nonmarkingreturn, space, arrowdown, W.alt1, AEacute, arrowleft, uniF018, i.tr, uniF016, exclam, quotedbl, numbersign, dollar, percent, ampersand, quotesingle, parenleft, parenright, asterisk, plus, comma, hyphen, period, slash, zero, one, two, three, four, five, six, seven, eight, nine, colon, semicolon, less, equal, greater, question, at, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, bracketleft, backslash, bracketright, underscore, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, braceleft, braceright, asciitilde, uni00A0, cent, sterling, yen, copyright, registered, Agrave, Aacute, Acircumflex, Atilde, Adieresis, Aring, Ccedilla, Odieresis, multiply, Udieresis, divide, Gbreve, Idotaccent, dotlessi, Scedilla, emdash, quoteleft, quoteright, quotedblleft, quotedblright, Euro, uni2116, trademark, arrowright, arrowright.alt1, uniE902, uniE903, uniE904, uniE907, uniE908, uniE909, uniF001, uniF002, uniF004, uniF005, uniF006, uniF007, uniF009, uniF00A, uniF00B, uniF00C, uniF00D, uniF00F, uniF011, uniF012, uniF013, uniF014, cedilla, bar, asciicircum, gbreve, scedilla, ccedilla, udieresis, odieresis, endash, Oslash, breve, ring, acute, grave, circumflex, tilde, dieresis, Egrave, Eacute, Ecircumflex, Edieresis, Igrave, Iacute, Icircumflex, Idieresis, Ntilde, Ograve, Oacute, Ocircumflex, Otilde, Ugrave, Uacute, Ucircumflex, Yacute, Ydieresis, agrave, aacute, acircumflex, atilde, adieresis, aring, egrave, eacute, ecircumflex, edieresis, igrave, iacute, icircumflex, idieresis, ograve, oacute, ocircumflex, otilde, oslash, ugrave, uacute, ucircumflex, yacute, ydieresis, caron, Scaron, scaron, Zcaron, zcaron, dotaccent, ae, AE, ntilde, OE, oe, Abreve, abreve, Cacute, cacute, Ccircumflex, ccircumflex, Cdotaccent, cdotaccent, Ccaron, ccaron, Dcaron, Ebreve, ebreve, Edotaccent, edotaccent, Ecaron, ecaron, Gcircumflex, gcircumflex, Hcircumflex, hcircumflex, Itilde, uniF01A, uniF01C, arrowleft.alt1, uni2196, uni2197, uni2198, uni2199, macron, imacron, Amacron, amacron, Gdotaccent, gdotaccent, jcircumflex, Jcircumflex, Lacute, lacute, omacron, Obreve, obreve, Omacron, Nacute, nacute, Ncaron, ncaron, Sacute, sacute, Utilde, utilde, Umacron, umacron, Ubreve, ubreve, Uring, uring, Zacute, zacute, Zdotaccent, zdotaccent, Ycircumflex, ycircumflex, wcircumflex, Wcircumflex, Tcaron, tcaron, wgrave, Wacute, wacute, Wdieresis, wdieresis, rcaron, Rcaron, Racute, Dcroat, dcroat, Emacron, emacron, Lslash, lslash, Wgrave, exclamdown, degree, plusminus, notequal, Scircumflex, scircumflex, itilde, Imacron, racute, dcaron, Thorn, thorn, Hbar, hbar, Tbar, tbar, X.alt1, arrowup, currency, brokenbar, section, ordfeminine, logicalnot, uni00AD, twosuperior, threesuperior, mu, paragraph, periodcentered, onesuperior, ordmasculine, onequarter, onehalf, questiondown, Eth, eth, quotesinglbase, quotedblbase, bullet, ellipsis, guilsinglleft, guilsinglright, fraction, uni2074, minus, uni2215, uniE0FF, uniEFFD, uniF000, guillemotleft, guillemotright, gravecomb, acutecomb, uni0302, tildecomb, uni0304, uni0306, uni0307, uni0308, hookabovecomb, uni030A, uni030B, uni030C, uni030F, uni0311, uni02BC, uni02B9, Aogonek, aogonek, Eogonek, eogonek, Ibreve, ibreve, Iogonek, iogonek, uni013B, uni013C, Lcaron, lcaron, Ldot, ldot, Eng, eng, uni0136, uni0137, kgreenlandic, uni0145, uni0146, uni0122, uni0123, uni0156, uni0157, Ohungarumlaut, ohungarumlaut, uni0162, uni0163, Uhungarumlaut, uhungarumlaut, Uogonek, uogonek, uni018F, florin, Ohorn, ohorn, Uhorn, uhorn, uni01C4, uni01C5, uni01C6, uni01C7, uni01C8, uni01C9, uni01CA, uni01CB, uni01CC, Gcaron, gcaron, uni01EA, uni01EB, Aringacute, aringacute, aeacute, Oslashacute, oslashacute, uni0200, uni0201, uni0202, uni0203, uni0204, uni0205, uni0206, uni0207, uni0208, uni0209, uni020A, uni020B, uni020C, uni020D, uni020E, uni020F, uni0210, uni0211, uni0212, uni0213, uni0214, uni0215, uni0216, uni0217, uni0218, uni0219, uni022A, uni022B, uni022C, uni022D, uni0230, uni0231, uni0232, uni0233, uni0259, ogonek, hungarumlaut, dotbelowcomb, uni0324, uni0326, uni0327, uni032E, uni0331, uni0328, uni1EA0, uni1EA1, uni1EA2, uni1EA3, uni1EA4, uni1EA5, uni1EA6, uni1EA7, uni1EA8, uni1EA9, uni1EAA, uni1EAB, uni1EAC, uni1EAD, uni1EAE, uni1EAF, uni1EB0, uni1EB1, uni1EB2, uni1EB3, uni1EB4, uni1EB5, uni1EB6, uni1EB7, uni1EB8, uni1EB9, uni1EBA, uni1EBB, uni1EBC, uni1EBD, uni1EBE, uni1EBF, uni1EC0, uni1EC1, uni1EC2, uni1EC3, uni1EC4, uni1EC5, uni1EC6, uni1EC7, uni1EC8, uni1EC9, uni1ECA, uni1ECB, uni1ECC, uni1ECD, uni1ECE, uni1ECF, uni1ED0, uni1ED1, uni1ED2, uni1ED3, uni1ED4, uni1ED5, uni1ED6, uni1ED7, uni1ED8, uni1ED9, uni1EDA, uni1EDB, uni1EDC, uni1EDD, uni1EDE, uni1EDF, uni1EE0, uni1EE1, uni1EE2, uni1EE3, uni1EE4, uni1EE5, uni1EE6, uni1EE7, uni1EE8, uni1EE9, uni1EEA, uni1EEB, uni1EEC, uni1EED, uni1EEE, uni1EEF, uni1EF0, uni1EF1, Ygrave, ygrave, uni1EF4, uni1EF5, uni1EF6, uni1EF7, uni1EF8, uni1EF9, uni2010, dagger, daggerdbl, perthousand, minute, second, colonmonetary, franc, lira, uni20A6, peseta, uni20A9, dong, uni20AD, uni20B1, uni20B2, uni20B5, fi, fl, f_f, circumflexcomb_acutecomb, zero.lf, one.lf, two.lf, three.lf, four.lf, five.lf, six.lf, seven.lf, eight.lf, nine.lf, periodcentered.loclCAT, caroncomb.alt, brevecomb_tildecomb, greaterequal, lessequal, brevecomb_hookabovecomb, brevecomb_gravecomb, brevecomb_acutecomb, approxequal, uni2219, circumflexcomb_tildecomb, circumflexcomb_hookabovecomb, circumflexcomb_gravecomb, uni20B9, uni20BA, uni20BC, uni20BD, uni27E8, uni27E9, uni0237, uni02BA, uni0335, i.loclTRK, uni2052, uni031B, uni0338, Gcaron.alt1, Gcircumflex.alt1, Gcommaaccent.alt1, Gdotaccent.alt1, Hbar.alt1, Hcircumflex.alt1, Kcommaaccent.alt1, Kcommaaccent.alt2, LJ.alt1, Lacute.alt1, Lcaron.alt1, Lcommaaccent.alt1, Ldot.alt1, Lj.alt1, Lslash.alt1, NJ.alt1, Nacute.alt1, Ncaron.alt1, Ncommaaccent.alt1, Nj.alt1, Ntilde.alt1, Racute.alt1, Rcaron.alt1, Rcommaaccent.alt1, Rdblgrave.alt1, Rinvertedbreve.alt1, Tbar.alt1, Tcaron.alt1, Tcedilla.alt1, Uacute.alt1, Ubreve.alt1, Ucircumflex.alt1, Udblgrave.alt1, Udieresis.alt1, Udotbelow.alt1, Ugrave.alt1, Uhookabove.alt1, Uhorn.alt1, Uhungarumlaut.alt1, Uinvertedbreve.alt1, Umacron.alt1, Uogonek.alt1, Uring.alt1, Utilde.alt1, Uhornacute.alt1, Uhorndotbelow.alt1, Uhorngrave.alt1, Uhornhookabove.alt1, Uhorntilde.alt1, Wacute.alt1, Wcircumflex.alt1, Wdieresis.alt1, Wgrave.alt1, Germandbls, uni000D, germandbls, uni031B.alt1 [code: should-be-monospaced]
⚠️ WARN: Does GPOS table have kerning information?
💤 SKIP: Checking OS/2 usWeightClass.
💤 SKIP: Check copyright namerecords match license file.
💤 SKIP: Checks METADATA.pb font.name field matches family name declared on the name table.
💤 SKIP: Checks METADATA.pb font.post_script_name matches postscript name declared on the name table.
💤 SKIP: METADATA.pb font.full_name value matches fullname declared on the name table?
💤 SKIP: METADATA.pb font.name value should be same as the family name declared on the name table.
💤 SKIP: METADATA.pb font.full_name and font.post_script_name fields have equivalent values ?
💤 SKIP: METADATA.pb font.filename and font.post_script_name fields have equivalent values?
💤 SKIP: METADATA.pb font.name field contains font name in right format?
💤 SKIP: METADATA.pb font.full_name field contains font name in right format?
💤 SKIP: METADATA.pb font.filename field contains font name in right format?
💤 SKIP: METADATA.pb font.post_script_name field contains font name in right format?
💤 SKIP: Copyright notice on METADATA.pb matches canonical pattern?
💤 SKIP: Copyright notice on METADATA.pb should not contain 'Reserved Font Name'.
💤 SKIP: METADATA.pb: Copyright notice shouldn't exceed 500 chars.
💤 SKIP: METADATA.pb: Filename is set canonically?
💤 SKIP: METADATA.pb font.style "italic" matches font internals?
💤 SKIP: METADATA.pb font.style "normal" matches font internals?
💤 SKIP: METADATA.pb font.name and font.full_name fields match the values declared on the name table?
💤 SKIP: METADATA.pb: Check if fontname is not camel cased.
💤 SKIP: METADATA.pb: Check font name is the same as family name.
💤 SKIP: METADATA.pb: Check that font weight has a canonical value.
💤 SKIP: Checking OS/2 usWeightClass matches weight specified at METADATA.pb.
💤 SKIP: METADATA.pb weight matches postScriptName.
💤 SKIP: METADATA.pb: Font styles are named canonically?
💤 SKIP: Version number has increased since previous release on Google Fonts?
💤 SKIP: Glyphs are similiar to Google Fonts version?
💤 SKIP: TTFAutohint x-height increase value is same as in previous release on Google Fonts?
💤 SKIP: Checking OS/2 fsSelection value.
💤 SKIP: Checking post.italicAngle value.
💤 SKIP: Checking head.macStyle value.
💤 SKIP: Check font has same encoded glyphs as version hosted on fonts.google.com
💤 SKIP: Copyright field for this font on METADATA.pb matches all copyright notice entries on the name table ?
💤 SKIP: Font has all mandatory 'name' table entries ?
💤 SKIP: Check name table: FONT_FAMILY_NAME entries.
💤 SKIP: Check name table: FONT_SUBFAMILY_NAME entries.
💤 SKIP: Check name table: FULL_FONT_NAME entries.
💤 SKIP: Check name table: POSTSCRIPT_NAME entries.
💤 SKIP: Check name table: TYPOGRAPHIC_FAMILY_NAME entries.
💤 SKIP: Check name table: TYPOGRAPHIC_SUBFAMILY_NAME entries.
💤 SKIP: Check a static ttf can be generated from a variable font.
💤 SKIP: FontForge validation outputs error messages?
💤 SKIP: FontForge checks.
💤 SKIP: Is there kerning info for non-ligated sequences?
💤 SKIP: Is there a caret position declared for every ligature?
💤 SKIP: The variable font 'wght' (Weight) axis coordinate must be 400 on the 'Regular' instance.
💤 SKIP: The variable font 'wdth' (Width) axis coordinate must be 100 on the 'Regular' instance.
💤 SKIP: The variable font 'slnt' (Slant) axis coordinate must be zero on the 'Regular' instance.
💤 SKIP: The variable font 'ital' (Italic) axis coordinate must be zero on the 'Regular' instance.
💤 SKIP: The variable font 'opsz' (Optical Size) axis coordinate should be between 9 and 13 on the 'Regular' instance.
💤 SKIP: The variable font 'wght' (Weight) axis coordinate must be 700 on the 'Bold' instance.
ℹ️ INFO: Font has old ttfautohint applied?
  • com.google.fonts/check/056
  • ℹ️ INFO 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.000', 'Version 2.000']
ℹ️ INFO: EPAR table present in font?
ℹ️ INFO: Check for font-v versioning
  • com.google.fonts/check/166
  • ℹ️ INFO Version string is: "Version 2.000"
    The version string must ideally include a git commit hash and either a 'dev' or a 'release' suffix such as in the example below:
    "Version 1.3; git-0d08353-release"
ℹ️ INFO: Font contains all required tables?
  • com.google.fonts/check/052
  • ℹ️ INFO This font contains the following optional tables [loca, DSIG, prep, fpgm, cvt , gasp]
  • 🍞 PASS Font contains all required tables.
🍞 PASS: Fonts have equal numbers of glyphs?
🍞 PASS: Fonts have equal glyph names?
🍞 PASS: Checking OS/2 fsType.
🍞 PASS: Substitute copyright, registered and trademark symbols in name table entries.
  • com.google.fonts/check/019
  • 🍞 PASS No need to substitute copyright, registered and trademark symbols in name table entries of this font.
🍞 PASS: Description strings in the name table must not exceed 200 characters.
🍞 PASS: Version format is correct in 'name' table?
🍞 PASS: Is 'gasp' table set to optimize rendering?
🍞 PASS: Make sure family name does not begin with a digit.
🍞 PASS: Font has all expected currency sign characters?
🍞 PASS: Are there non-ASCII characters in ASCII-only NAME table entries?
🍞 PASS: Is font em size (ideally) equal to 1000?
🍞 PASS: Length of copyright notice must not exceed 500 characters.
🍞 PASS: Familyname must be unique according to namecheck.fontdata.com
🍞 PASS: Checking OS/2 usWinAscent & usWinDescent.
🍞 PASS: Checking OS/2 Metrics match hhea Metrics.
🍞 PASS: Checking with ftxvalidator.
🍞 PASS: Checking with ots-sanitize.
🍞 PASS: Font contains .notdef as first glyph?
  • com.google.fonts/check/046
  • 🍞 PASS Font contains the .notdef glyph as the first glyph, it does not have a Unicode value assigned and contains a drawing.
🍞 PASS: Font contains glyphs for whitespace characters?
🍞 PASS: Font has **proper** whitespace glyph names?
🍞 PASS: Whitespace glyphs have ink?
🍞 PASS: Are there unwanted tables?
🍞 PASS: Glyph names are all valid?
🍞 PASS: Font contains unique glyph names?
🍞 PASS: Checking with fontTools.ttx
🍞 PASS: Check glyphs have unique unicode codepoints.
🍞 PASS: Check all glyphs have codepoints assigned.
🍞 PASS: Checking unitsPerEm value is reasonable.
🍞 PASS: Checking font version fields (head and name table).
🍞 PASS: Check if OS/2 xAvgCharWidth is correct.
🍞 PASS: Font has correct post table version (2 for TTF, 3 for OTF)?
🍞 PASS: Description strings in the name table must not contain copyright info.
🍞 PASS: Name table entries should not contain line-breaks.
🍞 PASS: Does full font name begin with the font family name?
🍞 PASS: Font follows the family naming recommendations?
🍞 PASS: Name table strings must not contain the string 'Reserved Font Name'.
🍞 PASS: MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables?
🍞 PASS: Does the font have a DSIG table?
🍞 PASS: Whitespace and non-breaking space have the same width?
🍞 PASS: Is there a "kern" table declared in the font?
🍞 PASS: Is there any unused data at the end of the glyf table?
🍞 PASS: Check for points out of bounds.
🍞 PASS: Does the number of glyphs in the loca table match the maxp table?

Summary

💔 ERROR 🔥 FAIL ⚠️ WARN 💤 SKIP ℹ️ INFO 🍞 PASS
1 4 8 67 4 49
1% 3% 6% 50% 3% 37%
@mjlagattuta
Copy link
Collaborator Author

Checked 9/24/18. Some notes:

  • Waiting on Emre to register as a vendor with Microsoft so we can update the VendorID in the name table.
  • There is a fail for The isFixedPitch field is nonzero, but hmtx shows the font as proportional. This is a monospaced display font, and as such there are ligature glyphs with multiples of the standard advance width, I assume this is fine?
  • The family name combined with the style name exceeds 20 characters and yields a WARN. Should the family name be truncated to "Major Mono"?

Fontbakery report

[22] Family checks
🔥 FAIL: Check font has a license.
  • com.google.fonts/check/028
  • 🔥 FAIL No license file was found. Please add an OFL.txt or a LICENSE.txt file. If you are running fontbakery on a Google Fonts upstream repo, which is fine, just make sure there is a temporary license file in the same folder. [code: none]
🍞 PASS: Checking all files are in the same directory.
🍞 PASS: Fonts have equal unicode encodings?
🍞 PASS: Make sure all font files have the same version value.
🍞 PASS: Fonts have consistent PANOSE proportion?
🍞 PASS: Fonts have consistent PANOSE family type?
🍞 PASS: Fonts have consistent underline thickness?
💤 SKIP: Does DESCRIPTION file contain broken links?
💤 SKIP: Is this a proper HTML snippet?
💤 SKIP: DESCRIPTION.en_us.html must have more than 200 bytes.
💤 SKIP: DESCRIPTION.en_us.html must have less than 1000 bytes.
💤 SKIP: Font designer field in METADATA.pb must not be 'unknown'.
💤 SKIP: METADATA.pb: Fontfamily is listed on Google Fonts API?
💤 SKIP: METADATA.pb: check if fonts field only has unique "full_name" values.
💤 SKIP: METADATA.pb: check if fonts field only contains unique style:weight pairs.
💤 SKIP: METADATA.pb license is "APACHE2", "UFL" or "OFL"?
💤 SKIP: METADATA.pb should contain at least "menu" and "latin" subsets.
💤 SKIP: METADATA.pb subsets should be alphabetically ordered.
💤 SKIP: METADATA.pb: Copyright notice is the same in all fonts?
💤 SKIP: Check that METADATA.pb family values are all the same.
💤 SKIP: METADATA.pb: According Google Fonts standards, families should have a Regular style.
💤 SKIP: METADATA.pb: Regular should be 400.

[111] MajorMonoDisplay-Regular.ttf
🔥 FAIL: Checking with Microsoft Font Validator.
  • com.google.fonts/check/037
  • 🔥 FAIL MS-FonVal: The isFixedPitch field is nonzero, but hmtx shows the font as proportional
  • ℹ️ INFO Microsoft Font Validator returned an error code. Output follows :

MajorMonoDisplay-Regular.ttf (file 1 of 1)
Table Test: DSIG
Table Test: GDEF
Table Test: GPOS
Table Test: GSUB
Table Test: OS/2
Table Test: cmap
Table Test: cvt
Table Test: fpgm
Table Test: gasp
Table Test: glyf
Progress: Validating glyph with index 0 (out of 720 glyphs)
Progress: Validating glyph with index 100 (out of 720 glyphs)
Progress: Validating glyph with index 200 (out of 720 glyphs)
Progress: Validating glyph with index 300 (out of 720 glyphs)
Progress: Validating glyph with index 400 (out of 720 glyphs)
Progress: Validating glyph with index 500 (out of 720 glyphs)
Progress: Validating glyph with index 600 (out of 720 glyphs)
Progress: Validating glyph with index 700 (out of 720 glyphs)
Table Test: head
Table Test: hhea
Table Test: hmtx
Table Test: loca
Table Test: maxp
Table Test: name
Table Test: post
Table Test: prep
Begin Raster Test: Black and White
Begin Raster Test: Grayscale
Begin Raster Test: ClearType
Complete: MajorMonoDisplay-Regular.ttf.report.xml

Unhandled Exception:
System.DllNotFoundException: libfreetype.6.dylib
at (wrapper managed-to-native) SharpFont.FT.FT_Done_FreeType(intptr)
at SharpFont.Library.Dispose (System.Boolean disposing) [0x001a3] in <6bd9613faa3d4edfac217488ff609b6f>:0
at SharpFont.Library.Finalize () [0x00000] in <6bd9613faa3d4edfac217488ff609b6f>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.DllNotFoundException: libfreetype.6.dylib
at (wrapper managed-to-native) SharpFont.FT.FT_Done_FreeType(intptr)
at SharpFont.Library.Dispose (System.Boolean disposing) [0x001a3] in <6bd9613faa3d4edfac217488ff609b6f>:0
at SharpFont.Library.Finalize () [0x00000] in <6bd9613faa3d4edfac217488ff609b6f>:0

  • ℹ️ INFO MS-FonVal: The file begins with an Offset Table (file contains a single font)
  • ℹ️ INFO MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 'Latin Extended-B', 62 characters are present
  • ℹ️ INFO MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 'IPA Extensions', 1 characters are present
  • ℹ️ INFO MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 'Spacing Modifier Letters', 11 characters are present
  • ℹ️ INFO MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 'Combining Diacritical Marks', 26 characters are present
  • ℹ️ INFO MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 'General Punctuation', 20 characters are present
  • ℹ️ INFO MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 'Superscripts and Subscripts', 1 characters are present
  • ℹ️ INFO MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 'Currency Symbols', 16 characters are present
  • ℹ️ INFO MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 'Letterlike Symbols', 2 characters are present
  • ℹ️ INFO MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 8 characters are present in the ranges: Arrows, Supplementary Arrows A, Supplementary Arrows B
  • ℹ️ INFO MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 9 characters are present in the ranges: Mathematical Operators, Supplemental Mathematical Operators, Mathematical Symbols A, Mathematical Symbols B
  • ℹ️ INFO MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 'Private Use Area', 7 characters are present
  • ℹ️ INFO MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 'Alphabetic Presentation Forms', 5 characters are present
  • ℹ️ INFO MS-FonVal: Validation for the fpgm table is not directly implemented, but rasterization testing will validate any executed hinting instructions
  • ℹ️ INFO MS-FonVal: Loca references a zero-length entry in the glyf table DETAILS: Number of glyphs that are empty = 4
  • ℹ️ INFO MS-FonVal: No string for Typographic Family name (Name ID 16)
  • ℹ️ INFO MS-FonVal: No string for Typographic Subfamily name (Name ID 17)
  • ℹ️ INFO MS-FonVal: The post name isn't in uniXXXX or uXXXXX format and there is no Adobe Glyph List entry DETAILS: glyph = 299, char = U+F00D, name = K.alt2
  • ℹ️ INFO MS-FonVal: The post name does not match the name in the Adobe Glyph List DETAILS: glyph = 500, char = U+FB00, name = f_f
  • ℹ️ INFO MS-FonVal: The post name does not match the name in the Adobe Glyph List DETAILS: glyph = 501, char = U+FB03, name = f_f_i
  • ℹ️ INFO MS-FonVal: The post name does not match the name in the Adobe Glyph List DETAILS: glyph = 502, char = U+FB04, name = f_f_l
  • ℹ️ INFO MS-FonVal: Validation for the prep table is not directly implemented, but rasterization testing will validate any executed hinting instructions
  • ℹ️ INFO MS-FonVal: An exception occurred during rasterization testing DETAILS: libfreetype.6.dylib at (wrapper managed-to-native) SharpFont.FT.FT_Init_FreeType(intptr&)
    at SharpFont.Library..ctor () [0x00007] in <6bd9613faa3d4edfac217488ff609b6f>:0
    at OTFontFile.Rasterizer.RasterInterf..ctor () [0x00061] in <8bf3804a877240f6a426a121cde2d694>:0
    at OTFontFile.Rasterizer.RasterInterf.getInstance () [0x0000a] in <8bf3804a877240f6a426a121cde2d694>:0
    at OTFontFileVal.OTFileVal.GetRasterizer () [0x00000] in <96025b618ca64658ad6b94312cc3f5e3>:0
    at OTFontFileVal.OTFontVal.Validate () [0x00426] in <96025b618ca64658ad6b94312cc3f5e3>:0
  • ℹ️ INFO MS-FonVal: An exception occurred during rasterization testing DETAILS: libfreetype.6.dylib at (wrapper managed-to-native) SharpFont.FT.FT_Init_FreeType(intptr&)
    at SharpFont.Library..ctor () [0x00007] in <6bd9613faa3d4edfac217488ff609b6f>:0
    at OTFontFile.Rasterizer.RasterInterf..ctor () [0x00061] in <8bf3804a877240f6a426a121cde2d694>:0
    at OTFontFile.Rasterizer.RasterInterf.getInstance () [0x0000a] in <8bf3804a877240f6a426a121cde2d694>:0
    at OTFontFileVal.OTFileVal.GetRasterizer () [0x00000] in <96025b618ca64658ad6b94312cc3f5e3>:0
    at OTFontFileVal.OTFontVal.Validate () [0x00597] in <96025b618ca64658ad6b94312cc3f5e3>:0
  • ℹ️ INFO MS-FonVal: An exception occurred during rasterization testing DETAILS: libfreetype.6.dylib at (wrapper managed-to-native) SharpFont.FT.FT_Init_FreeType(intptr&)
    at SharpFont.Library..ctor () [0x00007] in <6bd9613faa3d4edfac217488ff609b6f>:0
    at OTFontFile.Rasterizer.RasterInterf..ctor () [0x00061] in <8bf3804a877240f6a426a121cde2d694>:0
    at OTFontFile.Rasterizer.RasterInterf.getInstance () [0x0000a] in <8bf3804a877240f6a426a121cde2d694>:0
    at OTFontFileVal.OTFileVal.GetRasterizer () [0x00000] in <96025b618ca64658ad6b94312cc3f5e3>:0
    at OTFontFileVal.OTFontVal.Validate () [0x00710] in <96025b618ca64658ad6b94312cc3f5e3>:0
  • ℹ️ INFO MS-FonVal: Total time validating file DETAILS: 0:00:04
  • 🍞 PASS MS-FonVal: The numTables field is non-zero DETAILS: 18
  • 🍞 PASS MS-FonVal: The searchRange, entrySelector, and rangeShift fields are all valid
  • 🍞 PASS MS-FonVal: The directory entry tags are in ascending order
  • 🍞 PASS MS-FonVal: The directory entry tag names are valid
  • 🍞 PASS MS-FonVal: The directory entry table offsets are all multiples of 4
  • 🍞 PASS MS-FonVal: All required tables are present
  • 🍞 PASS MS-FonVal: No unnecessary tables are present
  • 🍞 PASS MS-FonVal: All signature blocks were in format 1
  • 🍞 PASS MS-FonVal: All signature blocks' reserved values were 0
  • 🍞 PASS MS-FonVal: The digital signature of the file verified correctly
  • 🍞 PASS MS-FonVal: The version numbers 0x00010000 or 0x0001002 are okay DETAILS: 0x00010000
  • 🍞 PASS MS-FonVal: All header offsets point within the table
  • 🍞 PASS MS-FonVal: The version number is 0x00010000
  • 🍞 PASS MS-FonVal: The LangSysTable is valid DETAILS: ScriptList, ScriptRecord0, ScriptTable, DefaultLangSysTable
  • 🍞 PASS MS-FonVal: The Script Table is valid DETAILS: ScriptList, ScriptRecord0, ScriptTable
  • 🍞 PASS MS-FonVal: The LangSysTable is valid DETAILS: ScriptList, ScriptRecord1, ScriptTable, DefaultLangSysTable
  • 🍞 PASS MS-FonVal: The Script Table is valid DETAILS: ScriptList, ScriptRecord1, ScriptTable
  • 🍞 PASS MS-FonVal: The ScriptList Table is valid DETAILS: ScriptList
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord0, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord1, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord2, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord3, FeatureTable
  • 🍞 PASS MS-FonVal: The FeatureList table is valid DETAILS: FeatureList
  • 🍞 PASS MS-FonVal: The BaseArray table is valid DETAILS: LookupList, Lookup[0], SubTable0, BaseArray
  • 🍞 PASS MS-FonVal: The MarkBasePos subtable is valid DETAILS: LookupList, Lookup[0], SubTable0
  • 🍞 PASS MS-FonVal: The BaseArray table is valid DETAILS: LookupList, Lookup[1], SubTable0, BaseArray
  • 🍞 PASS MS-FonVal: The MarkBasePos subtable is valid DETAILS: LookupList, Lookup[1], SubTable0
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array, Mark2Record[0]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array, Mark2Record[1]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array, Mark2Record[2]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array, Mark2Record[3]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array, Mark2Record[4]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array, Mark2Record[5]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array, Mark2Record[6]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array, Mark2Record[7]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array, Mark2Record[8]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array, Mark2Record[9]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array, Mark2Record[10]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array, Mark2Record[11]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array, Mark2Record[12]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array, Mark2Record[13]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array, Mark2Record[14]
  • 🍞 PASS MS-FonVal: The Mark2Array table is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array
  • 🍞 PASS MS-FonVal: The MarkMarkPos subtable is valid DETAILS: LookupList, Lookup[2], SubTable0
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[3], SubTable0, Mark2Array, Mark2Record[0]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[3], SubTable0, Mark2Array, Mark2Record[1]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[3], SubTable0, Mark2Array, Mark2Record[2]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[3], SubTable0, Mark2Array, Mark2Record[3]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[3], SubTable0, Mark2Array, Mark2Record[4]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[3], SubTable0, Mark2Array, Mark2Record[5]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[3], SubTable0, Mark2Array, Mark2Record[6]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[3], SubTable0, Mark2Array, Mark2Record[7]
  • 🍞 PASS MS-FonVal: The Mark2Array table is valid DETAILS: LookupList, Lookup[3], SubTable0, Mark2Array
  • 🍞 PASS MS-FonVal: The MarkMarkPos subtable is valid DETAILS: LookupList, Lookup[3], SubTable0
  • 🍞 PASS MS-FonVal: The LookupList table is valid DETAILS: LookupList
  • 🍞 PASS MS-FonVal: The LangSysTable is valid DETAILS: ScriptList, ScriptRecord1, ScriptTable, LangSysRecord[0], LangSysTable
  • 🍞 PASS MS-FonVal: The LangSysTable is valid DETAILS: ScriptList, ScriptRecord1, ScriptTable, LangSysRecord[1], LangSysTable
  • 🍞 PASS MS-FonVal: The LangSysTable is valid DETAILS: ScriptList, ScriptRecord1, ScriptTable, LangSysRecord[2], LangSysTable
  • 🍞 PASS MS-FonVal: The LangSysTable is valid DETAILS: ScriptList, ScriptRecord1, ScriptTable, LangSysRecord[3], LangSysTable
  • 🍞 PASS MS-FonVal: The LangSysTable is valid DETAILS: ScriptList, ScriptRecord1, ScriptTable, LangSysRecord[4], LangSysTable
  • 🍞 PASS MS-FonVal: The LangSysTable is valid DETAILS: ScriptList, ScriptRecord1, ScriptTable, LangSysRecord[5], LangSysTable
  • 🍞 PASS MS-FonVal: The LangSysTable is valid DETAILS: ScriptList, ScriptRecord1, ScriptTable, LangSysRecord[6], LangSysTable
  • 🍞 PASS MS-FonVal: The LangSysTable is valid DETAILS: ScriptList, ScriptRecord1, ScriptTable, LangSysRecord[7], LangSysTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord0, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord1, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord2, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord3, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord4, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord5, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord6, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord7, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord8, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord9, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord10, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord11, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord12, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord13, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord14, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord15, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord16, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord17, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord18, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord19, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord20, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord21, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord22, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord23, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord24, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord25, FeatureTable
  • 🍞 PASS MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[0], SubTable[0](SingleSubst, fmt 2)
  • 🍞 PASS MS-FonVal: The AlternateSubst subtable is valid DETAILS: LookupList, Lookup[1], SubTable[0](AlternateSubst, fmt 1)
  • 🍞 PASS MS-FonVal: The LigatureSubst subtable is valid DETAILS: LookupList, Lookup[2], SubTable[0](LigatureSubst, fmt 1)
  • 🍞 PASS MS-FonVal: The LigatureSubst subtable is valid DETAILS: LookupList, Lookup[3], SubTable[0](LigatureSubst, fmt 1)
  • 🍞 PASS MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[4], SubTable[0](SingleSubst, fmt 1)
  • 🍞 PASS MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[5], SubTable[0](SingleSubst, fmt 1)
  • 🍞 PASS MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[6], SubTable[0](SingleSubst, fmt 1)
  • 🍞 PASS MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[7], SubTable[0](SingleSubst, fmt 1)
  • 🍞 PASS MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[8], SubTable[0](SingleSubst, fmt 1)
  • 🍞 PASS MS-FonVal: The ChainContextSubst subtable is valid DETAILS: LookupList, Lookup[9], SubTable[0](ChainContextSubst, fmt 3)
  • 🍞 PASS MS-FonVal: The ChainContextSubst subtable is valid DETAILS: LookupList, Lookup[9], SubTable[1](ChainContextSubst, fmt 3)
  • 🍞 PASS MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[10], SubTable[0](SingleSubst, fmt 1)
  • 🍞 PASS MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[11], SubTable[0](SingleSubst, fmt 1)
  • 🍞 PASS MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[12], SubTable[0](SingleSubst, fmt 1)
  • 🍞 PASS MS-FonVal: The LigatureSubst subtable is valid DETAILS: LookupList, Lookup[13], SubTable[0](LigatureSubst, fmt 1)
  • 🍞 PASS MS-FonVal: The ChainContextSubst subtable is valid DETAILS: LookupList, Lookup[14], SubTable[0](ChainContextSubst, fmt 3)
  • 🍞 PASS MS-FonVal: The ChainContextSubst subtable is valid DETAILS: LookupList, Lookup[14], SubTable[1](ChainContextSubst, fmt 3)
  • 🍞 PASS MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[15], SubTable[0](SingleSubst, fmt 1)
  • 🍞 PASS MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[16], SubTable[0](SingleSubst, fmt 1)
  • 🍞 PASS MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[17], SubTable[0](SingleSubst, fmt 1)
  • 🍞 PASS MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[18], SubTable[0](SingleSubst, fmt 2)
  • 🍞 PASS MS-FonVal: The table length matches the expected length for this version
  • 🍞 PASS MS-FonVal: The usWeightClass is a valid value DETAILS: 400
  • 🍞 PASS MS-FonVal: The width class is a valid value DETAILS: 5
  • 🍞 PASS MS-FonVal: The fsType field is valid DETAILS: 0x0000, Installable Embedding
  • 🍞 PASS MS-FonVal: All subscript and superscript values appear valid
  • 🍞 PASS MS-FonVal: The yStrikeoutSize and yStrikeoutPosition appear valid
  • 🍞 PASS MS-FonVal: The sFamilyClass Class ID and Subclass ID values are in a valid range
  • 🍞 PASS MS-FonVal: All panose values are in a valid range
  • 🍞 PASS MS-FonVal: The Unicode Range fields' bits are all allowable values
  • 🍞 PASS MS-FonVal: The usFirstCharIndex and usLastCharIndex fields are valid DETAILS: first = 0x000d, last = 0xfb04
  • 🍞 PASS MS-FonVal: The sTypoAscender and sTypoDescender fields are reasonable values DETAILS: sTypoAscender = 900, sTypoDescender = -100
  • 🍞 PASS MS-FonVal: The CodePage Range fields' bits are all allowable values
  • 🍞 PASS MS-FonVal: The sxHeight field is nonzero DETAILS: 696
  • 🍞 PASS MS-FonVal: The sCapHeight field is nonzero DETAILS: 696
  • 🍞 PASS MS-FonVal: The usDefaultChar field is zero
  • 🍞 PASS MS-FonVal: The usBreakChar is mapped to a glyf
  • 🍞 PASS MS-FonVal: The usMaxContext field matches the calculated value DETAILS: 3
  • 🍞 PASS MS-FonVal: The table version number is 0
  • 🍞 PASS MS-FonVal: Each subtable offset is within the table
  • 🍞 PASS MS-FonVal: Each subtable length is within the table
  • 🍞 PASS MS-FonVal: The subtables are in the correct order
  • 🍞 PASS MS-FonVal: There are no duplicate subtables
  • 🍞 PASS MS-FonVal: No overlapping subtables were found
  • 🍞 PASS MS-FonVal: Each subtable's format number is valid
  • 🍞 PASS MS-FonVal: The subtable internal format appears valid DETAILS: PlatID = 0, EncID = 3, Fmt = 4
  • 🍞 PASS MS-FonVal: The subtable internal format appears valid DETAILS: PlatID = 3, EncID = 1, Fmt = 4
  • 🍞 PASS MS-FonVal: Character code U+20AC, the euro character, is mapped for cmap 3,1
  • 🍞 PASS MS-FonVal: All non mac subtables have a language field of zero
  • 🍞 PASS MS-FonVal: The length of the cvt table is an even number of bytes
  • 🍞 PASS MS-FonVal: The version number is valid DETAILS: version = 1
  • 🍞 PASS MS-FonVal: All of the rangeGaspBehavior fields contain valid flags
  • 🍞 PASS MS-FonVal: The gaspRange array is in sorted order
  • 🍞 PASS MS-FonVal: The gaspRange array has a 0xFFFF sentinel
  • 🍞 PASS MS-FonVal: No adjacent ranges have identical flags
  • 🍞 PASS MS-FonVal: Correct format of loca (0 or 1)
  • 🍞 PASS MS-FonVal: Table length is 54 bytes
  • 🍞 PASS MS-FonVal: The table version number is 0x00010000
  • 🍞 PASS MS-FonVal: fontRevision is consistent with the font's version string DETAILS: 2.000
  • 🍞 PASS MS-FonVal: Font checksum is correct DETAILS: 0x87a37e34
  • 🍞 PASS MS-FonVal: The magic number is 0x5f0f3cf5
  • 🍞 PASS MS-FonVal: Non-linear scaling flag (bit 4) is clear, and hdmx table is not present
  • 🍞 PASS MS-FonVal: Non-linear scaling flag (bit 4) is clear, and LTSH table is not present
  • 🍞 PASS MS-FonVal: Reserved bit 14 of the flags field is clear
  • 🍞 PASS MS-FonVal: Reserved bit 15 of the flags field is clear
  • 🍞 PASS MS-FonVal: The created time is not zero
  • 🍞 PASS MS-FonVal: The xMin value matches the minimum glyph xMin DETAILS: xMin = -643
  • 🍞 PASS MS-FonVal: The yMin value matches the minimum glyph yMin DETAILS: yMin = -223
  • 🍞 PASS MS-FonVal: The xMax value matches the maximum glyph xMax DETAILS: xMax = 2157
  • 🍞 PASS MS-FonVal: The yMax value matches the maximum glyph yMax DETAILS: yMax = 1152
  • 🍞 PASS MS-FonVal: The macStyle bold bit matches the name table's font subfamily string
  • 🍞 PASS MS-FonVal: The macStyle italic bit matches the name table's font subfamily string
  • 🍞 PASS MS-FonVal: The macStyle bold bit matches the OS/2 fsSelection bit
  • 🍞 PASS MS-FonVal: The macStyle italic bit matches the OS/2 fsSelection bit
  • 🍞 PASS MS-FonVal: The macStyle italic bit matches the post table italic angle
  • 🍞 PASS MS-FonVal: The lowestRecPPEM value is in a reasonable range
  • 🍞 PASS MS-FonVal: The fontDirectionHint is in the range -2..2 DETAILS: 2
  • 🍞 PASS MS-FonVal: The indexToLocFormat value is 0 or 1 DETAILS: 0
  • 🍞 PASS MS-FonVal: The indexToLocFormat value matches the loca table DETAILS: 0
  • 🍞 PASS MS-FonVal: The glyphDataFormat value is 0
  • 🍞 PASS MS-FonVal: The Ascender value is greater than zero
  • 🍞 PASS MS-FonVal: The Descender is less than zero
  • 🍞 PASS MS-FonVal: Ascender is less than or equal to head.yMax
  • 🍞 PASS MS-FonVal: Descender is greater than or equal to head.yMin
  • 🍞 PASS MS-FonVal: LineGap is greater than or equal to 0
  • 🍞 PASS MS-FonVal: The advanceWidthMax field equals the calculated value
  • 🍞 PASS MS-FonVal: The minLeftSideBearing field equals the calculated value
  • 🍞 PASS MS-FonVal: The minRightSideBearing field equals the calculated value
  • 🍞 PASS MS-FonVal: The xMaxExtent field equals the calculated value
  • 🍞 PASS MS-FonVal: The reserved fields are all set to zero
  • 🍞 PASS MS-FonVal: The metricDataFormat field is set to zero
  • 🍞 PASS MS-FonVal: The numberOfHMetrics value is consistent with the length of the hmtx table
  • 🍞 PASS MS-FonVal: The caretSlope angle matches the post.italicAngle
  • 🍞 PASS MS-FonVal: The size of the table matches the calculated size
  • 🍞 PASS MS-FonVal: The horizontal metrics are all within an allowable range of values
  • 🍞 PASS MS-FonVal: The number of entries is equal to (maxp.numGlyphs + 1)
  • 🍞 PASS MS-FonVal: The entries are sorted in ascending order
  • 🍞 PASS MS-FonVal: All entries point within range of the glyf table
  • 🍞 PASS MS-FonVal: All glyphs in the glyf table are referenced by the loca table
  • 🍞 PASS MS-FonVal: Table version is 1.0 and a glyf table is present and no CFF table is present
  • 🍞 PASS MS-FonVal: Table version is 1.0 and the table is 32 bytes long
  • 🍞 PASS MS-FonVal: The numGlyphs value equals the number of entries in the loca array plus one DETAILS: numGlyphs = 720
  • 🍞 PASS MS-FonVal: The format selector field is 0
  • 🍞 PASS MS-FonVal: No strings extended past the end of the table
  • 🍞 PASS MS-FonVal: The NameRecords array is in sorted order
  • 🍞 PASS MS-FonVal: No name records are using reserved Name IDs
  • 🍞 PASS MS-FonVal: The table contains strings for both Mac and Microsoft platforms
  • 🍞 PASS MS-FonVal: The version string is in the correct format DETAILS: platID = 3, encID = 1, langID = 1033, "Version 2.000; ttfautohint (v1.8) -l 8 -r 50 -G 200 -x 14 -D latn -f none -a qsq -X """
  • 🍞 PASS MS-FonVal: All strings had valid Platform Specific Encoding IDs
  • 🍞 PASS MS-FonVal: All Microsoft unicode strings had valid Language IDs
  • 🍞 PASS MS-FonVal: The length of every unicode string is an even # of bytes
  • 🍞 PASS MS-FonVal: The PostScript strings are correctly formatted
  • 🍞 PASS MS-FonVal: The subfamily string is consistent with the style of the font
  • 🍞 PASS MS-FonVal: No name record specified Unicode Variation Sequences cmap subtable DETAILS: PlatformID=0, EncodingID=5 is for Variation Sequences (Format 14)
  • 🍞 PASS MS-FonVal: No inconsistencies were found for Copyright strings
  • 🍞 PASS MS-FonVal: No inconsistencies were found for Trademark strings
  • 🍞 PASS MS-FonVal: No inconsistencies were found for Description strings
  • 🍞 PASS MS-FonVal: The table length is valid
  • 🍞 PASS MS-FonVal: The version number is valid
  • 🍞 PASS MS-FonVal: The italicAngle value is reasonable and consistent with other tables
  • 🍞 PASS MS-FonVal: The underlinePosition value is not less than hhea.Descender
  • 🍞 PASS MS-FonVal: The underlineThickness value is reasonable
  • 🍞 PASS MS-FonVal: The numberOfGlyphs field equals maxp.numGlyphs
  • 🍞 PASS MS-FonVal: The glyphNameIndex array contains valid indexes
  • 🍞 PASS MS-FonVal: The names in the post table are consistent with the Adobe Glyph List names
  • ⚠️ WARN MS-FonVal: Recommended table is missing DETAILS: kern
  • ⚠️ WARN MS-FonVal: Recommended table is missing DETAILS: hdmx
  • ⚠️ WARN MS-FonVal: Recommended table is missing DETAILS: VDMX
  • ⚠️ WARN MS-FonVal: Tables are not in optimal order DETAILS: table 'OS/2' precedes table 'head'
  • ⚠️ WARN MS-FonVal: The version number is valid, but less than 5 DETAILS: 4
  • ⚠️ WARN MS-FonVal: The xAvgCharWidth field does not equal the calculated value DETAILS: actual = 759, calc = 740
  • ⚠️ WARN MS-FonVal: There are undefined bits set in fsSelection field DETAILS: Bit(s) 7
  • ⚠️ WARN MS-FonVal: A CodePage bit is set in ulCodePageRange, but the font is missing some of the printable characters from that codepage DETAILS: bit #29, Mac character set (missing chars: U221E U2202 U2211 U220F U03C0 U222B U2126 U221A U2206 U25CA)
  • ⚠️ WARN MS-FonVal: The table does not contain any Apple subtables
  • ⚠️ WARN MS-FonVal: Apple logo mapping test not performed, cmap 1,0 not present
  • ⚠️ WARN MS-FonVal: Characters are mapped in the Unicode Private Use area
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 9
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 15
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 18
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 23
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 32
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 33
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 34
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 35
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 36
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 37
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 54
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 78
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 84
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 132
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 147
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 148
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 149
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 150
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 151
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 152
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 152
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 153
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 154
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 155
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 156
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 165
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 170
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 177
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 206
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 226
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 237
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 240
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 245
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 254
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 264
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 266
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 267
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 270
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 277
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 280
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 298
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 315
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 320
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 343
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 350
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 356
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 364
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 376
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 411
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 413
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 414
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 415
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 416
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 430
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 443
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 445
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 448
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 451
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 452
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 453
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 456
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 462
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 467
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 474
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 553
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 578
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 580
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 612
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 664
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 669
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 675
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 676
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 677
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 692
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 697
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 703
  • ⚠️ WARN MS-FonVal: The unitsPerEm value is not a power of two DETAILS: 1000
  • ⚠️ WARN MS-FonVal: The modified time is an unlikely value DETAILS: modified = 3620650232 (Monday, September 24, 2018 4:10 PM)
  • ⚠️ WARN MS-FonVal: Ascender is different than OS/2.usWinAscent. Different line heights on Windows and Apple DETAILS: hhea.Ascender = 900, OS/2.usWinAscent = 1152
  • ⚠️ WARN MS-FonVal: Descender is different than OS/2.usWinDescent. Different line heights on Windows and Apple DETAILS: hhea.Descender = -100, OS/2.usWinDescent = 224
  • ⚠️ WARN MS-FonVal: The LineGap value is less than the recommended value DETAILS: LineGap = 0, recommended = 376
  • ⚠️ WARN MS-FonVal: Loca references a glyf entry which length is not a multiple of 4 DETAILS: Number of glyphs with the warning = 1
  • ⚠️ WARN MS-FonVal: maxSizeOfInstructions computation not via either approved method DETAILS: glyf maxSizeOfInstructions=355, prep size=178, fpgm size=3605, whereas maxp maxSizeOfInstruction is 3605
⚠️ WARN: Checking OS/2 achVendID.
⚠️ WARN: Font has old ttfautohint applied?
  • com.google.fonts/check/056
  • ⚠️ WARN ttfautohint used in font = 1.8; installed = 1.8.2; Need to re-run with the newer version!
⚠️ WARN: Check if each glyph has the recommended amount of contours.
  • com.google.fonts/check/153
  • ⚠️ 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: 1 Expected: 2 or 3
Glyph name: D Contours detected: 1 Expected: 2
Glyph name: G Contours detected: 2 Expected: 1
Glyph name: M Contours detected: 2 Expected: 1
Glyph name: R Contours detected: 4 Expected: 1 or 2
Glyph name: V Contours detected: 2 Expected: 1
Glyph name: X Contours detected: 3 Expected: 1
Glyph name: Z Contours detected: 2 Expected: 1
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: Adieresis Contours detected: 6 Expected: 4
Glyph name: Edieresis Contours detected: 5 Expected: 3
Glyph name: Idieresis Contours detected: 5 Expected: 3
Glyph name: Eth Contours detected: 1 Expected: 2
Glyph name: Odieresis Contours detected: 6 Expected: 4
Glyph name: Udieresis Contours detected: 5 Expected: 3
Glyph name: adieresis Contours detected: 6 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: 5 Expected: 4
Glyph name: idieresis Contours detected: 5 Expected: 3
Glyph name: odieresis Contours detected: 6 Expected: 4
Glyph name: divide Contours detected: 5 Expected: 3
Glyph name: udieresis Contours detected: 5 Expected: 3
Glyph name: ydieresis Contours detected: 5 Expected: 3
Glyph name: Cdotaccent Contours detected: 3 Expected: 2
Glyph name: cdotaccent Contours detected: 3 Expected: 2
Glyph name: Dcaron Contours detected: 2 Expected: 3
Glyph name: Dcroat Contours detected: 1 Expected: 2
Glyph name: emacron Contours detected: 2 Expected: 3
Glyph name: ebreve Contours detected: 2 Expected: 3
Glyph name: Edotaccent Contours detected: 3 Expected: 2
Glyph name: eogonek Contours detected: 1 Expected: 2
Glyph name: ecaron Contours detected: 2 Expected: 3
Glyph name: Gcircumflex Contours detected: 3 Expected: 2
Glyph name: gcircumflex Contours detected: 2 Expected: 3 or 4
Glyph name: Gbreve Contours detected: 3 Expected: 2
Glyph name: gbreve Contours detected: 2 Expected: 3 or 4
Glyph name: Gdotaccent Contours detected: 4 Expected: 2
Glyph name: uni0122 Contours detected: 3 Expected: 2
Glyph name: uni0123 Contours detected: 2 Expected: 3 or 4
Glyph name: hbar Contours detected: 2 Expected: 1
Glyph name: iogonek Contours detected: 1 Expected: 2 or 3
Glyph name: Idotaccent Contours detected: 3 Expected: 2
Glyph name: oe Contours detected: 2 Expected: 3
Glyph name: Racute Contours detected: 5 Expected: 3
Glyph name: racute Contours detected: 3 Expected: 2
Glyph name: uni0156 Contours detected: 5 Expected: 3
Glyph name: uni0157 Contours detected: 3 Expected: 2
Glyph name: Rcaron Contours detected: 5 Expected: 3
Glyph name: rcaron Contours detected: 3 Expected: 2
Glyph name: Wcircumflex Contours detected: 3 Expected: 2
Glyph name: Ydieresis Contours detected: 5 Expected: 3
Glyph name: Zacute Contours detected: 3 Expected: 2
Glyph name: Zdotaccent Contours detected: 4 Expected: 2
Glyph name: zdotaccent Contours detected: 3 Expected: 2
Glyph name: Zcaron Contours detected: 3 Expected: 2
Glyph name: uni01C5 Contours detected: 3 Expected: 4
Glyph name: uni01C8 Contours detected: 2 Expected: 3
Glyph name: uni01C9 Contours detected: 2 Expected: 3
Glyph name: uni01CB Contours detected: 2 Expected: 3
Glyph name: uni01CC Contours detected: 2 Expected: 3
Glyph name: Gcaron Contours detected: 3 Expected: 2
Glyph name: gcaron Contours detected: 2 Expected: 3 or 4
Glyph name: aeacute Contours detected: 3 Expected: 4
Glyph name: uni0205 Contours detected: 3 Expected: 4
Glyph name: uni0207 Contours detected: 2 Expected: 3
Glyph name: uni0210 Contours detected: 6 Expected: 4
Glyph name: uni0211 Contours detected: 4 Expected: 3
Glyph name: uni0212 Contours detected: 5 Expected: 3
Glyph name: uni0213 Contours detected: 3 Expected: 2
Glyph name: uni022A Contours detected: 7 Expected: 5
Glyph name: uni022B Contours detected: 7 Expected: 5
Glyph name: uni0230 Contours detected: 5 Expected: 4
Glyph name: uni0231 Contours detected: 5 Expected: 4
Glyph name: dotaccent Contours detected: 2 Expected: 1
Glyph name: f_f_i Contours detected: 3 Expected: 1, 2 or 4
Glyph name: uni0307 Contours detected: 2 Expected: 1
Glyph name: uni0308 Contours detected: 4 Expected: 2
Glyph name: dotbelowcomb Contours detected: 2 Expected: 1
Glyph name: uni0324 Contours detected: 4 Expected: 2
Glyph name: dieresis Contours detected: 4 Expected: 2
Glyph name: Wgrave Contours detected: 3 Expected: 2
Glyph name: Wacute Contours detected: 3 Expected: 2
Glyph name: Wdieresis Contours detected: 6 Expected: 3
Glyph name: wdieresis Contours detected: 5 Expected: 3
Glyph name: uni1EA0 Contours detected: 4 Expected: 3
Glyph name: uni1EA1 Contours detected: 4 Expected: 3
Glyph name: uni1EAC Contours detected: 5 Expected: 4
Glyph name: uni1EAD Contours detected: 5 Expected: 4
Glyph name: uni1EB6 Contours detected: 5 Expected: 4
Glyph name: uni1EB7 Contours detected: 5 Expected: 4
Glyph name: uni1EB8 Contours detected: 3 Expected: 2
Glyph name: uni1EBB Contours detected: 2 Expected: 3
Glyph name: uni1EBD Contours detected: 2 Expected: 3
Glyph name: uni1EBF Contours detected: 3 Expected: 4
Glyph name: uni1EC1 Contours detected: 3 Expected: 4
Glyph name: uni1EC3 Contours detected: 3 Expected: 4
Glyph name: uni1EC5 Contours detected: 3 Expected: 4
Glyph name: uni1EC6 Contours detected: 4 Expected: 3
Glyph name: uni1EC7 Contours detected: 1 Expected: 4
Glyph name: uni1ECA Contours detected: 3 Expected: 2
Glyph name: uni1ECC Contours detected: 4 Expected: 3
Glyph name: uni1ECD Contours detected: 4 Expected: 3
Glyph name: uni1ED8 Contours detected: 5 Expected: 4
Glyph name: uni1ED9 Contours detected: 5 Expected: 4
Glyph name: uni1EE3 Contours detected: 4 Expected: 3
Glyph name: uni1EE4 Contours detected: 3 Expected: 2
Glyph name: uni1EE5 Contours detected: 3 Expected: 2
Glyph name: uni1EF0 Contours detected: 3 Expected: 2
Glyph name: uni1EF1 Contours detected: 3 Expected: 2
Glyph name: uni1EF4 Contours detected: 3 Expected: 2
Glyph name: uni1EF5 Contours detected: 3 Expected: 2

⚠️ WARN: Check if OS/2 xAvgCharWidth is correct.
⚠️ WARN: Checking correctness of monospaced metadata.
  • com.google.fonts/check/033
  • ⚠️ WARN Font is monospaced but 60 glyphs (8.333333333333332%) have a different width. You should check the widths of: ['uni01C4', 'uni01C5', 'uni01C7', 'uni01C8', 'uni01CA', 'uni01CB', 'uni018F', 'uni01C7.alt1', 'uni01C8.alt1', 'uni01CA.alt1', 'uni01CB.alt1', 'uni01C6', 'uni01C9', 'uni01CC', 'f_f', 'f_f_i', 'f_f_l', 'fi', 'fl', 'periodcentered.loclCAT.alt1', 'periodcentered.loclCAT', 'uni0308', 'uni0307', 'gravecomb', 'acutecomb', 'uni030B', 'caroncomb.alt', 'uni0302', 'uni030C', 'uni0306', 'uni030A', 'tildecomb', 'uni0304', 'hookabovecomb', 'uni030F', 'uni0311', 'uni031B', 'dotbelowcomb', 'uni0324', 'uni0326', 'uni0327', 'uni0328', 'uni032E', 'uni0331', 'uni0335', 'uni0336', 'uni0337', 'uni0337.alt', 'uni0338', 'uni031B.alt', 'uni0327.alt', 'uni0328.alt', 'uni03060301', 'uni03060300', 'uni03060309', 'uni03060303', 'uni03020301', 'uni03020300', 'uni03020309', 'uni03020303'] [code: mono-outliers]
⚠️ WARN: Combined length of family and style must not exceed 20 characters.
  • com.google.fonts/check/163
  • ⚠️ WARN The combined length of family and style exceeds 20 chars in the following 'MACINTOSH' entries: FONT_FAMILY_NAME = 'Major Mono Display' / SUBFAMILY_NAME = 'Regular'
  • ⚠️ WARN The combined length of family and style exceeds 20 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Major Mono Display' / SUBFAMILY_NAME = 'Regular'
⚠️ WARN: Monospace font has hhea.advanceWidthMax equal to each glyph's advanceWidth?
  • com.google.fonts/check/079
  • ⚠️ WARN This seems to be a monospaced font, so advanceWidth value should be the same across all glyphs, but 99.44% of them have a different value: nonmarkingreturn, space, A, Aacute, Abreve, uni1EAE, uni1EB6, uni1EB0, uni1EB2, uni1EB4, Acircumflex, uni1EA4, uni1EAC, uni1EA6, uni1EA8, uni1EAA, uni0200, Adieresis, uni1EA0, Agrave, uni1EA2, uni0202, Amacron, Aogonek, Aring, Aringacute, Atilde, AE, AEacute, B, C, Cacute, Ccaron, Ccedilla, Ccircumflex, Cdotaccent, D, uni01C4, Eth, Dcaron, Dcroat, uni01C5, E, Eacute, Ebreve, Ecaron, Ecircumflex, uni1EBE, uni1EC6, uni1EC0, uni1EC2, uni1EC4, uni0204, Edieresis, Edotaccent, uni1EB8, Egrave, uni1EBA, uni0206, Emacron, Eogonek, uni1EBC, F, G, Gbreve, Gcaron, Gcircumflex, uni0122, Gdotaccent, H, Hbar, Hcircumflex, I, Iacute, Ibreve, Icircumflex, uni0208, Idieresis, Idotaccent, uni1ECA, Igrave, uni1EC8, uni020A, Imacron, Iogonek, Itilde, J, Jcircumflex, K, uni0136, L, uni01C7, Lacute, Lcaron, uni013B, Ldot, uni01C8, Lslash, M, N, uni01CA, Nacute, Ncaron, uni0145, Eng, uni01CB, Ntilde, O, Oacute, Obreve, Ocircumflex, uni1ED0, uni1ED8, uni1ED2, uni1ED4, uni1ED6, uni020C, Odieresis, uni022A, uni0230, uni1ECC, Ograve, uni1ECE, Ohorn, uni1EDA, uni1EE2, uni1EDC, uni1EDE, uni1EE0, Ohungarumlaut, uni020E, Omacron, uni01EA, Oslash, Oslashacute, Otilde, uni022C, OE, P, Thorn, Q, R, Racute, Rcaron, uni0156, uni0210, uni0212, S, Sacute, Scaron, Scedilla, Scircumflex, uni0218, uni1E9E, uni018F, T, Tbar, Tcaron, uni0162, U, Uacute, Ubreve, Ucircumflex, uni0214, Udieresis, uni1EE4, Ugrave, uni1EE6, Uhorn, uni1EE8, uni1EF0, uni1EEA, uni1EEC, uni1EEE, Uhungarumlaut, uni0216, Umacron, Uogonek, Uring, Utilde, V, W, Wacute, Wcircumflex, Wdieresis, Wgrave, X, Y, Yacute, Ycircumflex, Ydieresis, uni1EF4, Ygrave, uni1EF6, uni0232, uni1EF8, Z, Zacute, Zcaron, Zdotaccent, uni021A, F.alt1, G.alt1, Gbreve.alt1, Gcaron.alt1, Gcircumflex.alt1, uni0122.alt1, Gdotaccent.alt1, H.alt1, Hbar.alt1, Hcircumflex.alt1, K.alt1, uni0136.alt1, L.alt1, uni01C7.alt1, Lacute.alt1, Lcaron.alt1, uni013B.alt1, Ldot.alt1, uni01C8.alt1, Lslash.alt1, N.alt1, uni01CA.alt1, Nacute.alt1, Ncaron.alt1, uni0145.alt1, Eng.alt1, uni01CB.alt1, Ntilde.alt1, O.alt1, Oacute.alt1, Obreve.alt1, Ocircumflex.alt1, uni1ED0.alt1, uni1ED8.alt1, uni1ED2.alt1, uni1ED4.alt1, uni1ED6.alt1, uni020C.alt1, Odieresis.alt1, uni022A.alt1, uni0230.alt1, uni1ECC.alt1, Ograve.alt1, uni1ECE.alt1, Ohorn.alt1, uni1EDA.alt1, uni1EE2.alt1, uni1EDC.alt1, uni1EDE.alt1, uni1EE0.alt1, Ohungarumlaut.alt1, uni020E.alt1, Omacron.alt1, uni01EA.alt1, Oslash.alt1, Oslashacute.alt1, Otilde.alt1, uni022C.alt1, OE.alt1, R.alt1, Racute.alt1, Rcaron.alt1, uni0156.alt1, uni0210.alt1, uni0212.alt1, T.alt1, Tbar.alt1, Tcaron.alt1, uni0162.alt1, uni021A.alt1, U.alt1, Uacute.alt1, Ubreve.alt1, Ucircumflex.alt1, uni0214.alt1, Udieresis.alt1, uni1EE4.alt1, Ugrave.alt1, uni1EE6.alt1, Uhorn.alt1, uni1EE8.alt1, uni1EF0.alt1, uni1EEA.alt1, uni1EEC.alt1, uni1EEE.alt1, Uhungarumlaut.alt1, uni0216.alt1, Umacron.alt1, Uogonek.alt1, Uring.alt1, Utilde.alt1, W.alt1, Wacute.alt1, Wcircumflex.alt1, Wdieresis.alt1, Wgrave.alt1, K.alt2, uni0136.alt2, a, aacute, abreve, uni1EAF, uni1EB7, uni1EB1, uni1EB3, uni1EB5, acircumflex, uni1EA5, uni1EAD, uni1EA7, uni1EA9, uni1EAB, uni0201, adieresis, uni1EA1, agrave, uni1EA3, uni0203, amacron, aogonek, aring, aringacute, atilde, ae, aeacute, b, c, cacute, ccaron, ccedilla, ccircumflex, cdotaccent, d, eth, dcaron, dcroat, uni01C6, e, eacute, ebreve, ecaron, ecircumflex, uni1EBF, uni1EC7, uni1EC1, uni1EC3, uni1EC5, uni0205, edieresis, edotaccent, uni1EB9, egrave, uni1EBB, uni0207, emacron, eogonek, uni1EBD, uni0259, f, g, gbreve, gcaron, gcircumflex, uni0123, gdotaccent, h, hbar, hcircumflex, i, dotlessi, iacute, ibreve, icircumflex, uni0209, idieresis, i.loclTRK, uni1ECB, igrave, uni1EC9, uni020B, imacron, iogonek, itilde, j, uni0237, jcircumflex, k, uni0137, kgreenlandic, l, lacute, lcaron, uni013C, ldot, uni01C9, lslash, m, n, nacute, ncaron, uni0146, eng, uni01CC, ntilde, o, oacute, obreve, ocircumflex, uni1ED1, uni1ED9, uni1ED3, uni1ED5, uni1ED7, uni020D, odieresis, uni022B, uni0231, uni1ECD, ograve, uni1ECF, ohorn, uni1EDB, uni1EE3, uni1EDD, uni1EDF, uni1EE1, ohungarumlaut, uni020F, omacron, uni01EB, oslash, oslashacute, otilde, uni022D, oe, p, thorn, q, r, racute, rcaron, uni0157, uni0211, uni0213, s, sacute, scaron, scedilla, scircumflex, uni0219, germandbls, t, tbar, tcaron, uni0163, u, uacute, ubreve, ucircumflex, uni0215, udieresis, uni1EE5, ugrave, uni1EE7, uhorn, uni1EE9, uni1EF1, uni1EEB, uni1EED, uni1EEF, uhungarumlaut, uni0217, umacron, uni021B, uogonek, uring, utilde, v, w, wacute, wcircumflex, wdieresis, wgrave, x, y, yacute, ycircumflex, ydieresis, uni1EF5, ygrave, uni1EF7, uni0233, uni1EF9, z, zacute, zcaron, zdotaccent, f_f, fi, fl, ordfeminine, ordmasculine, zero, one, two, three, four, five, six, seven, eight, nine, zero.lf, one.lf, two.lf, three.lf, four.lf, five.lf, six.lf, seven.lf, eight.lf, nine.lf, uni00B9, uni00B2, uni00B3, uni2074, fraction, onehalf, onequarter, threequarters, period, comma, colon, semicolon, ellipsis, exclam, exclamdown, question, questiondown, periodcentered, bullet, asterisk, numbersign, slash, backslash, period.alt1, ellipsis.alt1, exclam.alt1, exclamdown.alt1, question.alt1, questiondown.alt1, periodcentered.alt1, periodcentered.loclCAT.alt1, periodcentered.loclCAT, parenleft, parenright, braceleft, braceright, bracketleft, bracketright, hyphen, uni00AD, endash, emdash, uni2010, underscore, quotesinglbase, quotedblbase, quotedblleft, quotedblright, quoteleft, quoteright, guillemotleft, guillemotright, guilsinglleft, guilsinglright, quotedbl, quotesingle, uni27E8, uni27E9, uni00A0, Euro, uni20B5, cent, colonmonetary, currency, dollar, dong, florin, franc, uni20B2, uni20AD, lira, uni20A6, peseta, uni20B1, sterling, uni20BA, uni20B9, uni20BC, uni20BD, uni20A9, yen, uni2219, uni2215, plus, minus, multiply, divide, equal, notequal, greater, less, greaterequal, lessequal, plusminus, approxequal, asciitilde, logicalnot, asciicircum, uni00B5, percent, perthousand, uni2052, plus.alt1, multiply.alt1, greater.alt1, less.alt1, arrowup, uni2197, arrowright, uni2198, arrowdown, uni2199, arrowleft, uni2196, arrowright.alt1, arrowleft.alt1, at, ampersand, paragraph, section, copyright, registered, trademark, degree, minute, second, bar, brokenbar, dagger, daggerdbl, uni2116, uni2116.alt1, uni02BC, uni02BA, uni02B9, uni0308, uni0307, gravecomb, acutecomb, uni030B, caroncomb.alt, uni0302, uni030C, uni0306, uni030A, tildecomb, uni0304, hookabovecomb, uni030F, uni0311, uni031B, dotbelowcomb, uni0324, uni0326, uni0327, uni0328, uni032E, uni0331, uni0335, uni0336, uni0337, uni0337.alt, uni0338, acute, breve, caron, cedilla, circumflex, dieresis, dotaccent, grave, hungarumlaut, macron, ogonek, ring, tilde, uni031B.alt, uni0327.alt, uni0328.alt, uni03060301, uni03060300, uni03060309, uni03060303, uni03020301, uni03020300, uni03020309, uni03020303, uniE902, uniE903, uniE904, uniE907, uniE908, uniE909 [code: should-be-monospaced]
  • ⚠️ WARN Double-width and/or zero-width glyphs were detected. These glyphs should be set to the same width as all others and then add GPOS single pos lookups that zeros/doubles the widths as needed: periodcentered.loclCAT.alt1, periodcentered.loclCAT, uni0308, uni0307, gravecomb, acutecomb, uni030B, caroncomb.alt, uni0302, uni030C, uni0306, uni030A, tildecomb, uni0304, hookabovecomb, uni030F, uni0311, uni031B, dotbelowcomb, uni0324, uni0326, uni0327, uni0328, uni032E, uni0331, uni0335, uni0336, uni0337, uni0337.alt, uni0338, uni031B.alt, uni0327.alt, uni0328.alt, uni03060301, uni03060300, uni03060309, uni03060303, uni03020301, uni03020300, uni03020309, uni03020303 [code: variable-monospaced]
⚠️ WARN: Does GPOS table have kerning information?
⚠️ WARN: Are there caret positions declared for every ligature?
  • com.google.fonts/check/064
  • ⚠️ WARN This font lacks caret position values for ligature glyphs on its GDEF table. [code: lacks-caret-pos]
💤 SKIP: Check copyright namerecords match license file.
💤 SKIP: Checks METADATA.pb font.name field matches family name declared on the name table.
💤 SKIP: Checks METADATA.pb font.post_script_name matches postscript name declared on the name table.
💤 SKIP: METADATA.pb font.full_name value matches fullname declared on the name table?
💤 SKIP: METADATA.pb font.name value should be same as the family name declared on the name table.
💤 SKIP: METADATA.pb font.full_name and font.post_script_name fields have equivalent values ?
💤 SKIP: METADATA.pb font.filename and font.post_script_name fields have equivalent values?
💤 SKIP: METADATA.pb font.name field contains font name in right format?
💤 SKIP: METADATA.pb font.full_name field contains font name in right format?
💤 SKIP: METADATA.pb font.filename field contains font name in right format?
💤 SKIP: METADATA.pb font.post_script_name field contains font name in right format?
💤 SKIP: Copyright notice on METADATA.pb matches canonical pattern?
💤 SKIP: Copyright notice on METADATA.pb should not contain 'Reserved Font Name'.
💤 SKIP: METADATA.pb: Copyright notice shouldn't exceed 500 chars.
💤 SKIP: METADATA.pb: Filename is set canonically?
💤 SKIP: METADATA.pb font.style "italic" matches font internals?
💤 SKIP: METADATA.pb font.style "normal" matches font internals?
💤 SKIP: METADATA.pb font.name and font.full_name fields match the values declared on the name table?
💤 SKIP: METADATA.pb: Check if fontname is not camel cased.
💤 SKIP: METADATA.pb: Check font name is the same as family name.
💤 SKIP: METADATA.pb: Check that font weight has a canonical value.
💤 SKIP: Checking OS/2 usWeightClass matches weight specified at METADATA.pb.
💤 SKIP: METADATA.pb weight matches postScriptName.
💤 SKIP: METADATA.pb: Font styles are named canonically?
💤 SKIP: Version number has increased since previous release on Google Fonts?
💤 SKIP: Glyphs are similiar to Google Fonts version?
💤 SKIP: TTFAutohint x-height increase value is same as in previous release on Google Fonts?
💤 SKIP: Check font has same encoded glyphs as version hosted on fonts.google.com
💤 SKIP: Copyright field for this font on METADATA.pb matches all copyright notice entries on the name table ?
💤 SKIP: Check a static ttf can be generated from a variable font.
💤 SKIP: FontForge validation outputs error messages?
💤 SKIP: FontForge checks.
💤 SKIP: Is there kerning info for non-ligated sequences?
💤 SKIP: The variable font 'wght' (Weight) axis coordinate must be 400 on the 'Regular' instance.
💤 SKIP: The variable font 'wdth' (Width) axis coordinate must be 100 on the 'Regular' instance.
💤 SKIP: The variable font 'slnt' (Slant) axis coordinate must be zero on the 'Regular' instance.
💤 SKIP: The variable font 'ital' (Italic) axis coordinate must be zero on the 'Regular' instance.
💤 SKIP: The variable font 'opsz' (Optical Size) axis coordinate should be between 9 and 13 on the 'Regular' instance.
💤 SKIP: The variable font 'wght' (Weight) axis coordinate must be 700 on the 'Bold' instance.
ℹ️ INFO: Show hinting filesize impact.
MajorMonoDisplay-Regular.ttf
Dehinted Size 75.1kb
Hinted Size 123.5kb
Increase 48.4kb
Change 0.6 %
ℹ️ INFO: EPAR table present in font?
ℹ️ INFO: Is 'gasp' table set to optimize rendering?

PPM <= 65535:
flag = 0x0F
- Use gridfitting
- Use grayscale rendering
- Use gridfitting with ClearType symmetric smoothing
- Use smoothing along multiple axes with ClearType®

  • 🍞 PASS 'gasp' table is correctly set, with one gaspRange:value of 0xFFFF:0x0F.
ℹ️ INFO: Check for font-v versioning
  • com.google.fonts/check/166
  • ℹ️ INFO Version string is: "Version 2.000; ttfautohint (v1.8) -l 8 -r 50 -G 200 -x 14 -D latn -f none -a qsq -X """
    The version string must ideally include a git commit hash and either a 'dev' or a 'release' suffix such as in the example below:
    "Version 1.3; git-0d08353-release"
ℹ️ INFO: Font contains all required tables?
  • com.google.fonts/check/052
  • ℹ️ INFO This font contains the following optional tables [DSIG, loca, prep, cvt , gasp, fpgm, GSUB, GPOS]
  • 🍞 PASS Font contains all required tables.
🍞 PASS: Checking file is named canonically.
🍞 PASS: Fonts have equal numbers of glyphs?
🍞 PASS: Fonts have equal glyph names?
🍞 PASS: Checking OS/2 fsType.
🍞 PASS: Substitute copyright, registered and trademark symbols in name table entries.
  • com.google.fonts/check/019
  • 🍞 PASS No need to substitute copyright, registered and trademark symbols in name table entries of this font.
🍞 PASS: Checking OS/2 usWeightClass.
🍞 PASS: "License URL matches License text on name table?
🍞 PASS: Description strings in the name table must not exceed 200 characters.
🍞 PASS: Version format is correct in 'name' table?
🍞 PASS: Font has ttfautohint params?
  • com.google.fonts/check/has_ttfautohint_params
  • 🍞 PASS Font has ttfautohint params (-l 8 -r 50 -G 200 -x 14 -D latn -f none -a qsq -X "")
  • 🍞 PASS Font has ttfautohint params (-l 8 -r 50 -G 200 -x 14 -D latn -f none -a qsq -X "")
🍞 PASS: Make sure family name does not begin with a digit.
🍞 PASS: Font has all expected currency sign characters?
🍞 PASS: Are there non-ASCII characters in ASCII-only NAME table entries?
🍞 PASS: Is font em size (ideally) equal to 1000?
🍞 PASS: Checking OS/2 fsSelection value.
  • com.google.fonts/check/129
  • 🍞 PASS OS/2 fsSelection REGULAR bit is properly set.
  • 🍞 PASS OS/2 fsSelection ITALIC bit is properly set.
  • 🍞 PASS OS/2 fsSelection BOLD bit is properly set.
🍞 PASS: Checking post.italicAngle value.
🍞 PASS: Checking head.macStyle value.
  • com.google.fonts/check/131
  • 🍞 PASS head macStyle ITALIC bit is properly set.
  • 🍞 PASS head macStyle BOLD bit is properly set.
🍞 PASS: Font has all mandatory 'name' table entries ?
🍞 PASS: Check name table: FONT_FAMILY_NAME entries.
🍞 PASS: Check name table: FONT_SUBFAMILY_NAME entries.
🍞 PASS: Check name table: FULL_FONT_NAME entries.
🍞 PASS: Check name table: POSTSCRIPT_NAME entries.
🍞 PASS: Check name table: TYPOGRAPHIC_FAMILY_NAME entries.
🍞 PASS: Check name table: TYPOGRAPHIC_SUBFAMILY_NAME entries.
🍞 PASS: Length of copyright notice must not exceed 500 characters.
🍞 PASS: Familyname must be unique according to namecheck.fontdata.com
🍞 PASS: Checking OS/2 usWinAscent & usWinDescent.
🍞 PASS: Checking OS/2 Metrics match hhea Metrics.
🍞 PASS: Font enables smart dropout control in "prep" table instructions?
🍞 PASS: Checking with ftxvalidator.
🍞 PASS: Checking with ots-sanitize.
🍞 PASS: Font contains .notdef as first glyph?
  • com.google.fonts/check/046
  • 🍞 PASS Font contains the .notdef glyph as the first glyph, it does not have a Unicode value assigned and contains a drawing.
🍞 PASS: Font contains glyphs for whitespace characters?
🍞 PASS: Font has **proper** whitespace glyph names?
🍞 PASS: Whitespace glyphs have ink?
🍞 PASS: Are there unwanted tables?
🍞 PASS: Glyph names are all valid?
🍞 PASS: Font contains unique glyph names?
🍞 PASS: Checking with fontTools.ttx
🍞 PASS: Check glyphs have unique unicode codepoints.
🍞 PASS: Check all glyphs have codepoints assigned.
🍞 PASS: Checking unitsPerEm value is reasonable.
🍞 PASS: Checking font version fields (head and name table).
🍞 PASS: Font has correct post table version (2 for TTF, 3 for OTF)?
🍞 PASS: Description strings in the name table must not contain copyright info.
🍞 PASS: Name table entries should not contain line-breaks.
🍞 PASS: Does full font name begin with the font family name?
🍞 PASS: Font follows the family naming recommendations?
🍞 PASS: Name table strings must not contain the string 'Reserved Font Name'.
🍞 PASS: Checking Vertical Metric Linegaps.
🍞 PASS: MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables?
🍞 PASS: Does the font have a DSIG table?
🍞 PASS: Whitespace and non-breaking space have the same width?
🍞 PASS: Is there a "kern" table declared in the font?
🍞 PASS: Is there any unused data at the end of the glyf table?
🍞 PASS: Check for points out of bounds.
🍞 PASS: Does the number of glyphs in the loca table match the maxp table?

Summary

💔 ERROR 🔥 FAIL ⚠️ WARN 💤 SKIP ℹ️ INFO 🍞 PASS
0 2 9 54 5 63
0% 2% 7% 41% 4% 47%

@m4rc1e
Copy link

m4rc1e commented Sep 27, 2018

Ok, I've just rerun the fonts through FB.

Fontbakery report

[23] Family checks
🔥 FAIL: Check font has a license.
  • com.google.fonts/check/028
  • 🔥 FAIL No license file was found. Please add an OFL.txt or a LICENSE.txt file. If you are running fontbakery on a Google Fonts upstream repo, which is fine, just make sure there is a temporary license file in the same folder. [code: none]
🍞 PASS: Checking all files are in the same directory.
🍞 PASS: Fonts have equal unicode encodings?
🍞 PASS: Make sure all font files have the same version value.
🍞 PASS: Fonts have consistent PANOSE proportion?
🍞 PASS: Fonts have consistent PANOSE family type?
🍞 PASS: Fonts have consistent underline thickness?
💤 SKIP: Does DESCRIPTION file contain broken links?
💤 SKIP: Is this a proper HTML snippet?
💤 SKIP: DESCRIPTION.en_us.html must have more than 200 bytes.
💤 SKIP: DESCRIPTION.en_us.html must have less than 1000 bytes.
💤 SKIP: Font designer field in METADATA.pb must not be 'unknown'.
💤 SKIP: METADATA.pb: Ensure designer simple short name.
💤 SKIP: METADATA.pb: Fontfamily is listed on Google Fonts API?
💤 SKIP: METADATA.pb: check if fonts field only has unique "full_name" values.
💤 SKIP: METADATA.pb: check if fonts field only contains unique style:weight pairs.
💤 SKIP: METADATA.pb license is "APACHE2", "UFL" or "OFL"?
💤 SKIP: METADATA.pb should contain at least "menu" and "latin" subsets.
💤 SKIP: METADATA.pb subsets should be alphabetically ordered.
💤 SKIP: METADATA.pb: Copyright notice is the same in all fonts?
💤 SKIP: Check that METADATA.pb family values are all the same.
💤 SKIP: METADATA.pb: According Google Fonts standards, families should have a Regular style.
💤 SKIP: METADATA.pb: Regular should be 400.

[110] MajorMonoDisplay-Regular.ttf
🔥 FAIL: Checking with Microsoft Font Validator.
  • com.google.fonts/check/037
  • 🔥 FAIL MS-FonVal: The isFixedPitch field is nonzero, but hmtx shows the font as proportional
  • ℹ️ INFO Microsoft Font Validator returned an error code. Output follows :

/Users/marc/Downloads/majormono-master/fonts/MajorMonoDisplay-Regular.ttf (file 1 of 1)
Table Test: DSIG
Table Test: GDEF
Table Test: GPOS
Table Test: GSUB
Table Test: OS/2
Table Test: cmap
Table Test: cvt
Table Test: fpgm
Table Test: gasp
Table Test: glyf
Progress: Validating glyph with index 0 (out of 720 glyphs)
Progress: Validating glyph with index 100 (out of 720 glyphs)
Progress: Validating glyph with index 200 (out of 720 glyphs)
Progress: Validating glyph with index 300 (out of 720 glyphs)
Progress: Validating glyph with index 400 (out of 720 glyphs)
Progress: Validating glyph with index 500 (out of 720 glyphs)
Progress: Validating glyph with index 600 (out of 720 glyphs)
Progress: Validating glyph with index 700 (out of 720 glyphs)
Table Test: head
Table Test: hhea
Table Test: hmtx
Table Test: loca
Table Test: maxp
Table Test: name
Table Test: post
Table Test: prep
Begin Raster Test: Black and White
Begin Raster Test: Grayscale
Begin Raster Test: ClearType
Complete: /Users/marc/Downloads/majormono-master/fonts/MajorMonoDisplay-Regular.ttf.report.xml
Reports are ready!

  • ℹ️ INFO MS-FonVal: The file begins with an Offset Table (file contains a single font)
  • ℹ️ INFO MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 'Latin Extended-B', 62 characters are present
  • ℹ️ INFO MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 'IPA Extensions', 1 characters are present
  • ℹ️ INFO MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 'Spacing Modifier Letters', 11 characters are present
  • ℹ️ INFO MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 'Combining Diacritical Marks', 26 characters are present
  • ℹ️ INFO MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 'General Punctuation', 20 characters are present
  • ℹ️ INFO MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 'Superscripts and Subscripts', 1 characters are present
  • ℹ️ INFO MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 'Currency Symbols', 16 characters are present
  • ℹ️ INFO MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 'Letterlike Symbols', 2 characters are present
  • ℹ️ INFO MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 8 characters are present in the ranges: Arrows, Supplementary Arrows A, Supplementary Arrows B
  • ℹ️ INFO MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 9 characters are present in the ranges: Mathematical Operators, Supplemental Mathematical Operators, Mathematical Symbols A, Mathematical Symbols B
  • ℹ️ INFO MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 'Private Use Area', 7 characters are present
  • ℹ️ INFO MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 'Alphabetic Presentation Forms', 5 characters are present
  • ℹ️ INFO MS-FonVal: Validation for the fpgm table is not directly implemented, but rasterization testing will validate any executed hinting instructions
  • ℹ️ INFO MS-FonVal: Loca references a zero-length entry in the glyf table DETAILS: Number of glyphs that are empty = 4
  • ℹ️ INFO MS-FonVal: No string for Typographic Family name (Name ID 16)
  • ℹ️ INFO MS-FonVal: No string for Typographic Subfamily name (Name ID 17)
  • ℹ️ INFO MS-FonVal: The post name isn't in uniXXXX or uXXXXX format and there is no Adobe Glyph List entry DETAILS: glyph = 299, char = U+F00D, name = K.alt2
  • ℹ️ INFO MS-FonVal: The post name does not match the name in the Adobe Glyph List DETAILS: glyph = 500, char = U+FB00, name = f_f
  • ℹ️ INFO MS-FonVal: The post name does not match the name in the Adobe Glyph List DETAILS: glyph = 501, char = U+FB03, name = f_f_i
  • ℹ️ INFO MS-FonVal: The post name does not match the name in the Adobe Glyph List DETAILS: glyph = 502, char = U+FB04, name = f_f_l
  • ℹ️ INFO MS-FonVal: Validation for the prep table is not directly implemented, but rasterization testing will validate any executed hinting instructions
  • ℹ️ INFO MS-FonVal: An exception occurred during rasterization testing DETAILS: UnImplemented in this version of Freetype: 2.9.1 at OTFontFile.Rasterizer.RasterInterf.RastTest (System.Int32 resX, System.Int32 resY, System.Int32[] arrPointSizes, System.Single stretchX, System.Single stretchY, System.Single rotation, System.Single skew, System.Single[,] matrix, System.Boolean setBW, System.Boolean setGrayscale, System.Boolean setCleartype, System.UInt32 CTFlags, OTFontFile.Rasterizer.RasterInterf+RastTestErrorDelegate pRastTestErrorDelegate, OTFontFile.Rasterizer.RasterInterf+UpdateProgressDelegate pUpdateProgressDelegate, System.Int32 numGlyphs) [0x000d3] in <8bf3804a877240f6a426a121cde2d694>:0
    at OTFontFileVal.OTFontVal.Validate () [0x00482] in <96025b618ca64658ad6b94312cc3f5e3>:0
  • ℹ️ INFO MS-FonVal: An exception occurred during rasterization testing DETAILS: UnImplemented in this version of Freetype: 2.9.1 at OTFontFile.Rasterizer.RasterInterf.RastTest (System.Int32 resX, System.Int32 resY, System.Int32[] arrPointSizes, System.Single stretchX, System.Single stretchY, System.Single rotation, System.Single skew, System.Single[,] matrix, System.Boolean setBW, System.Boolean setGrayscale, System.Boolean setCleartype, System.UInt32 CTFlags, OTFontFile.Rasterizer.RasterInterf+RastTestErrorDelegate pRastTestErrorDelegate, OTFontFile.Rasterizer.RasterInterf+UpdateProgressDelegate pUpdateProgressDelegate, System.Int32 numGlyphs) [0x000d3] in <8bf3804a877240f6a426a121cde2d694>:0
    at OTFontFileVal.OTFontVal.Validate () [0x005f3] in <96025b618ca64658ad6b94312cc3f5e3>:0
  • ℹ️ INFO MS-FonVal: An exception occurred during rasterization testing DETAILS: UnImplemented in this version of Freetype: 2.9.1 at OTFontFile.Rasterizer.RasterInterf.RastTest (System.Int32 resX, System.Int32 resY, System.Int32[] arrPointSizes, System.Single stretchX, System.Single stretchY, System.Single rotation, System.Single skew, System.Single[,] matrix, System.Boolean setBW, System.Boolean setGrayscale, System.Boolean setCleartype, System.UInt32 CTFlags, OTFontFile.Rasterizer.RasterInterf+RastTestErrorDelegate pRastTestErrorDelegate, OTFontFile.Rasterizer.RasterInterf+UpdateProgressDelegate pUpdateProgressDelegate, System.Int32 numGlyphs) [0x000d3] in <8bf3804a877240f6a426a121cde2d694>:0
    at OTFontFileVal.OTFontVal.Validate () [0x0076c] in <96025b618ca64658ad6b94312cc3f5e3>:0
  • ℹ️ INFO MS-FonVal: Total time validating file DETAILS: 0:00:04
  • 🍞 PASS MS-FonVal: The numTables field is non-zero DETAILS: 18
  • 🍞 PASS MS-FonVal: The searchRange, entrySelector, and rangeShift fields are all valid
  • 🍞 PASS MS-FonVal: The directory entry tags are in ascending order
  • 🍞 PASS MS-FonVal: The directory entry tag names are valid
  • 🍞 PASS MS-FonVal: The directory entry table offsets are all multiples of 4
  • 🍞 PASS MS-FonVal: All required tables are present
  • 🍞 PASS MS-FonVal: No unnecessary tables are present
  • 🍞 PASS MS-FonVal: All signature blocks were in format 1
  • 🍞 PASS MS-FonVal: All signature blocks' reserved values were 0
  • 🍞 PASS MS-FonVal: The digital signature of the file verified correctly
  • 🍞 PASS MS-FonVal: The version numbers 0x00010000 or 0x0001002 are okay DETAILS: 0x00010000
  • 🍞 PASS MS-FonVal: All header offsets point within the table
  • 🍞 PASS MS-FonVal: The version number is 0x00010000
  • 🍞 PASS MS-FonVal: The LangSysTable is valid DETAILS: ScriptList, ScriptRecord0, ScriptTable, DefaultLangSysTable
  • 🍞 PASS MS-FonVal: The Script Table is valid DETAILS: ScriptList, ScriptRecord0, ScriptTable
  • 🍞 PASS MS-FonVal: The LangSysTable is valid DETAILS: ScriptList, ScriptRecord1, ScriptTable, DefaultLangSysTable
  • 🍞 PASS MS-FonVal: The Script Table is valid DETAILS: ScriptList, ScriptRecord1, ScriptTable
  • 🍞 PASS MS-FonVal: The ScriptList Table is valid DETAILS: ScriptList
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord0, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord1, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord2, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord3, FeatureTable
  • 🍞 PASS MS-FonVal: The FeatureList table is valid DETAILS: FeatureList
  • 🍞 PASS MS-FonVal: The BaseArray table is valid DETAILS: LookupList, Lookup[0], SubTable0, BaseArray
  • 🍞 PASS MS-FonVal: The MarkBasePos subtable is valid DETAILS: LookupList, Lookup[0], SubTable0
  • 🍞 PASS MS-FonVal: The BaseArray table is valid DETAILS: LookupList, Lookup[1], SubTable0, BaseArray
  • 🍞 PASS MS-FonVal: The MarkBasePos subtable is valid DETAILS: LookupList, Lookup[1], SubTable0
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array, Mark2Record[0]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array, Mark2Record[1]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array, Mark2Record[2]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array, Mark2Record[3]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array, Mark2Record[4]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array, Mark2Record[5]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array, Mark2Record[6]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array, Mark2Record[7]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array, Mark2Record[8]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array, Mark2Record[9]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array, Mark2Record[10]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array, Mark2Record[11]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array, Mark2Record[12]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array, Mark2Record[13]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array, Mark2Record[14]
  • 🍞 PASS MS-FonVal: The Mark2Array table is valid DETAILS: LookupList, Lookup[2], SubTable0, Mark2Array
  • 🍞 PASS MS-FonVal: The MarkMarkPos subtable is valid DETAILS: LookupList, Lookup[2], SubTable0
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[3], SubTable0, Mark2Array, Mark2Record[0]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[3], SubTable0, Mark2Array, Mark2Record[1]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[3], SubTable0, Mark2Array, Mark2Record[2]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[3], SubTable0, Mark2Array, Mark2Record[3]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[3], SubTable0, Mark2Array, Mark2Record[4]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[3], SubTable0, Mark2Array, Mark2Record[5]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[3], SubTable0, Mark2Array, Mark2Record[6]
  • 🍞 PASS MS-FonVal: The Mark2Record is valid DETAILS: LookupList, Lookup[3], SubTable0, Mark2Array, Mark2Record[7]
  • 🍞 PASS MS-FonVal: The Mark2Array table is valid DETAILS: LookupList, Lookup[3], SubTable0, Mark2Array
  • 🍞 PASS MS-FonVal: The MarkMarkPos subtable is valid DETAILS: LookupList, Lookup[3], SubTable0
  • 🍞 PASS MS-FonVal: The LookupList table is valid DETAILS: LookupList
  • 🍞 PASS MS-FonVal: The LangSysTable is valid DETAILS: ScriptList, ScriptRecord1, ScriptTable, LangSysRecord[0], LangSysTable
  • 🍞 PASS MS-FonVal: The LangSysTable is valid DETAILS: ScriptList, ScriptRecord1, ScriptTable, LangSysRecord[1], LangSysTable
  • 🍞 PASS MS-FonVal: The LangSysTable is valid DETAILS: ScriptList, ScriptRecord1, ScriptTable, LangSysRecord[2], LangSysTable
  • 🍞 PASS MS-FonVal: The LangSysTable is valid DETAILS: ScriptList, ScriptRecord1, ScriptTable, LangSysRecord[3], LangSysTable
  • 🍞 PASS MS-FonVal: The LangSysTable is valid DETAILS: ScriptList, ScriptRecord1, ScriptTable, LangSysRecord[4], LangSysTable
  • 🍞 PASS MS-FonVal: The LangSysTable is valid DETAILS: ScriptList, ScriptRecord1, ScriptTable, LangSysRecord[5], LangSysTable
  • 🍞 PASS MS-FonVal: The LangSysTable is valid DETAILS: ScriptList, ScriptRecord1, ScriptTable, LangSysRecord[6], LangSysTable
  • 🍞 PASS MS-FonVal: The LangSysTable is valid DETAILS: ScriptList, ScriptRecord1, ScriptTable, LangSysRecord[7], LangSysTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord0, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord1, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord2, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord3, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord4, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord5, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord6, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord7, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord8, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord9, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord10, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord11, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord12, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord13, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord14, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord15, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord16, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord17, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord18, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord19, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord20, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord21, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord22, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord23, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord24, FeatureTable
  • 🍞 PASS MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord25, FeatureTable
  • 🍞 PASS MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[0], SubTable[0](SingleSubst, fmt 2)
  • 🍞 PASS MS-FonVal: The AlternateSubst subtable is valid DETAILS: LookupList, Lookup[1], SubTable[0](AlternateSubst, fmt 1)
  • 🍞 PASS MS-FonVal: The LigatureSubst subtable is valid DETAILS: LookupList, Lookup[2], SubTable[0](LigatureSubst, fmt 1)
  • 🍞 PASS MS-FonVal: The LigatureSubst subtable is valid DETAILS: LookupList, Lookup[3], SubTable[0](LigatureSubst, fmt 1)
  • 🍞 PASS MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[4], SubTable[0](SingleSubst, fmt 1)
  • 🍞 PASS MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[5], SubTable[0](SingleSubst, fmt 1)
  • 🍞 PASS MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[6], SubTable[0](SingleSubst, fmt 1)
  • 🍞 PASS MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[7], SubTable[0](SingleSubst, fmt 1)
  • 🍞 PASS MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[8], SubTable[0](SingleSubst, fmt 1)
  • 🍞 PASS MS-FonVal: The ChainContextSubst subtable is valid DETAILS: LookupList, Lookup[9], SubTable[0](ChainContextSubst, fmt 3)
  • 🍞 PASS MS-FonVal: The ChainContextSubst subtable is valid DETAILS: LookupList, Lookup[9], SubTable[1](ChainContextSubst, fmt 3)
  • 🍞 PASS MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[10], SubTable[0](SingleSubst, fmt 1)
  • 🍞 PASS MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[11], SubTable[0](SingleSubst, fmt 1)
  • 🍞 PASS MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[12], SubTable[0](SingleSubst, fmt 1)
  • 🍞 PASS MS-FonVal: The LigatureSubst subtable is valid DETAILS: LookupList, Lookup[13], SubTable[0](LigatureSubst, fmt 1)
  • 🍞 PASS MS-FonVal: The ChainContextSubst subtable is valid DETAILS: LookupList, Lookup[14], SubTable[0](ChainContextSubst, fmt 3)
  • 🍞 PASS MS-FonVal: The ChainContextSubst subtable is valid DETAILS: LookupList, Lookup[14], SubTable[1](ChainContextSubst, fmt 3)
  • 🍞 PASS MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[15], SubTable[0](SingleSubst, fmt 1)
  • 🍞 PASS MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[16], SubTable[0](SingleSubst, fmt 1)
  • 🍞 PASS MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[17], SubTable[0](SingleSubst, fmt 1)
  • 🍞 PASS MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[18], SubTable[0](SingleSubst, fmt 2)
  • 🍞 PASS MS-FonVal: The table length matches the expected length for this version
  • 🍞 PASS MS-FonVal: The usWeightClass is a valid value DETAILS: 400
  • 🍞 PASS MS-FonVal: The width class is a valid value DETAILS: 5
  • 🍞 PASS MS-FonVal: The fsType field is valid DETAILS: 0x0000, Installable Embedding
  • 🍞 PASS MS-FonVal: All subscript and superscript values appear valid
  • 🍞 PASS MS-FonVal: The yStrikeoutSize and yStrikeoutPosition appear valid
  • 🍞 PASS MS-FonVal: The sFamilyClass Class ID and Subclass ID values are in a valid range
  • 🍞 PASS MS-FonVal: All panose values are in a valid range
  • 🍞 PASS MS-FonVal: The Unicode Range fields' bits are all allowable values
  • 🍞 PASS MS-FonVal: The usFirstCharIndex and usLastCharIndex fields are valid DETAILS: first = 0x000d, last = 0xfb04
  • 🍞 PASS MS-FonVal: The sTypoAscender and sTypoDescender fields are reasonable values DETAILS: sTypoAscender = 900, sTypoDescender = -100
  • 🍞 PASS MS-FonVal: The CodePage Range fields' bits are all allowable values
  • 🍞 PASS MS-FonVal: The sxHeight field is nonzero DETAILS: 696
  • 🍞 PASS MS-FonVal: The sCapHeight field is nonzero DETAILS: 696
  • 🍞 PASS MS-FonVal: The usDefaultChar field is zero
  • 🍞 PASS MS-FonVal: The usBreakChar is mapped to a glyf
  • 🍞 PASS MS-FonVal: The usMaxContext field matches the calculated value DETAILS: 3
  • 🍞 PASS MS-FonVal: The table version number is 0
  • 🍞 PASS MS-FonVal: Each subtable offset is within the table
  • 🍞 PASS MS-FonVal: Each subtable length is within the table
  • 🍞 PASS MS-FonVal: The subtables are in the correct order
  • 🍞 PASS MS-FonVal: There are no duplicate subtables
  • 🍞 PASS MS-FonVal: No overlapping subtables were found
  • 🍞 PASS MS-FonVal: Each subtable's format number is valid
  • 🍞 PASS MS-FonVal: The subtable internal format appears valid DETAILS: PlatID = 0, EncID = 3, Fmt = 4
  • 🍞 PASS MS-FonVal: The subtable internal format appears valid DETAILS: PlatID = 3, EncID = 1, Fmt = 4
  • 🍞 PASS MS-FonVal: Character code U+20AC, the euro character, is mapped for cmap 3,1
  • 🍞 PASS MS-FonVal: All non mac subtables have a language field of zero
  • 🍞 PASS MS-FonVal: The length of the cvt table is an even number of bytes
  • 🍞 PASS MS-FonVal: The version number is valid DETAILS: version = 1
  • 🍞 PASS MS-FonVal: All of the rangeGaspBehavior fields contain valid flags
  • 🍞 PASS MS-FonVal: The gaspRange array is in sorted order
  • 🍞 PASS MS-FonVal: The gaspRange array has a 0xFFFF sentinel
  • 🍞 PASS MS-FonVal: No adjacent ranges have identical flags
  • 🍞 PASS MS-FonVal: Correct format of loca (0 or 1)
  • 🍞 PASS MS-FonVal: Table length is 54 bytes
  • 🍞 PASS MS-FonVal: The table version number is 0x00010000
  • 🍞 PASS MS-FonVal: fontRevision is consistent with the font's version string DETAILS: 2.000
  • 🍞 PASS MS-FonVal: Font checksum is correct DETAILS: 0xd1d2e84c
  • 🍞 PASS MS-FonVal: The magic number is 0x5f0f3cf5
  • 🍞 PASS MS-FonVal: Non-linear scaling flag (bit 4) is clear, and hdmx table is not present
  • 🍞 PASS MS-FonVal: Non-linear scaling flag (bit 4) is clear, and LTSH table is not present
  • 🍞 PASS MS-FonVal: Reserved bit 14 of the flags field is clear
  • 🍞 PASS MS-FonVal: Reserved bit 15 of the flags field is clear
  • 🍞 PASS MS-FonVal: The created time is not zero
  • 🍞 PASS MS-FonVal: The modified time is not zero
  • 🍞 PASS MS-FonVal: The xMin value matches the minimum glyph xMin DETAILS: xMin = -643
  • 🍞 PASS MS-FonVal: The yMin value matches the minimum glyph yMin DETAILS: yMin = -223
  • 🍞 PASS MS-FonVal: The xMax value matches the maximum glyph xMax DETAILS: xMax = 2157
  • 🍞 PASS MS-FonVal: The yMax value matches the maximum glyph yMax DETAILS: yMax = 1152
  • 🍞 PASS MS-FonVal: The macStyle bold bit matches the name table's font subfamily string
  • 🍞 PASS MS-FonVal: The macStyle italic bit matches the name table's font subfamily string
  • 🍞 PASS MS-FonVal: The macStyle bold bit matches the OS/2 fsSelection bit
  • 🍞 PASS MS-FonVal: The macStyle italic bit matches the OS/2 fsSelection bit
  • 🍞 PASS MS-FonVal: The macStyle italic bit matches the post table italic angle
  • 🍞 PASS MS-FonVal: The lowestRecPPEM value is in a reasonable range
  • 🍞 PASS MS-FonVal: The fontDirectionHint is in the range -2..2 DETAILS: 2
  • 🍞 PASS MS-FonVal: The indexToLocFormat value is 0 or 1 DETAILS: 0
  • 🍞 PASS MS-FonVal: The indexToLocFormat value matches the loca table DETAILS: 0
  • 🍞 PASS MS-FonVal: The glyphDataFormat value is 0
  • 🍞 PASS MS-FonVal: The Ascender value is greater than zero
  • 🍞 PASS MS-FonVal: The Descender is less than zero
  • 🍞 PASS MS-FonVal: Ascender is less than or equal to head.yMax
  • 🍞 PASS MS-FonVal: Descender is greater than or equal to head.yMin
  • 🍞 PASS MS-FonVal: LineGap is greater than or equal to 0
  • 🍞 PASS MS-FonVal: The advanceWidthMax field equals the calculated value
  • 🍞 PASS MS-FonVal: The minLeftSideBearing field equals the calculated value
  • 🍞 PASS MS-FonVal: The minRightSideBearing field equals the calculated value
  • 🍞 PASS MS-FonVal: The xMaxExtent field equals the calculated value
  • 🍞 PASS MS-FonVal: The reserved fields are all set to zero
  • 🍞 PASS MS-FonVal: The metricDataFormat field is set to zero
  • 🍞 PASS MS-FonVal: The numberOfHMetrics value is consistent with the length of the hmtx table
  • 🍞 PASS MS-FonVal: The caretSlope angle matches the post.italicAngle
  • 🍞 PASS MS-FonVal: The size of the table matches the calculated size
  • 🍞 PASS MS-FonVal: The horizontal metrics are all within an allowable range of values
  • 🍞 PASS MS-FonVal: The number of entries is equal to (maxp.numGlyphs + 1)
  • 🍞 PASS MS-FonVal: The entries are sorted in ascending order
  • 🍞 PASS MS-FonVal: All entries point within range of the glyf table
  • 🍞 PASS MS-FonVal: All glyphs in the glyf table are referenced by the loca table
  • 🍞 PASS MS-FonVal: Table version is 1.0 and a glyf table is present and no CFF table is present
  • 🍞 PASS MS-FonVal: Table version is 1.0 and the table is 32 bytes long
  • 🍞 PASS MS-FonVal: The numGlyphs value equals the number of entries in the loca array plus one DETAILS: numGlyphs = 720
  • 🍞 PASS MS-FonVal: The format selector field is 0
  • 🍞 PASS MS-FonVal: No strings extended past the end of the table
  • 🍞 PASS MS-FonVal: The NameRecords array is in sorted order
  • 🍞 PASS MS-FonVal: No name records are using reserved Name IDs
  • 🍞 PASS MS-FonVal: The table contains strings for both Mac and Microsoft platforms
  • 🍞 PASS MS-FonVal: The version string is in the correct format DETAILS: platID = 3, encID = 1, langID = 1033, "Version 2.000; ttfautohint (v1.8) -l 8 -r 50 -G 200 -x 14 -D latn -f none -a qsq -X """
  • 🍞 PASS MS-FonVal: All strings had valid Platform Specific Encoding IDs
  • 🍞 PASS MS-FonVal: All Microsoft unicode strings had valid Language IDs
  • 🍞 PASS MS-FonVal: The length of every unicode string is an even # of bytes
  • 🍞 PASS MS-FonVal: The PostScript strings are correctly formatted
  • 🍞 PASS MS-FonVal: The subfamily string is consistent with the style of the font
  • 🍞 PASS MS-FonVal: No name record specified Unicode Variation Sequences cmap subtable DETAILS: PlatformID=0, EncodingID=5 is for Variation Sequences (Format 14)
  • 🍞 PASS MS-FonVal: No inconsistencies were found for Copyright strings
  • 🍞 PASS MS-FonVal: No inconsistencies were found for Trademark strings
  • 🍞 PASS MS-FonVal: No inconsistencies were found for Description strings
  • 🍞 PASS MS-FonVal: The table length is valid
  • 🍞 PASS MS-FonVal: The version number is valid
  • 🍞 PASS MS-FonVal: The italicAngle value is reasonable and consistent with other tables
  • 🍞 PASS MS-FonVal: The underlinePosition value is not less than hhea.Descender
  • 🍞 PASS MS-FonVal: The underlineThickness value is reasonable
  • 🍞 PASS MS-FonVal: The numberOfGlyphs field equals maxp.numGlyphs
  • 🍞 PASS MS-FonVal: The glyphNameIndex array contains valid indexes
  • 🍞 PASS MS-FonVal: The names in the post table are consistent with the Adobe Glyph List names
  • ⚠️ WARN MS-FonVal: Recommended table is missing DETAILS: kern
  • ⚠️ WARN MS-FonVal: Recommended table is missing DETAILS: hdmx
  • ⚠️ WARN MS-FonVal: Recommended table is missing DETAILS: VDMX
  • ⚠️ WARN MS-FonVal: Tables are not in optimal order DETAILS: table 'OS/2' precedes table 'head'
  • ⚠️ WARN MS-FonVal: The version number is valid, but less than 5 DETAILS: 4
  • ⚠️ WARN MS-FonVal: The xAvgCharWidth field does not equal the calculated value DETAILS: actual = 759, calc = 740
  • ⚠️ WARN MS-FonVal: There are undefined bits set in fsSelection field DETAILS: Bit(s) 7
  • ⚠️ WARN MS-FonVal: A CodePage bit is set in ulCodePageRange, but the font is missing some of the printable characters from that codepage DETAILS: bit #29, Mac character set (missing chars: U221E U2202 U2211 U220F U03C0 U222B U2126 U221A U2206 U25CA)
  • ⚠️ WARN MS-FonVal: The table does not contain any Apple subtables
  • ⚠️ WARN MS-FonVal: Apple logo mapping test not performed, cmap 1,0 not present
  • ⚠️ WARN MS-FonVal: Characters are mapped in the Unicode Private Use area
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 9
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 15
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 18
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 23
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 32
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 33
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 34
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 35
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 36
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 37
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 54
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 78
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 84
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 132
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 147
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 148
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 149
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 150
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 151
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 152
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 152
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 153
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 154
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 155
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 156
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 165
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 170
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 177
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 206
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 226
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 237
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 240
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 245
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 254
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 264
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 266
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 267
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 270
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 277
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 280
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 298
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 315
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 320
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 343
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 350
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 356
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 364
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 376
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 411
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 413
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 414
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 415
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 416
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 430
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 443
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 445
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 448
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 451
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 452
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 453
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 456
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 462
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 467
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 474
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 553
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 578
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 580
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 612
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 664
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 669
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 675
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 676
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 677
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 692
  • ⚠️ WARN MS-FonVal: Misoriented contour DETAILS: Glyph index 697
  • ⚠️ WARN MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 703
  • ⚠️ WARN MS-FonVal: The unitsPerEm value is not a power of two DETAILS: 1000
  • ⚠️ WARN MS-FonVal: Ascender is different than OS/2.usWinAscent. Different line heights on Windows and Apple DETAILS: hhea.Ascender = 900, OS/2.usWinAscent = 1152
  • ⚠️ WARN MS-FonVal: Descender is different than OS/2.usWinDescent. Different line heights on Windows and Apple DETAILS: hhea.Descender = -100, OS/2.usWinDescent = 224
  • ⚠️ WARN MS-FonVal: The LineGap value is less than the recommended value DETAILS: LineGap = 0, recommended = 376
  • ⚠️ WARN MS-FonVal: Loca references a glyf entry which length is not a multiple of 4 DETAILS: Number of glyphs with the warning = 1
  • ⚠️ WARN MS-FonVal: maxSizeOfInstructions computation not via either approved method DETAILS: glyf maxSizeOfInstructions=355, prep size=178, fpgm size=3605, whereas maxp maxSizeOfInstruction is 3605
⚠️ WARN: Checking OS/2 achVendID.
⚠️ WARN: Check if each glyph has the recommended amount of contours.
  • com.google.fonts/check/153
  • ⚠️ WARN This check inspects the glyph outlines and detects the total number of counters in each of them. The expected values are infered from the typical ammounts of counters 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 Counters detected: 1 Expected: 2 or 3
Glyph name: D Counters detected: 1 Expected: 2
Glyph name: G Counters detected: 2 Expected: 1
Glyph name: M Counters detected: 2 Expected: 1
Glyph name: R Counters detected: 4 Expected: 1 or 2
Glyph name: V Counters detected: 2 Expected: 1
Glyph name: X Counters detected: 3 Expected: 1
Glyph name: Z Counters detected: 2 Expected: 1
Glyph name: b Counters detected: 3 Expected: 2
Glyph name: e Counters detected: 1 Expected: 2
Glyph name: g Counters detected: 1 Expected: 2 or 3
Glyph name: i Counters detected: 1 Expected: 2
Glyph name: j Counters detected: 1 Expected: 2
Glyph name: r Counters detected: 2 Expected: 1
Glyph name: Adieresis Counters detected: 6 Expected: 4
Glyph name: Edieresis Counters detected: 5 Expected: 3
Glyph name: Idieresis Counters detected: 5 Expected: 3
Glyph name: Eth Counters detected: 1 Expected: 2
Glyph name: Odieresis Counters detected: 6 Expected: 4
Glyph name: Udieresis Counters detected: 5 Expected: 3
Glyph name: adieresis Counters detected: 6 Expected: 4
Glyph name: ae Counters detected: 2 Expected: 3
Glyph name: egrave Counters detected: 2 Expected: 3
Glyph name: eacute Counters detected: 2 Expected: 3
Glyph name: ecircumflex Counters detected: 2 Expected: 3
Glyph name: edieresis Counters detected: 5 Expected: 4
Glyph name: idieresis Counters detected: 5 Expected: 3
Glyph name: odieresis Counters detected: 6 Expected: 4
Glyph name: divide Counters detected: 5 Expected: 3
Glyph name: udieresis Counters detected: 5 Expected: 3
Glyph name: ydieresis Counters detected: 5 Expected: 3
Glyph name: Cdotaccent Counters detected: 3 Expected: 2
Glyph name: cdotaccent Counters detected: 3 Expected: 2
Glyph name: Dcaron Counters detected: 2 Expected: 3
Glyph name: Dcroat Counters detected: 1 Expected: 2
Glyph name: emacron Counters detected: 2 Expected: 3
Glyph name: ebreve Counters detected: 2 Expected: 3
Glyph name: Edotaccent Counters detected: 3 Expected: 2
Glyph name: eogonek Counters detected: 1 Expected: 2
Glyph name: ecaron Counters detected: 2 Expected: 3
Glyph name: Gcircumflex Counters detected: 3 Expected: 2
Glyph name: gcircumflex Counters detected: 2 Expected: 3 or 4
Glyph name: Gbreve Counters detected: 3 Expected: 2
Glyph name: gbreve Counters detected: 2 Expected: 3 or 4
Glyph name: Gdotaccent Counters detected: 4 Expected: 2
Glyph name: uni0122 Counters detected: 3 Expected: 2
Glyph name: uni0123 Counters detected: 2 Expected: 3 or 4
Glyph name: hbar Counters detected: 2 Expected: 1
Glyph name: iogonek Counters detected: 1 Expected: 2 or 3
Glyph name: Idotaccent Counters detected: 3 Expected: 2
Glyph name: oe Counters detected: 2 Expected: 3
Glyph name: Racute Counters detected: 5 Expected: 3
Glyph name: racute Counters detected: 3 Expected: 2
Glyph name: uni0156 Counters detected: 5 Expected: 3
Glyph name: uni0157 Counters detected: 3 Expected: 2
Glyph name: Rcaron Counters detected: 5 Expected: 3
Glyph name: rcaron Counters detected: 3 Expected: 2
Glyph name: Wcircumflex Counters detected: 3 Expected: 2
Glyph name: Ydieresis Counters detected: 5 Expected: 3
Glyph name: Zacute Counters detected: 3 Expected: 2
Glyph name: Zdotaccent Counters detected: 4 Expected: 2
Glyph name: zdotaccent Counters detected: 3 Expected: 2
Glyph name: Zcaron Counters detected: 3 Expected: 2
Glyph name: uni01C5 Counters detected: 3 Expected: 4
Glyph name: uni01C8 Counters detected: 2 Expected: 3
Glyph name: uni01C9 Counters detected: 2 Expected: 3
Glyph name: uni01CB Counters detected: 2 Expected: 3
Glyph name: uni01CC Counters detected: 2 Expected: 3
Glyph name: Gcaron Counters detected: 3 Expected: 2
Glyph name: gcaron Counters detected: 2 Expected: 3 or 4
Glyph name: aeacute Counters detected: 3 Expected: 4
Glyph name: uni0205 Counters detected: 3 Expected: 4
Glyph name: uni0207 Counters detected: 2 Expected: 3
Glyph name: uni0210 Counters detected: 6 Expected: 4
Glyph name: uni0211 Counters detected: 4 Expected: 3
Glyph name: uni0212 Counters detected: 5 Expected: 3
Glyph name: uni0213 Counters detected: 3 Expected: 2
Glyph name: uni022A Counters detected: 7 Expected: 5
Glyph name: uni022B Counters detected: 7 Expected: 5
Glyph name: uni0230 Counters detected: 5 Expected: 4
Glyph name: uni0231 Counters detected: 5 Expected: 4
Glyph name: dotaccent Counters detected: 2 Expected: 1
Glyph name: f_f_i Counters detected: 3 Expected: 1, 2 or 4
Glyph name: uni0307 Counters detected: 2 Expected: 1
Glyph name: uni0308 Counters detected: 4 Expected: 2
Glyph name: dotbelowcomb Counters detected: 2 Expected: 1
Glyph name: uni0324 Counters detected: 4 Expected: 2
Glyph name: dieresis Counters detected: 4 Expected: 2
Glyph name: Wgrave Counters detected: 3 Expected: 2
Glyph name: Wacute Counters detected: 3 Expected: 2
Glyph name: Wdieresis Counters detected: 6 Expected: 3
Glyph name: wdieresis Counters detected: 5 Expected: 3
Glyph name: uni1EA0 Counters detected: 4 Expected: 3
Glyph name: uni1EA1 Counters detected: 4 Expected: 3
Glyph name: uni1EAC Counters detected: 5 Expected: 4
Glyph name: uni1EAD Counters detected: 5 Expected: 4
Glyph name: uni1EB6 Counters detected: 5 Expected: 4
Glyph name: uni1EB7 Counters detected: 5 Expected: 4
Glyph name: uni1EB8 Counters detected: 3 Expected: 2
Glyph name: uni1EBB Counters detected: 2 Expected: 3
Glyph name: uni1EBD Counters detected: 2 Expected: 3
Glyph name: uni1EBF Counters detected: 3 Expected: 4
Glyph name: uni1EC1 Counters detected: 3 Expected: 4
Glyph name: uni1EC3 Counters detected: 3 Expected: 4
Glyph name: uni1EC5 Counters detected: 3 Expected: 4
Glyph name: uni1EC6 Counters detected: 4 Expected: 3
Glyph name: uni1EC7 Counters detected: 1 Expected: 4
Glyph name: uni1ECA Counters detected: 3 Expected: 2
Glyph name: uni1ECC Counters detected: 4 Expected: 3
Glyph name: uni1ECD Counters detected: 4 Expected: 3
Glyph name: uni1ED8 Counters detected: 5 Expected: 4
Glyph name: uni1ED9 Counters detected: 5 Expected: 4
Glyph name: uni1EE3 Counters detected: 4 Expected: 3
Glyph name: uni1EE4 Counters detected: 3 Expected: 2
Glyph name: uni1EE5 Counters detected: 3 Expected: 2
Glyph name: uni1EF0 Counters detected: 3 Expected: 2
Glyph name: uni1EF1 Counters detected: 3 Expected: 2
Glyph name: uni1EF4 Counters detected: 3 Expected: 2
Glyph name: uni1EF5 Counters detected: 3 Expected: 2

⚠️ WARN: Check if OS/2 xAvgCharWidth is correct.
⚠️ WARN: Checking correctness of monospaced metadata.
  • com.google.fonts/check/033
  • ⚠️ WARN Font is monospaced but 60 glyphs (8.333333333333332%) have a different width. You should check the widths of: ['uni01C4', 'uni01C5', 'uni01C7', 'uni01C8', 'uni01CA', 'uni01CB', 'uni018F', 'uni01C7.alt1', 'uni01C8.alt1', 'uni01CA.alt1', 'uni01CB.alt1', 'uni01C6', 'uni01C9', 'uni01CC', 'f_f', 'f_f_i', 'f_f_l', 'fi', 'fl', 'periodcentered.loclCAT.alt1', 'periodcentered.loclCAT', 'uni0308', 'uni0307', 'gravecomb', 'acutecomb', 'uni030B', 'caroncomb.alt', 'uni0302', 'uni030C', 'uni0306', 'uni030A', 'tildecomb', 'uni0304', 'hookabovecomb', 'uni030F', 'uni0311', 'uni031B', 'dotbelowcomb', 'uni0324', 'uni0326', 'uni0327', 'uni0328', 'uni032E', 'uni0331', 'uni0335', 'uni0336', 'uni0337', 'uni0337.alt', 'uni0338', 'uni031B.alt', 'uni0327.alt', 'uni0328.alt', 'uni03060301', 'uni03060300', 'uni03060309', 'uni03060303', 'uni03020301', 'uni03020300', 'uni03020309', 'uni03020303'] [code: mono-outliers]
⚠️ WARN: Combined length of family and style must not exceed 20 characters.
  • com.google.fonts/check/163
  • ⚠️ WARN The combined length of family and style exceeds 20 chars in the following 'MACINTOSH' entries: FONT_FAMILY_NAME = 'Major Mono Display' / SUBFAMILY_NAME = 'Regular'
  • ⚠️ WARN The combined length of family and style exceeds 20 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Major Mono Display' / SUBFAMILY_NAME = 'Regular'
⚠️ WARN: Monospace font has hhea.advanceWidthMax equal to each glyph's advanceWidth?
  • com.google.fonts/check/079
  • ⚠️ WARN This seems to be a monospaced font, so advanceWidth value should be the same across all glyphs, but 99.44% of them have a different value: nonmarkingreturn, space, A, Aacute, Abreve, uni1EAE, uni1EB6, uni1EB0, uni1EB2, uni1EB4, Acircumflex, uni1EA4, uni1EAC, uni1EA6, uni1EA8, uni1EAA, uni0200, Adieresis, uni1EA0, Agrave, uni1EA2, uni0202, Amacron, Aogonek, Aring, Aringacute, Atilde, AE, AEacute, B, C, Cacute, Ccaron, Ccedilla, Ccircumflex, Cdotaccent, D, uni01C4, Eth, Dcaron, Dcroat, uni01C5, E, Eacute, Ebreve, Ecaron, Ecircumflex, uni1EBE, uni1EC6, uni1EC0, uni1EC2, uni1EC4, uni0204, Edieresis, Edotaccent, uni1EB8, Egrave, uni1EBA, uni0206, Emacron, Eogonek, uni1EBC, F, G, Gbreve, Gcaron, Gcircumflex, uni0122, Gdotaccent, H, Hbar, Hcircumflex, I, Iacute, Ibreve, Icircumflex, uni0208, Idieresis, Idotaccent, uni1ECA, Igrave, uni1EC8, uni020A, Imacron, Iogonek, Itilde, J, Jcircumflex, K, uni0136, L, uni01C7, Lacute, Lcaron, uni013B, Ldot, uni01C8, Lslash, M, N, uni01CA, Nacute, Ncaron, uni0145, Eng, uni01CB, Ntilde, O, Oacute, Obreve, Ocircumflex, uni1ED0, uni1ED8, uni1ED2, uni1ED4, uni1ED6, uni020C, Odieresis, uni022A, uni0230, uni1ECC, Ograve, uni1ECE, Ohorn, uni1EDA, uni1EE2, uni1EDC, uni1EDE, uni1EE0, Ohungarumlaut, uni020E, Omacron, uni01EA, Oslash, Oslashacute, Otilde, uni022C, OE, P, Thorn, Q, R, Racute, Rcaron, uni0156, uni0210, uni0212, S, Sacute, Scaron, Scedilla, Scircumflex, uni0218, uni1E9E, uni018F, T, Tbar, Tcaron, uni0162, U, Uacute, Ubreve, Ucircumflex, uni0214, Udieresis, uni1EE4, Ugrave, uni1EE6, Uhorn, uni1EE8, uni1EF0, uni1EEA, uni1EEC, uni1EEE, Uhungarumlaut, uni0216, Umacron, Uogonek, Uring, Utilde, V, W, Wacute, Wcircumflex, Wdieresis, Wgrave, X, Y, Yacute, Ycircumflex, Ydieresis, uni1EF4, Ygrave, uni1EF6, uni0232, uni1EF8, Z, Zacute, Zcaron, Zdotaccent, uni021A, F.alt1, G.alt1, Gbreve.alt1, Gcaron.alt1, Gcircumflex.alt1, uni0122.alt1, Gdotaccent.alt1, H.alt1, Hbar.alt1, Hcircumflex.alt1, K.alt1, uni0136.alt1, L.alt1, uni01C7.alt1, Lacute.alt1, Lcaron.alt1, uni013B.alt1, Ldot.alt1, uni01C8.alt1, Lslash.alt1, N.alt1, uni01CA.alt1, Nacute.alt1, Ncaron.alt1, uni0145.alt1, Eng.alt1, uni01CB.alt1, Ntilde.alt1, O.alt1, Oacute.alt1, Obreve.alt1, Ocircumflex.alt1, uni1ED0.alt1, uni1ED8.alt1, uni1ED2.alt1, uni1ED4.alt1, uni1ED6.alt1, uni020C.alt1, Odieresis.alt1, uni022A.alt1, uni0230.alt1, uni1ECC.alt1, Ograve.alt1, uni1ECE.alt1, Ohorn.alt1, uni1EDA.alt1, uni1EE2.alt1, uni1EDC.alt1, uni1EDE.alt1, uni1EE0.alt1, Ohungarumlaut.alt1, uni020E.alt1, Omacron.alt1, uni01EA.alt1, Oslash.alt1, Oslashacute.alt1, Otilde.alt1, uni022C.alt1, OE.alt1, R.alt1, Racute.alt1, Rcaron.alt1, uni0156.alt1, uni0210.alt1, uni0212.alt1, T.alt1, Tbar.alt1, Tcaron.alt1, uni0162.alt1, uni021A.alt1, U.alt1, Uacute.alt1, Ubreve.alt1, Ucircumflex.alt1, uni0214.alt1, Udieresis.alt1, uni1EE4.alt1, Ugrave.alt1, uni1EE6.alt1, Uhorn.alt1, uni1EE8.alt1, uni1EF0.alt1, uni1EEA.alt1, uni1EEC.alt1, uni1EEE.alt1, Uhungarumlaut.alt1, uni0216.alt1, Umacron.alt1, Uogonek.alt1, Uring.alt1, Utilde.alt1, W.alt1, Wacute.alt1, Wcircumflex.alt1, Wdieresis.alt1, Wgrave.alt1, K.alt2, uni0136.alt2, a, aacute, abreve, uni1EAF, uni1EB7, uni1EB1, uni1EB3, uni1EB5, acircumflex, uni1EA5, uni1EAD, uni1EA7, uni1EA9, uni1EAB, uni0201, adieresis, uni1EA1, agrave, uni1EA3, uni0203, amacron, aogonek, aring, aringacute, atilde, ae, aeacute, b, c, cacute, ccaron, ccedilla, ccircumflex, cdotaccent, d, eth, dcaron, dcroat, uni01C6, e, eacute, ebreve, ecaron, ecircumflex, uni1EBF, uni1EC7, uni1EC1, uni1EC3, uni1EC5, uni0205, edieresis, edotaccent, uni1EB9, egrave, uni1EBB, uni0207, emacron, eogonek, uni1EBD, uni0259, f, g, gbreve, gcaron, gcircumflex, uni0123, gdotaccent, h, hbar, hcircumflex, i, dotlessi, iacute, ibreve, icircumflex, uni0209, idieresis, i.loclTRK, uni1ECB, igrave, uni1EC9, uni020B, imacron, iogonek, itilde, j, uni0237, jcircumflex, k, uni0137, kgreenlandic, l, lacute, lcaron, uni013C, ldot, uni01C9, lslash, m, n, nacute, ncaron, uni0146, eng, uni01CC, ntilde, o, oacute, obreve, ocircumflex, uni1ED1, uni1ED9, uni1ED3, uni1ED5, uni1ED7, uni020D, odieresis, uni022B, uni0231, uni1ECD, ograve, uni1ECF, ohorn, uni1EDB, uni1EE3, uni1EDD, uni1EDF, uni1EE1, ohungarumlaut, uni020F, omacron, uni01EB, oslash, oslashacute, otilde, uni022D, oe, p, thorn, q, r, racute, rcaron, uni0157, uni0211, uni0213, s, sacute, scaron, scedilla, scircumflex, uni0219, germandbls, t, tbar, tcaron, uni0163, u, uacute, ubreve, ucircumflex, uni0215, udieresis, uni1EE5, ugrave, uni1EE7, uhorn, uni1EE9, uni1EF1, uni1EEB, uni1EED, uni1EEF, uhungarumlaut, uni0217, umacron, uni021B, uogonek, uring, utilde, v, w, wacute, wcircumflex, wdieresis, wgrave, x, y, yacute, ycircumflex, ydieresis, uni1EF5, ygrave, uni1EF7, uni0233, uni1EF9, z, zacute, zcaron, zdotaccent, f_f, fi, fl, ordfeminine, ordmasculine, zero, one, two, three, four, five, six, seven, eight, nine, zero.lf, one.lf, two.lf, three.lf, four.lf, five.lf, six.lf, seven.lf, eight.lf, nine.lf, uni00B9, uni00B2, uni00B3, uni2074, fraction, onehalf, onequarter, threequarters, period, comma, colon, semicolon, ellipsis, exclam, exclamdown, question, questiondown, periodcentered, bullet, asterisk, numbersign, slash, backslash, period.alt1, ellipsis.alt1, exclam.alt1, exclamdown.alt1, question.alt1, questiondown.alt1, periodcentered.alt1, periodcentered.loclCAT.alt1, periodcentered.loclCAT, parenleft, parenright, braceleft, braceright, bracketleft, bracketright, hyphen, uni00AD, endash, emdash, uni2010, underscore, quotesinglbase, quotedblbase, quotedblleft, quotedblright, quoteleft, quoteright, guillemotleft, guillemotright, guilsinglleft, guilsinglright, quotedbl, quotesingle, uni27E8, uni27E9, uni00A0, Euro, uni20B5, cent, colonmonetary, currency, dollar, dong, florin, franc, uni20B2, uni20AD, lira, uni20A6, peseta, uni20B1, sterling, uni20BA, uni20B9, uni20BC, uni20BD, uni20A9, yen, uni2219, uni2215, plus, minus, multiply, divide, equal, notequal, greater, less, greaterequal, lessequal, plusminus, approxequal, asciitilde, logicalnot, asciicircum, uni00B5, percent, perthousand, uni2052, plus.alt1, multiply.alt1, greater.alt1, less.alt1, arrowup, uni2197, arrowright, uni2198, arrowdown, uni2199, arrowleft, uni2196, arrowright.alt1, arrowleft.alt1, at, ampersand, paragraph, section, copyright, registered, trademark, degree, minute, second, bar, brokenbar, dagger, daggerdbl, uni2116, uni2116.alt1, uni02BC, uni02BA, uni02B9, uni0308, uni0307, gravecomb, acutecomb, uni030B, caroncomb.alt, uni0302, uni030C, uni0306, uni030A, tildecomb, uni0304, hookabovecomb, uni030F, uni0311, uni031B, dotbelowcomb, uni0324, uni0326, uni0327, uni0328, uni032E, uni0331, uni0335, uni0336, uni0337, uni0337.alt, uni0338, acute, breve, caron, cedilla, circumflex, dieresis, dotaccent, grave, hungarumlaut, macron, ogonek, ring, tilde, uni031B.alt, uni0327.alt, uni0328.alt, uni03060301, uni03060300, uni03060309, uni03060303, uni03020301, uni03020300, uni03020309, uni03020303, uniE902, uniE903, uniE904, uniE907, uniE908, uniE909 [code: should-be-monospaced]
  • ⚠️ WARN Double-width and/or zero-width glyphs were detected. These glyphs should be set to the same width as all others and then add GPOS single pos lookups that zeros/doubles the widths as needed: periodcentered.loclCAT.alt1, periodcentered.loclCAT, uni0308, uni0307, gravecomb, acutecomb, uni030B, caroncomb.alt, uni0302, uni030C, uni0306, uni030A, tildecomb, uni0304, hookabovecomb, uni030F, uni0311, uni031B, dotbelowcomb, uni0324, uni0326, uni0327, uni0328, uni032E, uni0331, uni0335, uni0336, uni0337, uni0337.alt, uni0338, uni031B.alt, uni0327.alt, uni0328.alt, uni03060301, uni03060300, uni03060309, uni03060303, uni03020301, uni03020300, uni03020309, uni03020303 [code: variable-monospaced]
⚠️ WARN: Does GPOS table have kerning information?
⚠️ WARN: Is there a caret position declared for every ligature?
  • com.google.fonts/check/064
  • ⚠️ WARN This font lacks caret position values for ligature glyphs on its GDEF table. [code: lacks-caret-pos]
💤 SKIP: Check copyright namerecords match license file.
💤 SKIP: Checks METADATA.pb font.name field matches family name declared on the name table.
💤 SKIP: Checks METADATA.pb font.post_script_name matches postscript name declared on the name table.
💤 SKIP: METADATA.pb font.full_name value matches fullname declared on the name table?
💤 SKIP: METADATA.pb font.name value should be same as the family name declared on the name table.
💤 SKIP: METADATA.pb font.full_name and font.post_script_name fields have equivalent values ?
💤 SKIP: METADATA.pb font.filename and font.post_script_name fields have equivalent values?
💤 SKIP: METADATA.pb font.name field contains font name in right format?
💤 SKIP: METADATA.pb font.full_name field contains font name in right format?
💤 SKIP: METADATA.pb font.filename field contains font name in right format?
💤 SKIP: METADATA.pb font.post_script_name field contains font name in right format?
💤 SKIP: Copyright notice on METADATA.pb matches canonical pattern?
💤 SKIP: Copyright notice on METADATA.pb should not contain 'Reserved Font Name'.
💤 SKIP: METADATA.pb: Copyright notice shouldn't exceed 500 chars.
💤 SKIP: METADATA.pb: Filename is set canonically?
💤 SKIP: METADATA.pb font.style "italic" matches font internals?
💤 SKIP: METADATA.pb font.style "normal" matches font internals?
💤 SKIP: METADATA.pb font.name and font.full_name fields match the values declared on the name table?
💤 SKIP: METADATA.pb: Check if fontname is not camel cased.
💤 SKIP: METADATA.pb: Check font name is the same as family name.
💤 SKIP: METADATA.pb: Check that font weight has a canonical value.
💤 SKIP: Checking OS/2 usWeightClass matches weight specified at METADATA.pb.
💤 SKIP: METADATA.pb weight matches postScriptName.
💤 SKIP: METADATA.pb: Font styles are named canonically?
💤 SKIP: Version number has increased since previous release on Google Fonts?
💤 SKIP: Glyphs are similiar to Google Fonts version?
💤 SKIP: TTFAutohint x-height increase value is same as in previous release on Google Fonts?
💤 SKIP: Check font has same encoded glyphs as version hosted on fonts.google.com
💤 SKIP: Copyright field for this font on METADATA.pb matches all copyright notice entries on the name table ?
💤 SKIP: Check a static ttf can be generated from a variable font.
💤 SKIP: FontForge validation outputs error messages?
💤 SKIP: FontForge checks.
💤 SKIP: Is there kerning info for non-ligated sequences?
💤 SKIP: The variable font 'wght' (Weight) axis coordinate must be 400 on the 'Regular' instance.
💤 SKIP: The variable font 'wdth' (Width) axis coordinate must be 100 on the 'Regular' instance.
💤 SKIP: The variable font 'slnt' (Slant) axis coordinate must be zero on the 'Regular' instance.
💤 SKIP: The variable font 'ital' (Italic) axis coordinate must be zero on the 'Regular' instance.
💤 SKIP: The variable font 'opsz' (Optical Size) axis coordinate should be between 9 and 13 on the 'Regular' instance.
💤 SKIP: The variable font 'wght' (Weight) axis coordinate must be 700 on the 'Bold' instance.
ℹ️ INFO: Show hinting filesize impact.
/Users/marc/Downloads/majormono-master/fonts/MajorMonoDisplay-Regular.ttf
Dehinted Size 75.1kb
Hinted Size 123.5kb
Increase 48.4kb
Change 0.6 %
ℹ️ INFO: EPAR table present in font?
ℹ️ INFO: Check for font-v versioning
  • com.google.fonts/check/166
  • ℹ️ INFO Version string is: "Version 2.000; ttfautohint (v1.8) -l 8 -r 50 -G 200 -x 14 -D latn -f none -a qsq -X """
    The version string must ideally include a git commit hash and either a 'dev' or a 'release' suffix such as in the example below:
    "Version 1.3; git-0d08353-release"
ℹ️ INFO: Font contains all required tables?
  • com.google.fonts/check/052
  • ℹ️ INFO This font contains the following optional tables [cvt , GPOS, GSUB, DSIG, fpgm, loca, gasp, prep]
  • 🍞 PASS Font contains all required tables.
🍞 PASS: Checking file is named canonically.
  • com.google.fonts/check/001
  • 🍞 PASS /Users/marc/Downloads/majormono-master/fonts/MajorMonoDisplay-Regular.ttf is named canonically.
🍞 PASS: Fonts have equal numbers of glyphs?
🍞 PASS: Fonts have equal glyph names?
🍞 PASS: Checking OS/2 fsType.
🍞 PASS: Substitute copyright, registered and trademark symbols in name table entries.
  • com.google.fonts/check/019
  • 🍞 PASS No need to substitute copyright, registered and trademark symbols in name table entries of this font.
🍞 PASS: Checking OS/2 usWeightClass.
🍞 PASS: "License URL matches License text on name table?
🍞 PASS: Description strings in the name table must not exceed 200 characters.
🍞 PASS: Version format is correct in 'name' table?
🍞 PASS: Font has old ttfautohint applied?
🍞 PASS: Is 'gasp' table set to optimize rendering?
🍞 PASS: Make sure family name does not begin with a digit.
🍞 PASS: Font has all expected currency sign characters?
🍞 PASS: Are there non-ASCII characters in ASCII-only NAME table entries?
🍞 PASS: Is font em size (ideally) equal to 1000?
🍞 PASS: Checking OS/2 fsSelection value.
  • com.google.fonts/check/129
  • 🍞 PASS OS/2 fsSelection REGULAR bit is properly set.
  • 🍞 PASS OS/2 fsSelection ITALIC bit is properly set.
  • 🍞 PASS OS/2 fsSelection BOLD bit is properly set.
🍞 PASS: Checking post.italicAngle value.
🍞 PASS: Checking head.macStyle value.
  • com.google.fonts/check/131
  • 🍞 PASS head macStyle ITALIC bit is properly set.
  • 🍞 PASS head macStyle BOLD bit is properly set.
🍞 PASS: Font has all mandatory 'name' table entries ?
🍞 PASS: Check name table: FONT_FAMILY_NAME entries.
🍞 PASS: Check name table: FONT_SUBFAMILY_NAME entries.
🍞 PASS: Check name table: FULL_FONT_NAME entries.
🍞 PASS: Check name table: POSTSCRIPT_NAME entries.
🍞 PASS: Check name table: TYPOGRAPHIC_FAMILY_NAME entries.
🍞 PASS: Check name table: TYPOGRAPHIC_SUBFAMILY_NAME entries.
🍞 PASS: Length of copyright notice must not exceed 500 characters.
🍞 PASS: Familyname must be unique according to namecheck.fontdata.com
🍞 PASS: Checking OS/2 usWinAscent & usWinDescent.
🍞 PASS: Checking OS/2 Metrics match hhea Metrics.
🍞 PASS: Font enables smart dropout control in "prep" table instructions?
🍞 PASS: Checking with ftxvalidator.
🍞 PASS: Checking with ots-sanitize.
🍞 PASS: Font contains .notdef as first glyph?
  • com.google.fonts/check/046
  • 🍞 PASS Font contains the .notdef glyph as the first glyph, it does not have a Unicode value assigned and contains a drawing.
🍞 PASS: Font contains glyphs for whitespace characters?
🍞 PASS: Font has **proper** whitespace glyph names?
🍞 PASS: Whitespace glyphs have ink?
🍞 PASS: Are there unwanted tables?
🍞 PASS: Glyph names are all valid?
🍞 PASS: Font contains unique glyph names?
🍞 PASS: Checking with fontTools.ttx
🍞 PASS: Check glyphs have unique unicode codepoints.
🍞 PASS: Check all glyphs have codepoints assigned.
🍞 PASS: Checking unitsPerEm value is reasonable.
🍞 PASS: Checking font version fields (head and name table).
🍞 PASS: Font has correct post table version (2 for TTF, 3 for OTF)?
🍞 PASS: Description strings in the name table must not contain copyright info.
🍞 PASS: Name table entries should not contain line-breaks.
🍞 PASS: Does full font name begin with the font family name?
🍞 PASS: Font follows the family naming recommendations?
🍞 PASS: Name table strings must not contain the string 'Reserved Font Name'.
🍞 PASS: Checking Vertical Metric Linegaps.
🍞 PASS: MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables?
🍞 PASS: Does the font have a DSIG table?
🍞 PASS: Whitespace and non-breaking space have the same width?
🍞 PASS: Is there a "kern" table declared in the font?
🍞 PASS: Is there any unused data at the end of the glyf table?
🍞 PASS: Check for points out of bounds.
🍞 PASS: Does the number of glyphs in the loca table match the maxp table?

Summary

💔 ERROR 🔥 FAIL ⚠️ WARN 💤 SKIP ℹ️ INFO 🍞 PASS
0 2 8 55 4 64
0% 2% 6% 41% 3% 48%

🔥 FAIL MS-FonVal: The isFixedPitch field is nonzero, but hmtx shows the font as proportional

Seems like a false positive to me. The font is clearly a monospace. When I inspect the hmtx table, only the following glyphs are non-monospace

  <hmtx>
    <mtx name="acutecomb" width="0" lsb="-466"/>
    <mtx name="caroncomb.alt" width="0" lsb="-395"/>
    <mtx name="dotbelowcomb" width="0" lsb="-451"/>
    <mtx name="f_f" width="1480" lsb="139"/>
    <mtx name="f_f_i" width="2220" lsb="139"/>
    <mtx name="f_f_l" width="2220" lsb="139"/>
    <mtx name="fi" width="1480" lsb="139"/>
    <mtx name="fl" width="1480" lsb="139"/>
    <mtx name="gravecomb" width="0" lsb="-466"/>
    <mtx name="hookabovecomb" width="0" lsb="-392"/>
    <mtx name="periodcentered.loclCAT" width="0" lsb="-90"/>
    <mtx name="periodcentered.loclCAT.alt1" width="0" lsb="-91"/>
    <mtx name="tildecomb" width="0" lsb="-543"/>
    <mtx name="uni018F" width="702" lsb="64"/>
    <mtx name="uni01C4" width="1480" lsb="120"/>
    <mtx name="uni01C5" width="1480" lsb="120"/>
    <mtx name="uni01C6" width="1480" lsb="106"/>
    <mtx name="uni01C7" width="1480" lsb="144"/>
    <mtx name="uni01C7.alt1" width="1480" lsb="143"/>
    <mtx name="uni01C8" width="1480" lsb="144"/>
    <mtx name="uni01C8.alt1" width="1480" lsb="143"/>
    <mtx name="uni01C9" width="1480" lsb="155"/>
    <mtx name="uni01CA" width="1480" lsb="99"/>
    <mtx name="uni01CA.alt1" width="1480" lsb="99"/>
    <mtx name="uni01CB" width="1480" lsb="99"/>
    <mtx name="uni01CB.alt1" width="1480" lsb="99"/>
    <mtx name="uni01CC" width="1480" lsb="98"/>
    <mtx name="uni0302" width="0" lsb="-518"/>
    <mtx name="uni03020300" width="0" lsb="-518"/>
    <mtx name="uni03020301" width="0" lsb="-518"/>
    <mtx name="uni03020303" width="0" lsb="-545"/>
    <mtx name="uni03020309" width="0" lsb="-518"/>
    <mtx name="uni0304" width="0" lsb="-518"/>
    <mtx name="uni0306" width="0" lsb="-524"/>
    <mtx name="uni03060300" width="0" lsb="-524"/>
    <mtx name="uni03060301" width="0" lsb="-524"/>
    <mtx name="uni03060303" width="0" lsb="-545"/>
    <mtx name="uni03060309" width="0" lsb="-524"/>
    <mtx name="uni0307" width="0" lsb="-451"/>
    <mtx name="uni0308" width="0" lsb="-562"/>
    <mtx name="uni030A" width="0" lsb="-477"/>
    <mtx name="uni030B" width="0" lsb="-535"/>
    <mtx name="uni030C" width="0" lsb="-518"/>
    <mtx name="uni030F" width="0" lsb="-562"/>
    <mtx name="uni0311" width="0" lsb="-524"/>
    <mtx name="uni031B" width="0" lsb="-417"/>
    <mtx name="uni031B.alt" width="0" lsb="-451"/>
    <mtx name="uni0324" width="0" lsb="-562"/>
    <mtx name="uni0326" width="0" lsb="-431"/>
    <mtx name="uni0327" width="0" lsb="-432"/>
    <mtx name="uni0327.alt" width="0" lsb="-426"/>
    <mtx name="uni0328" width="0" lsb="-500"/>
    <mtx name="uni0328.alt" width="0" lsb="-520"/>
    <mtx name="uni032E" width="0" lsb="-524"/>
    <mtx name="uni0331" width="0" lsb="-518"/>
    <mtx name="uni0335" width="0" lsb="-542"/>
    <mtx name="uni0336" width="0" lsb="-612"/>
    <mtx name="uni0337" width="0" lsb="-539"/>
    <mtx name="uni0337.alt" width="0" lsb="-539"/>
    <mtx name="uni0338" width="0" lsb="-643"/>
  </hmtx>

They're all either marks or ligatures.

Perhaps we should remove this test from FontValidator. @davelab6 thoughts?

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

No branches or pull requests

2 participants