Closed kokiabe closed 2 years ago
I have fixed the monospaced metadata.
post.isFixedPicth = 1 OS/2.PANOSE.proportion = 9 OS/2.xAvgCharWIdth = 500
Fontbakery version: 0.8.1
--- Rationale --- Running old versions of FontBakery can lead to a poor report which may include false WARNs and FAILs due do bugs, as well as outdated quality assurance criteria. Older versions will also not report problems that are detected by new checks added to the tool in more recent updates.* ๐ฅ **FAIL** Current Font Bakery version is 0.8.1, while a newer 0.8.2 is already available. Please upgrade it with 'pip install -U fontbakery'
--- Rationale --- While not required by the OpenType spec, we (Adobe) expect that a group of fonts designed & produced as a family have consistent units per em.* ๐ **PASS** Fonts have consistent units per em.
--- Rationale --- If the set of font files passed in the command line is not all in the same directory, then we warn the user since the tool will interpret the set of files as belonging to a single family (and it is unlikely that the user would store the files from a single family spreaded in several separate directories).* ๐ **PASS** All files are in the same directory.
--- Rationale --- There's no reasonable (and legal) way to run the command `ftxvalidator` of the Apple Font Tool Suite on a non-macOS machine. I.e. on GNU+Linux or Windows etc. If Font Bakery is not running on an OSX machine, the machine running Font Bakery could access `ftxvalidator` on OSX, e.g. via ssh or a remote procedure call (rpc). There's an ssh example implementation at: https://github.com/googlefonts/fontbakery/blob/main/prebuilt/workarounds /ftxvalidator/ssh-implementation/ftxvalidator* ๐ **PASS** ftxvalidator is available at /usr/local/bin/ftxvalidator
--- Rationale --- We want all fonts within a family to have the same vertical metrics so their line spacing is consistent across the family.* ๐ **PASS** Vertical metrics are the same across the family.
--- Rationale --- Per the OpenType spec: name ID 1 'is used in combination with Font Subfamily name (name ID 2), and should be shared among at most four fonts that differ only in weight or style... This four-way distinction should also be reflected in the OS/2.fsSelection field, using bits 0 and 5.* ๐ **PASS** The OS/2.fsSelection bold & italic settings were unique within each compatible family group.
--- Rationale --- Dave C Lemon (Adobe Type Team) recommends setting the underline thickness to be consistent across the family. If thicknesses are not family consistent, words set on the same line which have different styles look strange. See also: https://twitter.com/typenerd1/status/690361887926697986* ๐ **PASS** Fonts have consistent underline thickness.
--- Rationale --- Per the OpenType spec: 'The Font Family name [...] should be shared among at most four fonts that differ only in weight or style [...]'* ๐ **PASS** There were no more than 4 fonts per family name.
--- Rationale --- There are various metadata in the OpenType spec to specify if a font is monospaced or not. If the font is not truly monospaced, then no monospaced metadata should be set (as sometimes they mistakenly are...) Requirements for monospace fonts: * post.isFixedPitch - "Set to 0 if the font is proportionally spaced, non-zero if the font is not proportionally spaced (monospaced)" www.microsoft.com/typography/otspec/post.htm * hhea.advanceWidthMax must be correct, meaning no glyph's width value is greater. www.microsoft.com/typography/otspec/hhea.htm * OS/2.panose.bProportion must be set to 9 (monospace). Spec says: "The PANOSE definition contains ten digits each of which currently describes up to sixteen variations. Windows uses bFamilyType, bSerifStyle and bProportion in the font mapper to determine family type. It also uses bProportion to determine if the font is monospaced." www.microsoft.com/typography/otspec/os2.htm#pan monotypecom-test.monotype.de/services/pan2 * OS/2.xAvgCharWidth must be set accurately. "OS/2.xAvgCharWidth is used when rendering monospaced fonts, at least by Windows GDI" http://typedrawers.com/discussion/comment/15397/#Comment_15397 Also we should report an error for glyphs not of average width. Please also note: Thomas Phinney told us that a few years ago (as of December 2019), if you gave a font a monospace flag in Panose, Microsoft Word would ignore the actual advance widths and treat it as monospaced. Source: https://typedrawers.com/discussion/comment/45140/#Comment_45140* โ **WARN** Font is monospaced but 642 glyphs (6.86%) have a different width. You should check the widths of: ['space', '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', 'yen', 'bracketright', 'asciicircum', 'underscore', 'grave', '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', 'brokenbar', 'braceright', 'tilde', 'quoteright', 'backslash', 'quoteleft', 'bar', 'asciitilde', 'exclamdown', 'cent', 'sterling', 'fraction', 'florin', 'section', 'currency', 'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'endash', 'dagger.prop', 'daggerdbl.prop', 'periodcentered', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis.full', 'perthousand.full', 'questiondown', 'acutecomb', 'circumflex', 'macron', 'uni0306', 'uni0307', 'uni0308', 'ring', 'cedilla', 'uni030B', 'uni0328', 'uni030C', 'emdash', 'AE', 'ordfeminine', 'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae', 'dotlessi', 'lslash', 'oslash', 'oe', 'germandbls', 'uni00AD', 'copyright', 'logicalnot', 'registered', 'degree', 'plusminus', 'uni00B2', 'uni00B3', 'uni00B5', 'uni00B9', 'onequarter', 'onehalf', 'threequarters', 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', 'Adieresis', 'Aring', 'Ccedilla', 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Eth', 'Ntilde', 'Ograve', 'Oacute', 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', 'Ugrave', 'Uacute', 'Ucircumflex', 'Udieresis', 'Yacute', 'Thorn', 'agrave', 'aacute', 'acircumflex', 'atilde', 'adieresis', 'aring', 'ccedilla', 'egrave', 'eacute', 'ecircumflex', 'edieresis', 'igrave', 'iacute', 'icircumflex', 'idieresis', 'eth', 'ntilde', 'ograve', 'oacute', 'ocircumflex', 'otilde', 'odieresis', 'divide', 'ugrave', 'uacute', 'ucircumflex', 'udieresis', 'yacute', 'thorn', 'ydieresis', 'Scaron', 'Ydieresis', 'Zcaron', 'uni0305', 'scaron', 'trademark', 'zcaron', 'zero.zero', 'uni2002', 'exclam.half', 'quotedblright.half', 'numbersign.half', 'dollar.half', 'percent.half', 'ampersand.half', 'quoteright.half', 'parenleft.half', 'parenright.half', 'asterisk.half', 'plus.half', 'comma.half', 'hyphen.half', 'period.half', 'slash.half', 'zero.half', 'one.half', 'two.half', 'three.half', 'four.half', 'five.half', 'six.half', 'seven.half', 'eight.half', 'nine.half', 'colon.half', 'semicolon.half', 'less.half', 'equal.half', 'greater.half', 'question.half', 'at.half', 'A.half', 'B.half', 'C.half', 'D.half', 'E.half', 'F.half', 'G.half', 'H.half', 'I.half', 'J.half', 'K.half', 'L.half', 'M.half', 'N.half', 'O.half', 'P.half', 'Q.half', 'R.half', 'S.half', 'T.half', 'U.half', 'V.half', 'W.half', 'X.half', 'Y.half', 'Z.half', 'bracketleft.half', 'yen.half', 'bracketright.half', 'asciicircum.half', 'underscore.half', 'quoteleft.half', 'a.half', 'b.half', 'c.half', 'd.half', 'e.half', 'f.half', 'g.half', 'h.half', 'i.half', 'j.half', 'k.half', 'l.half', 'm.half', 'n.half', 'o.half', 'p.half', 'q.half', 'r.half', 's.half', 't.half', 'u.half', 'v.half', 'w.half', 'x.half', 'y.half', 'z.half', 'braceleft.half', 'uniFFE8', 'braceright.half', 'macron.half', 'spacekata.half', 'uniFF61', 'uniFF62', 'uniFF63', 'uniFF64', 'uniFF65', 'uniFF66', 'uniFF67', 'uniFF68', 'uniFF69', 'uniFF6A', 'uniFF6B', 'uniFF6C', 'uniFF6D', 'uniFF6E', 'uniFF6F', 'uniFF70', 'uniFF71', 'uniFF72', 'uniFF73', 'uniFF74', 'uniFF75', 'uniFF76', 'uniFF77', 'uniFF78', 'uniFF79', 'uniFF7A', 'uniFF7B', 'uniFF7C', 'uniFF7D', 'uniFF7E', 'uniFF7F', 'uniFF80', 'uniFF81', 'uniFF82', 'uniFF83', 'uniFF84', 'uniFF85', 'uniFF86', 'uniFF87', 'uniFF88', 'uniFF89', 'uniFF8A', 'uniFF8B', 'uniFF8C', 'uniFF8D', 'uniFF8E', 'uniFF8F', 'uniFF90', 'uniFF91', 'uniFF92', 'uniFF93', 'uniFF94', 'uniFF95', 'uniFF96', 'uniFF97', 'uniFF98', 'uniFF99', 'uniFF9A', 'uniFF9B', 'uniFF9C', 'uniFF9D', 'uniFF9E', 'uniFF9F', 'grave.half', 'uni30F0.half', 'uni30F1.half', 'uni30EE.half', 'uni30F5.half', 'uni30F6.half', 'uni30F4.half', 'uni30AC.half', 'uni30AE.half', 'uni30B0.half', 'uni30B2.half', 'uni30B4.half', 'uni30B6.half', 'uni30B8.half', 'uni30BA.half', 'uni30BC.half', 'uni30BE.half', 'uni30C0.half', 'uni30C2.half', 'uni30C5.half', 'uni30C7.half', 'uni30C9.half', 'uni30D0.half', 'uni30D1.half', 'uni30D3.half', 'uni30D4.half', 'uni30D6.half', 'uni30D7.half', 'uni30D9.half', 'uni30DA.half', 'uni30DC.half', 'uni30DD.half', 'space.half', 'uni301D.half', 'uni301F.half', 'uni2500.half', 'uni2501.half', 'uni2502.half', 'uni2503.half', 'uni2504.half', 'uni2505.half', 'uni2506.half', 'uni2507.half', 'uni2508.half', 'uni2509.half', 'uni250A.half', 'uni250B.half', 'uni250C.half', 'uni250D.half', 'uni250E.half', 'uni250F.half', 'uni2510.half', 'uni2511.half', 'uni2512.half', 'uni2513.half', 'uni2514.half', 'uni2515.half', 'uni2516.half', 'uni2517.half', 'uni2518.half', 'uni2519.half', 'uni251A.half', 'uni251B.half', 'uni251C.half', 'uni251D.half', 'uni251E.half', 'uni251F.half', 'uni2520.half', 'uni2521.half', 'uni2522.half', 'uni2523.half', 'uni2524.half', 'uni2525.half', 'uni2526.half', 'uni2527.half', 'uni2528.half', 'uni2529.half', 'uni252A.half', 'uni252B.half', 'uni252C.half', 'uni252D.half', 'uni252E.half', 'uni252F.half', 'uni2530.half', 'uni2531.half', 'uni2532.half', 'uni2533.half', 'uni2534.half', 'uni2535.half', 'uni2536.half', 'uni2537.half', 'uni2538.half', 'uni2539.half', 'uni253A.half', 'uni253B.half', 'uni253C.half', 'uni253D.half', 'uni253E.half', 'uni253F.half', 'uni2540.half', 'uni2541.half', 'uni2542.half', 'uni2543.half', 'uni2544.half', 'uni2545.half', 'uni2546.half', 'uni2547.half', 'uni2548.half', 'uni2549.half', 'uni254A.half', 'uni254B.half', 'acute.half', 'dieresis.half', 'quotedblleft.half', 'uni3014.half', 'uni3015.half', 'uni3008.half', 'uni3009.half', 'uni300A.half', 'uni300B.half', 'uni300E.half', 'uni300F.half', 'uni3010.half', 'uni3011.half', 'endash.half', 'spacehira.half', 'uni3092.half', 'uni3041.half', 'uni3043.half', 'uni3045.half', 'uni3047.half', 'uni3049.half', 'uni3083.half', 'uni3085.half', 'uni3087.half', 'uni3063.half', 'uni3042.half', 'uni3044.half', 'uni3046.half', 'uni3048.half', 'uni304A.half', 'uni304B.half', 'uni304D.half', 'uni304F.half', 'uni3051.half', 'uni3053.half', 'uni3055.half', 'uni3057.half', 'uni3059.half', 'uni305B.half', 'uni305D.half', 'uni305F.half', 'uni3061.half', 'uni3064.half', 'uni3066.half', 'uni3068.half', 'uni306A.half', 'uni306B.half', 'uni306C.half', 'uni306D.half', 'uni306E.half', 'uni306F.half', 'uni3072.half', 'uni3075.half', 'uni3078.half', 'uni307B.half', 'uni307E.half', 'uni307F.half', 'uni3080.half', 'uni3081.half', 'uni3082.half', 'uni3084.half', 'uni3086.half', 'uni3088.half', 'uni3089.half', 'uni308A.half', 'uni308B.half', 'uni308C.half', 'uni308D.half', 'uni308F.half', 'uni3093.half', 'uni3090.half', 'uni3091.half', 'uni308E.half', 'uni304C.half', 'uni304E.half', 'uni3050.half', 'uni3052.half', 'uni3054.half', 'uni3056.half', 'uni3058.half', 'uni305A.half', 'uni305C.half', 'uni305E.half', 'uni3060.half', 'uni3062.half', 'uni3065.half', 'uni3067.half', 'uni3069.half', 'uni3070.half', 'uni3071.half', 'uni3073.half', 'uni3074.half', 'uni3076.half', 'uni3077.half', 'uni3079.half', 'uni307A.half', 'uni307C.half', 'uni307D.half', 'Adieresis.half', 'ugrave.half', 'eacute.half', 'iacute.half', 'germandbls.half', 'ccedilla.half', 'Ccedilla.half', 'Ntilde.half', 'ntilde.half', 'cent.half', 'sterling.half', 'oacute.half', 'uacute.half', 'exclamdown.half', 'questiondown.half', 'one_fraction_two.nut.half', 'Odieresis.half', 'Udieresis.half', 'adieresis.half', 'edieresis.half', 'idieresis.half', 'odieresis.half', 'udieresis.half', 'acircumflex.half', 'ecircumflex.half', 'icircumflex.half', 'ocircumflex.half', 'ucircumflex.half', 'agrave.half', 'egrave.half', 'triagup.half', 'aacute.half', 'asciitilde.half', 'zero.zero.half', 'logicalnot.half', 'backslash.half', 'CR', 'acute', 'dieresis', 'uni2215', 'Euro', 'uni2074', 'minus', 'uni00A0'] [code: mono-outliers]
--- Rationale --- Microsoft Office 2013 and below products expect fonts to have a digital signature declared in a DSIG table in order to implement OpenType features. The EOL date for Microsoft Office 2013 products is 4/11/2023. This issue does not impact Microsoft Office 2016 and above products. As we approach the EOL date, it is now considered better to completely remove the table. But if you still want your font to support OpenType features on Office 2013, then you may find it handy to add a fake signature on a dummy DSIG table by running one of the helper scripts provided at https://github.com/googlefonts/gftools Reference: https://github.com/googlefonts/fontbakery/issues/1845* โ **WARN** This font has a digital signature (DSIG table) which is only required - even if only a dummy placeholder - on old programs like MS Office 2013 in order to work properly. The current recommendation is to completely remove the DSIG table. [code: found-DSIG]
--- Rationale --- A font's winAscent and winDescent values should be greater than the head table's yMax, abs(yMin) values. If they are less than these values, clipping can occur on Windows platforms (https://github.com/RedHatBrand/Overpass/issues/33). If the font includes tall/deep writing systems such as Arabic or Devanagari, the winAscent and winDescent can be greater than the yMax and abs(yMin) to accommodate vowel marks. When the win Metrics are significantly greater than the upm, the linespacing can appear too loose. To counteract this, enabling the OS/2 fsSelection bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 typo values instead. This means the font developer can control the linespacing with the typo values, whilst avoiding clipping by setting the win values to values greater than the yMax and abs(yMin).* ๐ค **SKIP** Unfulfilled Conditions: not is_cjk_font
--- Rationale --- OS/2 and hhea vertical metric values should match. This will produce the same linespacing on Mac, GNU+Linux and Windows. - Mac OS X uses the hhea values. - Windows uses OS/2 or Win, depending on the OS or fsSelection bit value. When OS/2 and hhea vertical metrics match, the same linespacing results on macOS, GNU+Linux and Windows. Unfortunately as of 2018, Google Fonts has released many fonts with vertical metrics that don't match in this way. When we fix this issue in these existing families, we will create a visible change in line/paragraph layout for either Windows or macOS users, which will upset some of them. But we have a duty to fix broken stuff, and inconsistent paragraph layout is unacceptably broken when it is possible to avoid it. If users complain and prefer the old broken version, they have the freedom to take care of their own situation.* ๐ค **SKIP** Unfulfilled Conditions: not is_cjk_font
--- Rationale --- On the STAT table, the "Italic" keyword must not be used on AxisValues for variation axes other than 'ital'.* ๐ค **SKIP** Unfulfilled Conditions: STAT_table
--- Rationale --- We may want all fonts within a super-family (all sibling families) to have the same vertical metrics so their line spacing is consistent across the super-family. This is an experimental extended version of com.google.fonts/check/family/vertical_metrics and for now it will only result in WARNs.* ๐ค **SKIP** Sibling families were not detected.
--- Rationale --- Per Bureau of Indian Standards every font supporting one of the official Indian languages needs to include Unicode Character โโนโ (U+20B9) Indian Rupee Sign.* ๐ค **SKIP** Unfulfilled Conditions: is_indic_font
--- Rationale --- Per "The Type 2 Charstring Format, Technical Note #5177", the "Subr nesting, stack limit" is 10.* ๐ค **SKIP** Unfulfilled Conditions: is_cff
--- Rationale --- Per "The CFF2 CharString Format", the "Subr nesting, stack limit" is 10.* ๐ค **SKIP** Unfulfilled Conditions: is_cff2
--- Rationale --- The 'dotsection' operator and the use of 'endchar' to build accented characters from the Adobe Standard Encoding Character Set ("seac") are deprecated in CFF. Adobe recommends repairing any fonts that use these, especially endchar-as-seac, because a rendering issue was discovered in Microsoft Word with a font that makes use of this operation. The check treats that useage as a FAIL. There are no known ill effects of using dotsection, so that check is a WARN.* ๐ค **SKIP** Unfulfilled Conditions: is_cff
--- Rationale --- The PostScript name entries in the font's 'name' table should match the FontName string in the 'CFF ' table. The 'CFF ' table has a lot of information that is duplicated in other tables. This information should be consistent across tables, because there's no guarantee which table an app will get the data from.* ๐ค **SKIP** Unfulfilled Conditions: is_cff
--- Rationale --- Glyphs in the GDEF mark glyph class should be non-spacing. Spacing glyphs in the GDEF mark glyph class may have incorrect anchor positioning that was only intended for building composite glyphs during design.* ๐ค **SKIP** Font does not declare an optional "GDEF" table or has any GDEF glyph class definition.
--- Rationale --- Mark characters should be in the GDEF mark glyph class.* ๐ค **SKIP** Font does not declare an optional "GDEF" table or has any GDEF glyph class definition.
--- Rationale --- Glyphs in the GDEF mark glyph class become non-spacing and may be repositioned if they have mark anchors. Only combining mark glyphs should be in that class. Any non-mark glyph must not be in that class, in particular spacing glyphs.* ๐ค **SKIP** Font does not declare an optional "GDEF" table or has any GDEF glyph class definition.
--- Rationale --- According to the Open-Type spec's registered design-variation tag 'wght' available at https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght If a variable font has a 'wght' (Weight) axis, then the coordinate of its 'Regular' instance is required to be 400.* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, regular_wght_coord
--- Rationale --- According to the Open-Type spec's registered design-variation tag 'wdth' available at https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth If a variable font has a 'wdth' (Width) axis, then the coordinate of its 'Regular' instance is required to be 100.* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, regular_wdth_coord
--- Rationale --- According to the Open-Type spec's registered design-variation tag 'slnt' available at https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_slnt If a variable font has a 'slnt' (Slant) axis, then the coordinate of its 'Regular' instance is required to be zero.* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, regular_slnt_coord
--- Rationale --- According to the Open-Type spec's registered design-variation tag 'ital' available at https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_ital If a variable font has a 'ital' (Italic) axis, then the coordinate of its 'Regular' instance is required to be zero.* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, regular_ital_coord
--- Rationale --- According to the Open-Type spec's registered design-variation tag 'opsz' available at https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_opsz If a variable font has an 'opsz' (Optical Size) axis, then the coordinate of its 'Regular' instance is recommended to be a value in the range 10 to 16.* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, regular_opsz_coord
--- Rationale --- The Open-Type spec's registered design-variation tag 'wght' available at https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght does not specify a required value for the 'Bold' instance of a variable font. But Dave Crossland suggested that we should enforce a required value of 700 in this case.* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, bold_wght_coord
--- Rationale --- According to the Open-Type spec's registered design-variation tag 'wght' available at https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght On the 'wght' (Weight) axis, the valid coordinate range is 1-1000.* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font
--- Rationale --- According to the Open-Type spec's registered design-variation tag 'wdth' available at https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth On the 'wdth' (Width) axis, the valid coordinate range is 1-1000* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font
--- Rationale --- The OpenType spec says at https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt that: [...] the scale for the Slant axis is interpreted as the angle of slant in counter-clockwise degrees from upright. This means that a typical, right-leaning oblique design will have a negative slant value. This matches the scale used for the italicAngle field in the post table.* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, slnt_axis
--- Rationale --- cording to the OpenType spec, there must be an Axis Record for every axis defined in the fvar table. tps://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-records* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font
--- Rationale --- Fonts with complex layout rules can benefit from regression tests to ensure that the rules are behaving as designed. This checks runs a shaping test suite and compares expected shaping against actual shaping, reporting any differences. Shaping test suites should be written by the font engineer and referenced in the fontbakery configuration file. For more information about write shaping test files and how to configure fontbakery to read the shaping test suites, see https://simoncozens.github.io/tdd-for-otl/* ๐ค **SKIP** Shaping test directory not defined in configuration file
--- Rationale --- Fonts with complex layout rules can benefit from regression tests to ensure that the rules are behaving as designed. This checks runs a shaping test suite and reports if any glyphs are generated in the shaping which should not be produced. (For example, .notdef glyphs, visible viramas, etc.) Shaping test suites should be written by the font engineer and referenced in the fontbakery configuration file. For more information about write shaping test files and how to configure fontbakery to read the shaping test suites, see https://simoncozens.github.io/tdd-for-otl/* ๐ค **SKIP** Shaping test directory not defined in configuration file
--- Rationale --- Fonts with complex layout rules can benefit from regression tests to ensure that the rules are behaving as designed. This checks runs a shaping test suite and reports instances where the glyphs collide in unexpected ways. Shaping test suites should be written by the font engineer and referenced in the fontbakery configuration file. For more information about write shaping test files and how to configure fontbakery to read the shaping test suites, see https://simoncozens.github.io/tdd-for-otl/* ๐ค **SKIP** Shaping test directory not defined in configuration file
--- Rationale --- Depending on the typeface and coverage of a font, certain tables are recommended for optimum quality. For example, the performance of a non-linear font is improved if the VDMX, LTSH, and hdmx tables are present. Non-monospaced Latin fonts should have a kern table. A gasp table is necessary if a designer wants to influence the sizes at which grayscaling is used under Windows. Etc.* โน **INFO** This font contains the following optional tables: - loca - BASE - GPOS - GSUB - gasp - vhea - vmtx [code: optional-tables] * ๐ **PASS** Font contains all required tables.
--- Rationale --- This is a merely informative check that lists all sibling families detected by fontbakery. Only the fontfiles in these directories will be considered in superfamily-level checks.* โน **INFO** . [code: family-path]
--- Rationale --- Font language, script, and character set tagging approaches typically have an underlying assumption that letters (i.e. characters with Unicode general category 'Ll', 'Lm', 'Lo', 'Lt', or 'Lu', which includes CJK ideographs and Hangul syllables) with entries in the 'cmap' table have glyphs with ink (with a few exceptions, notably the Hangul "filler" characters). This check is intended to identify fonts in which such letters have been mapped to empty glyphs (typically done as a form of subsetting). Letters with empty glyphs should have their entries removed from the 'cmap' table, even if the empty glyphs are left in place (e.g. for CID consistency).* ๐ **PASS** No empty glyphs for letters found.
--- Rationale --- The OpenType specification v1.8.2 recommends that the first glyph is the '.notdef' glyph without a codepoint assigned and with a drawing. https://docs.microsoft.com/en-us/typography/opentype/spec /recom#glyph-0-the-notdef-glyph Pre-v1.8, it was recommended that fonts should also contain 'space', 'CR' and '.null' glyphs. This might have been relevant for MacOS 9 applications.* ๐ **PASS** OK
--- Rationale --- This check enforces adherence to recommended whitespace (codepoints 0020 and 00A0) glyph names according to the Adobe Glyph List.* ๐ **PASS** Font has **AGL recommended** names for whitespace glyphs.
--- Rationale --- Some font editors store source data in their own SFNT tables, and these can sometimes sneak into final release files, which should only have OpenType spec tables.* ๐ **PASS** There are no unwanted tables.
--- Rationale --- Microsoft's recommendations for OpenType Fonts states the following: 'NOTE: The PostScript glyph name must be no longer than 31 characters, include only uppercase or lowercase English letters, European digits, the period or the underscore, i.e. from the set [A-Za-z0-9_.] and should start with a letter, except the special glyph name ".notdef" which starts with a period.' https://docs.microsoft.com/en-us/typography/opentype/spec/recom#post-table In practice, though, particularly in modern environments, glyph names can be as long as 63 characters. According to the "Adobe Glyph List Specification" available at: https://github.com/adobe-type-tools/agl-specification* ๐ **PASS** Glyph names are all valid.
--- Rationale --- Duplicate glyph names prevent font installation on Mac OS X.* ๐ **PASS** Font contains unique glyph names.
--- Rationale --- According to the OpenType spec: The value of unitsPerEm at the head table must be a value between 16 and 16384. Any value in this range is valid. In fonts that have TrueType outlines, a power of 2 is recommended as this allows performance optimizations in some rasterizers. But 1000 is a commonly used value. And 2000 may become increasingly more common on Variable Fonts.* ๐ **PASS** The unitsPerEm value (1000) on the 'head' table is reasonable.
--- Rationale --- The bold and italic bits in OS/2.fsSelection must match the bold and italic bits in head.macStyle per the OpenType spec.* ๐ **PASS** The OS/2.fsSelection and head.macStyle bold and italic settings match.
--- Rationale --- At least some programs (such as Word and Sublime Text) under Windows 7 do not recognize fonts unless code page bits are properly set on the ulCodePageRange1 (and/or ulCodePageRange2) fields of the OS/2 table. More specifically, the fonts are selectable in the font menu, but whichever Windows API these applications use considers them unsuitable for any character set, so anything set in these fonts is rendered with a fallback font of Arial. This check currently does not identify which code pages should be set. Auto-detecting coverage is not trivial since the OpenType specification leaves the interpretation of whether a given code page is "functional" or not open to the font developer to decide. So here we simply detect as a FAIL when a given font has no code page declared at all.* ๐ **PASS** At least one code page is defined.
--- Rationale --- Apple recommends against using 'post' table format 3 under most circumstances, as it can create problems with some printer drivers and PDF documents. The savings in disk space usually does not justify the potential loss in functionality. Source: https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html The CFF2 table does not contain glyph names, so variable OTFs should be allowed to use post table version 2. This check expects: - Version 2 for TTF or OTF CFF2 Variable fonts - Version 3 for OTF* ๐ **PASS** Font has post table version 2.
--- Rationale --- Check the name table for empty records, as this can cause problems in Adobe apps.* ๐ **PASS** No empty name table records found.
--- Rationale --- The PostScript name entries in the font's 'name' table should be consistent across platforms. This is the TTF/CFF2 equivalent of the CFF 'name/postscript_vs_cff' check.* ๐ **PASS** Entries in the "name" table for ID 6 (PostScript name) are consistent.
--- Rationale --- Even though all fonts should have their kerning implemented in the GPOS table, there may be kerning info at the kern table as well. Some applications such as MS PowerPoint require kerning info on the kern table. More specifically, they require a format 0 kern subtable from a kern table version 0 with only glyphs defined in the cmap table, which is the only one that Windows understands (and which is also the simplest and more limited of all the kern subtables). Google Fonts ingests fonts made for download and use on desktops, and does all web font optimizations in the serving pipeline (using libre libraries that anyone can replicate.) Ideally, TTFs intended for desktop users (and thus the ones intended for Google Fonts) should have both KERN and GPOS tables. Given all of the above, we currently treat kerning on a v0 kern table as a good-to-have (but optional) feature.* ๐ **PASS** Font does not declare an optional "kern" table.
--- Rationale --- There have been cases in which fonts had faulty double quote marks, with each of them containing two single quote marks as components with the same x, y coordinates which makes them visually look like single quote marks. This check ensures that glyphs do not contain duplicate components which have the same x,y coordinates.* ๐ **PASS** Glyphs do not contain duplicate components which have the same x,y coordinates.
--- Rationale --- There have been bugs rendering variable fonts with nested components. Additionally, some static fonts with nested components have been reported to have rendering and printing issues. For more info, see: * https://github.com/googlefonts/fontbakery/issues/2961 * https://github.com/arrowtype/recursive/issues/412* ๐ **PASS** Glyphs do not contain nested components.
--- Rationale --- Incorrect tags can be indications of typos, leftover debugging code or questionable approaches, or user error in the font editor. Such typos can cause features and language support to fail to work as intended.* ๐ **PASS** No invalid feature tags were found
--- Rationale --- Incorrect script tags can be indications of typos, leftover debugging code or questionable approaches, or user error in the font editor. Such typos can cause features and language support to fail to work as intended.* ๐ **PASS** No invalid script tags were found
--- Rationale --- Incorrect language tags can be indications of typos, leftover debugging code or questionable approaches, or user error in the font editor. Such typos can cause features and language support to fail to work as intended.* ๐ **PASS** No invalid language tags were found
--- Rationale --- This check heuristically looks for on-curve points which are close to, but do not sit on, significant boundary coordinates. For example, a point which has a Y-coordinate of 1 or -1 might be a misplaced baseline point. As well as the baseline, here we also check for points near the x-height (but only for lower case Latin letters), cap-height, ascender and descender Y coordinates. Not all such misaligned curve points are a mistake, and sometimes the design may call for points in locations near the boundaries. As this check is liable to generate significant numbers of false positives, it will pass if there are more than 100 reported misalignments.* ๐ **PASS** So many Y-coordinates of points were close to boundaries that this was probably by design.
--- Rationale --- This check looks for outline segments which seem particularly short (less than 0.6% of the overall path length). This check is not run for variable fonts, as they may legitimately have short segments. As this check is liable to generate significant numbers of false positives, it will pass if there are more than 100 reported short segments.* ๐ **PASS** So many short segments were found that this was probably by design.
--- Rationale --- This check looks for consecutive line segments which have the same angle. This normally happens if an outline point has been added by accident. This check is not run for variable fonts, as they may legitimately have colinear vectors.* ๐ **PASS** No colinear vectors found.
--- Rationale --- This check heuristically detects outline segments which form a particularly small angle, indicative of an outline error. This may cause false positives in cases such as extreme ink traps, so should be regarded as advisory and backed up by manual inspection.* ๐ **PASS** No jaggy segments found.
--- Rationale --- This check detects line segments which are nearly, but not quite, exactly horizontal or vertical. Sometimes such lines are created by design, but often they are indicative of a design error. This check is disabled for italic styles, which often contain nearly-upright lines.* ๐ **PASS** No semi-horizontal/semi-vertical lines found.
๐ ERROR | ๐ฅ FAIL | โ WARN | ๐ค SKIP | โน INFO | ๐ PASS | ๐ DEBUG |
---|---|---|---|---|---|---|
0 | 1 | 3 | 25 | 2 | 52 | 0 |
0% | 1% | 4% | 30% | 2% | 63% | 0% |
Fontbakery version: 0.8.1
--- Rationale --- Running old versions of FontBakery can lead to a poor report which may include false WARNs and FAILs due do bugs, as well as outdated quality assurance criteria. Older versions will also not report problems that are detected by new checks added to the tool in more recent updates.* ๐ฅ **FAIL** Current Font Bakery version is 0.8.1, while a newer 0.8.2 is already available. Please upgrade it with 'pip install -U fontbakery'
--- Rationale --- This is (for now) a merely informative check to detect what's the axis ordering declared on the STAT table of fonts in the Google Fonts collection. We may later update this to enforce some unified axis ordering scheme, yet to be determined.* โน **INFO** From a total of 1 font files, 1 of them (100.00%) lack a STAT table. And these are the most common STAT axis orderings: [code: summary] * ๐ค **SKIP** This font does not have a STAT table: DotGothic16-Regular.ttf [code: missing-STAT]
--- Rationale --- Tabular figures need to have the same metrics in all styles in order to allow tables to be set with proper typographic control, but to maintain the placement of decimals and numeric columns between rows. Here's a good explanation of this: https://www.typography.com/techniques/fonts-for-financials/#tabular-figs* ๐ **PASS** OK
--- Rationale --- Use of some unacceptable control characters in the U+0000 - U+001F range can lead to rendering issues on some platforms. Acceptable control characters are defined as .null (U+0000) and CR (U+000D) for this test.* ๐ **PASS** Unacceptable control characters were not identified.
--- Rationale --- For each font family on Google Fonts, every Italic style must have a Roman sibling. This kind of problem was first observed at [1] where the Bold style was missing but BoldItalic was included. [1] https://github.com/google/fonts/pull/1482* ๐ **PASS** OK
--- Rationale --- If the set of font files passed in the command line is not all in the same directory, then we warn the user since the tool will interpret the set of files as belonging to a single family (and it is unlikely that the user would store the files from a single family spreaded in several separate directories).* ๐ **PASS** All files are in the same directory.
--- Rationale --- There's no reasonable (and legal) way to run the command `ftxvalidator` of the Apple Font Tool Suite on a non-macOS machine. I.e. on GNU+Linux or Windows etc. If Font Bakery is not running on an OSX machine, the machine running Font Bakery could access `ftxvalidator` on OSX, e.g. via ssh or a remote procedure call (rpc). There's an ssh example implementation at: https://github.com/googlefonts/fontbakery/blob/main/prebuilt/workarounds /ftxvalidator/ssh-implementation/ftxvalidator* ๐ **PASS** ftxvalidator is available at /usr/local/bin/ftxvalidator
--- Rationale --- We want all fonts within a family to have the same vertical metrics so their line spacing is consistent across the family.* ๐ **PASS** Vertical metrics are the same across the family.
--- Rationale --- Per the OpenType spec: name ID 1 'is used in combination with Font Subfamily name (name ID 2), and should be shared among at most four fonts that differ only in weight or style... This four-way distinction should also be reflected in the OS/2.fsSelection field, using bits 0 and 5.* ๐ **PASS** The OS/2.fsSelection bold & italic settings were unique within each compatible family group.
--- Rationale --- Dave C Lemon (Adobe Type Team) recommends setting the underline thickness to be consistent across the family. If thicknesses are not family consistent, words set on the same line which have different styles look strange. See also: https://twitter.com/typenerd1/status/690361887926697986* ๐ **PASS** Fonts have consistent underline thickness.
--- Rationale --- Per the OpenType spec: 'The Font Family name [...] should be shared among at most four fonts that differ only in weight or style [...]'* ๐ **PASS** There were no more than 4 fonts per family name.
--- Rationale --- In order to facilitate the construction of intuitive and friendly user interfaces, all variable font files in a given family should have the same set of variation axes. Also, each axis must have a consistent setting of min/max value ranges accross all the files.* ๐ค **SKIP** Unfulfilled Conditions: VFs
--- Rationale --- Checks that the family name infered from the font filename matches the string at nameID 1 (NAMEID_FONT_FAMILY_NAME) if it conforms to RIBBI and otherwise checks that nameID 1 is the family name + the style name.* ๐ฅ **FAIL** Entry [FONT_FAMILY_NAME(1):WINDOWS(3)] on the "name" table: Expected "Dot Gothic 16" but got "DotGothic16". [code: mismatch] * ๐ฅ **FAIL** Entry [FONT_FAMILY_NAME(1):WINDOWS(3)] on the "name" table: Expected "Dot Gothic 16" but got "ใใใใดใทใใฏ16". [code: mismatch]
--- Rationale --- Requirements for the FULL_FONT_NAME entries in the 'name' table.* ๐ฅ **FAIL** [FULL_FONT_NAME(4):WINDOWS(3)] Expected: "Dot Gothic 16 Regular" But got: "DotGothic16 Regular" [code: bad-entry]
--- Rationale --- This setup is meant to ensure consistent rendering quality for fonts across all devices (with different rendering/hinting capabilities). Below is the snippet of instructions we expect to see in the fonts: B8 01 FF PUSHW 0x01FF 85 SCANCTRL (unconditinally turn on dropout control mode) B0 04 PUSHB 0x04 8D SCANTYPE (enable smart dropout control) "Smart dropout control" means activating rules 1, 2 and 5: Rule 1: If a pixel's center falls within the glyph outline, that pixel is turned on. Rule 2: If a contour falls exactly on a pixel's center, that pixel is turned on. Rule 5: If a scan line between two adjacent pixel centers (either vertical or horizontal) is intersected by both an on-Transition contour and an off-Transition contour and neither of the pixels was already turned on by rules 1 and 2, turn on the pixel which is closer to the midpoint between the on-Transition contour and off-Transition contour. This is "Smart" dropout control. For more detailed info (such as other rules not enabled in this snippet), please refer to the TrueType Instruction Set documentation.* ๐ฅ **FAIL** The 'prep' table does not contain TrueType instructions enabling smart dropout control. To fix, export the font with autohinting enabled, or run ttfautohint on the font, or run the `gftools fix-nonhinting` script. [code: lacks-smart-dropout]
--- Rationale --- Traditionally version 0 'gasp' tables were set so that font sizes below 8 ppem had no grid fitting but did have antialiasing. From 9-16 ppem, just grid fitting. And fonts above 17ppem had both antialiasing and grid fitting toggled on. The use of accelerated graphics cards and higher resolution screens make this approach obsolete. Microsoft's DirectWrite pushed this even further with much improved rendering built into the OS and apps. In this scenario it makes sense to simply toggle all 4 flags ON for all font sizes.* โน **INFO** These are the ppm ranges declared on the gasp table: PPM <= 65535: flag = 0x0A - Use grayscale rendering - Use smoothing along multiple axes with ClearTypeยฎ [code: ranges] * โ **WARN** The gasp range 0xFFFF value 0x0A should be set to 0x0F. [code: unset-flags]
--- Rationale --- Visually QAing thousands of glyphs by hand is tiring. Most glyphs can only be constructured in a handful of ways. This means a glyph's contour count will only differ slightly amongst different fonts, e.g a 'g' could either be 2 or 3 contours, depending on whether its double story or single story. However, a quotedbl should have 2 contours, unless the font belongs to a display family. This check currently does not cover variable fonts because there's plenty of alternative ways of constructing glyphs with multiple outlines for each feature in a VarFont. The expected contour count data for this check is currently optimized for the typical construction of glyphs in static fonts.* โ **WARN** This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct. The following glyphs do not have the recommended number of contours: Glyph name: percent Contours detected: 4 Expected: 5 Glyph name: at Contours detected: 4 Expected: 2 Glyph name: registered Contours detected: 5 Expected: 3 or 4 Glyph name: onehalf Contours detected: 1 Expected: 3 Glyph name: Agrave Contours detected: 2 Expected: 3 Glyph name: Aacute Contours detected: 2 Expected: 3 Glyph name: Egrave Contours detected: 1 Expected: 2 Glyph name: Eacute Contours detected: 1 Expected: 2 Glyph name: Igrave Contours detected: 1 Expected: 2 Glyph name: Iacute Contours detected: 1 Expected: 2 Glyph name: Ograve Contours detected: 2 Expected: 3 Glyph name: Oacute Contours detected: 2 Expected: 3 Glyph name: Ocircumflex Contours detected: 2 Expected: 3 Glyph name: eth Contours detected: 3 Expected: 2 Glyph name: Scaron Contours detected: 1 Expected: 2 Glyph name: Zcaron Contours detected: 1 Expected: 2 Glyph name: perthousand Contours detected: 5 Expected: 6 or 7 Glyph name: uni210A Contours detected: 3 Expected: 2 Glyph name: trademark Contours detected: 1 Expected: 2 Glyph name: uni255E Contours detected: 1 Expected: 2 Glyph name: uni2561 Contours detected: 1 Expected: 2 Glyph name: Aacute Contours detected: 2 Expected: 3 Glyph name: Agrave Contours detected: 2 Expected: 3 Glyph name: Eacute Contours detected: 1 Expected: 2 Glyph name: Egrave Contours detected: 1 Expected: 2 Glyph name: Iacute Contours detected: 1 Expected: 2 Glyph name: Igrave Contours detected: 1 Expected: 2 Glyph name: Oacute Contours detected: 2 Expected: 3 Glyph name: Ocircumflex Contours detected: 2 Expected: 3 Glyph name: Ograve Contours detected: 2 Expected: 3 Glyph name: Scaron Contours detected: 1 Expected: 2 Glyph name: Zcaron Contours detected: 1 Expected: 2 Glyph name: at Contours detected: 4 Expected: 2 Glyph name: eth Contours detected: 3 Expected: 2 Glyph name: onehalf Contours detected: 1 Expected: 3 Glyph name: percent Contours detected: 4 Expected: 5 Glyph name: perthousand Contours detected: 5 Expected: 6 or 7 Glyph name: registered Contours detected: 5 Expected: 3 or 4 Glyph name: trademark Contours detected: 1 Expected: 2 Glyph name: uni210A Contours detected: 3 Expected: 2 [code: contour-count]
--- Rationale --- All ligatures in a font must have corresponding caret (text cursor) positions defined in the GDEF table, otherwhise, users may experience issues with caret rendering. If using GlyphsApp or UFOs, ligature carets can be defined as anchors with names starting with 'caret_'. These can be compiled with fontmake as of version v2.4.0.* โ **WARN** GDEF table is missing, but it is mandatory to declare it on fonts that provide ligature glyphs because the caret (text cursor) positioning for each ligature must be provided in this table. [code: GDEF-missing]
--- Rationale --- The OpenType 'meta' table originated at Apple. Microsoft added it to OT with just two DataMap records: - dlng: comma-separated ScriptLangTags that indicate which scripts, or languages and scripts, with possible variants, the font is designed for - slng: comma-separated ScriptLangTags that indicate which scripts, or languages and scripts, with possible variants, the font supports The slng structure is intended to describe which languages and scripts the font overall supports. For example, a Traditional Chinese font that also contains Latin characters, can indicate Hant,Latn, showing that it supports Hant, the Traditional Chinese variant of the Hani script, and it also supports the Latn script The dlng structure is far more interesting. A font may contain various glyphs, but only a particular subset of the glyphs may be truly "leading" in the design, while other glyphs may have been included for technical reasons. Such a Traditional Chinese font could only list Hant there, showing that itโs designed for Traditional Chinese, but the font would omit Latn, because the developers donโt think the font is really recommended for purely Latin-script use. The tags used in the structures can comprise just script, or also language and script. For example, if a font has Bulgarian Cyrillic alternates in the locl feature for the cyrl BGR OT languagesystem, it could also indicate in dlng explicitly that it supports bul-Cyrl. (Note that the scripts and languages in meta use the ISO language and script codes, not the OpenType ones). This check ensures that the font has the meta table containing the slng and dlng structures. All families in the Google Fonts collection should contain the 'meta' table. Windows 10 already uses it when deciding on which fonts to fall back to. The Google Fonts API and also other environments could use the data for smarter filtering. Most importantly, those entries should be added to the Noto fonts. In the font making process, some environments store this data in external files already. But the meta table provides a convenient way to store this inside the font file, so some tools may add the data, and unrelated tools may read this data. This makes the solution much more portable and universal.* โ **WARN** This font file does not have a 'meta' table. [code: lacks-meta-table]
--- Rationale --- There are various metadata in the OpenType spec to specify if a font is monospaced or not. If the font is not truly monospaced, then no monospaced metadata should be set (as sometimes they mistakenly are...) Requirements for monospace fonts: * post.isFixedPitch - "Set to 0 if the font is proportionally spaced, non-zero if the font is not proportionally spaced (monospaced)" www.microsoft.com/typography/otspec/post.htm * hhea.advanceWidthMax must be correct, meaning no glyph's width value is greater. www.microsoft.com/typography/otspec/hhea.htm * OS/2.panose.bProportion must be set to 9 (monospace). Spec says: "The PANOSE definition contains ten digits each of which currently describes up to sixteen variations. Windows uses bFamilyType, bSerifStyle and bProportion in the font mapper to determine family type. It also uses bProportion to determine if the font is monospaced." www.microsoft.com/typography/otspec/os2.htm#pan monotypecom-test.monotype.de/services/pan2 * OS/2.xAvgCharWidth must be set accurately. "OS/2.xAvgCharWidth is used when rendering monospaced fonts, at least by Windows GDI" http://typedrawers.com/discussion/comment/15397/#Comment_15397 Also we should report an error for glyphs not of average width. Please also note: Thomas Phinney told us that a few years ago (as of December 2019), if you gave a font a monospace flag in Panose, Microsoft Word would ignore the actual advance widths and treat it as monospaced. Source: https://typedrawers.com/discussion/comment/45140/#Comment_45140* โ **WARN** Font is monospaced but 642 glyphs (6.86%) have a different width. You should check the widths of: ['space', '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', 'yen', 'bracketright', 'asciicircum', 'underscore', 'grave', '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', 'brokenbar', 'braceright', 'tilde', 'quoteright', 'backslash', 'quoteleft', 'bar', 'asciitilde', 'exclamdown', 'cent', 'sterling', 'fraction', 'florin', 'section', 'currency', 'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'endash', 'dagger.prop', 'daggerdbl.prop', 'periodcentered', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis.full', 'perthousand.full', 'questiondown', 'acutecomb', 'circumflex', 'macron', 'uni0306', 'uni0307', 'uni0308', 'ring', 'cedilla', 'uni030B', 'uni0328', 'uni030C', 'emdash', 'AE', 'ordfeminine', 'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae', 'dotlessi', 'lslash', 'oslash', 'oe', 'germandbls', 'uni00AD', 'copyright', 'logicalnot', 'registered', 'degree', 'plusminus', 'uni00B2', 'uni00B3', 'uni00B5', 'uni00B9', 'onequarter', 'onehalf', 'threequarters', 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', 'Adieresis', 'Aring', 'Ccedilla', 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Eth', 'Ntilde', 'Ograve', 'Oacute', 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', 'Ugrave', 'Uacute', 'Ucircumflex', 'Udieresis', 'Yacute', 'Thorn', 'agrave', 'aacute', 'acircumflex', 'atilde', 'adieresis', 'aring', 'ccedilla', 'egrave', 'eacute', 'ecircumflex', 'edieresis', 'igrave', 'iacute', 'icircumflex', 'idieresis', 'eth', 'ntilde', 'ograve', 'oacute', 'ocircumflex', 'otilde', 'odieresis', 'divide', 'ugrave', 'uacute', 'ucircumflex', 'udieresis', 'yacute', 'thorn', 'ydieresis', 'Scaron', 'Ydieresis', 'Zcaron', 'uni0305', 'scaron', 'trademark', 'zcaron', 'zero.zero', 'uni2002', 'exclam.half', 'quotedblright.half', 'numbersign.half', 'dollar.half', 'percent.half', 'ampersand.half', 'quoteright.half', 'parenleft.half', 'parenright.half', 'asterisk.half', 'plus.half', 'comma.half', 'hyphen.half', 'period.half', 'slash.half', 'zero.half', 'one.half', 'two.half', 'three.half', 'four.half', 'five.half', 'six.half', 'seven.half', 'eight.half', 'nine.half', 'colon.half', 'semicolon.half', 'less.half', 'equal.half', 'greater.half', 'question.half', 'at.half', 'A.half', 'B.half', 'C.half', 'D.half', 'E.half', 'F.half', 'G.half', 'H.half', 'I.half', 'J.half', 'K.half', 'L.half', 'M.half', 'N.half', 'O.half', 'P.half', 'Q.half', 'R.half', 'S.half', 'T.half', 'U.half', 'V.half', 'W.half', 'X.half', 'Y.half', 'Z.half', 'bracketleft.half', 'yen.half', 'bracketright.half', 'asciicircum.half', 'underscore.half', 'quoteleft.half', 'a.half', 'b.half', 'c.half', 'd.half', 'e.half', 'f.half', 'g.half', 'h.half', 'i.half', 'j.half', 'k.half', 'l.half', 'm.half', 'n.half', 'o.half', 'p.half', 'q.half', 'r.half', 's.half', 't.half', 'u.half', 'v.half', 'w.half', 'x.half', 'y.half', 'z.half', 'braceleft.half', 'uniFFE8', 'braceright.half', 'macron.half', 'spacekata.half', 'uniFF61', 'uniFF62', 'uniFF63', 'uniFF64', 'uniFF65', 'uniFF66', 'uniFF67', 'uniFF68', 'uniFF69', 'uniFF6A', 'uniFF6B', 'uniFF6C', 'uniFF6D', 'uniFF6E', 'uniFF6F', 'uniFF70', 'uniFF71', 'uniFF72', 'uniFF73', 'uniFF74', 'uniFF75', 'uniFF76', 'uniFF77', 'uniFF78', 'uniFF79', 'uniFF7A', 'uniFF7B', 'uniFF7C', 'uniFF7D', 'uniFF7E', 'uniFF7F', 'uniFF80', 'uniFF81', 'uniFF82', 'uniFF83', 'uniFF84', 'uniFF85', 'uniFF86', 'uniFF87', 'uniFF88', 'uniFF89', 'uniFF8A', 'uniFF8B', 'uniFF8C', 'uniFF8D', 'uniFF8E', 'uniFF8F', 'uniFF90', 'uniFF91', 'uniFF92', 'uniFF93', 'uniFF94', 'uniFF95', 'uniFF96', 'uniFF97', 'uniFF98', 'uniFF99', 'uniFF9A', 'uniFF9B', 'uniFF9C', 'uniFF9D', 'uniFF9E', 'uniFF9F', 'grave.half', 'uni30F0.half', 'uni30F1.half', 'uni30EE.half', 'uni30F5.half', 'uni30F6.half', 'uni30F4.half', 'uni30AC.half', 'uni30AE.half', 'uni30B0.half', 'uni30B2.half', 'uni30B4.half', 'uni30B6.half', 'uni30B8.half', 'uni30BA.half', 'uni30BC.half', 'uni30BE.half', 'uni30C0.half', 'uni30C2.half', 'uni30C5.half', 'uni30C7.half', 'uni30C9.half', 'uni30D0.half', 'uni30D1.half', 'uni30D3.half', 'uni30D4.half', 'uni30D6.half', 'uni30D7.half', 'uni30D9.half', 'uni30DA.half', 'uni30DC.half', 'uni30DD.half', 'space.half', 'uni301D.half', 'uni301F.half', 'uni2500.half', 'uni2501.half', 'uni2502.half', 'uni2503.half', 'uni2504.half', 'uni2505.half', 'uni2506.half', 'uni2507.half', 'uni2508.half', 'uni2509.half', 'uni250A.half', 'uni250B.half', 'uni250C.half', 'uni250D.half', 'uni250E.half', 'uni250F.half', 'uni2510.half', 'uni2511.half', 'uni2512.half', 'uni2513.half', 'uni2514.half', 'uni2515.half', 'uni2516.half', 'uni2517.half', 'uni2518.half', 'uni2519.half', 'uni251A.half', 'uni251B.half', 'uni251C.half', 'uni251D.half', 'uni251E.half', 'uni251F.half', 'uni2520.half', 'uni2521.half', 'uni2522.half', 'uni2523.half', 'uni2524.half', 'uni2525.half', 'uni2526.half', 'uni2527.half', 'uni2528.half', 'uni2529.half', 'uni252A.half', 'uni252B.half', 'uni252C.half', 'uni252D.half', 'uni252E.half', 'uni252F.half', 'uni2530.half', 'uni2531.half', 'uni2532.half', 'uni2533.half', 'uni2534.half', 'uni2535.half', 'uni2536.half', 'uni2537.half', 'uni2538.half', 'uni2539.half', 'uni253A.half', 'uni253B.half', 'uni253C.half', 'uni253D.half', 'uni253E.half', 'uni253F.half', 'uni2540.half', 'uni2541.half', 'uni2542.half', 'uni2543.half', 'uni2544.half', 'uni2545.half', 'uni2546.half', 'uni2547.half', 'uni2548.half', 'uni2549.half', 'uni254A.half', 'uni254B.half', 'acute.half', 'dieresis.half', 'quotedblleft.half', 'uni3014.half', 'uni3015.half', 'uni3008.half', 'uni3009.half', 'uni300A.half', 'uni300B.half', 'uni300E.half', 'uni300F.half', 'uni3010.half', 'uni3011.half', 'endash.half', 'spacehira.half', 'uni3092.half', 'uni3041.half', 'uni3043.half', 'uni3045.half', 'uni3047.half', 'uni3049.half', 'uni3083.half', 'uni3085.half', 'uni3087.half', 'uni3063.half', 'uni3042.half', 'uni3044.half', 'uni3046.half', 'uni3048.half', 'uni304A.half', 'uni304B.half', 'uni304D.half', 'uni304F.half', 'uni3051.half', 'uni3053.half', 'uni3055.half', 'uni3057.half', 'uni3059.half', 'uni305B.half', 'uni305D.half', 'uni305F.half', 'uni3061.half', 'uni3064.half', 'uni3066.half', 'uni3068.half', 'uni306A.half', 'uni306B.half', 'uni306C.half', 'uni306D.half', 'uni306E.half', 'uni306F.half', 'uni3072.half', 'uni3075.half', 'uni3078.half', 'uni307B.half', 'uni307E.half', 'uni307F.half', 'uni3080.half', 'uni3081.half', 'uni3082.half', 'uni3084.half', 'uni3086.half', 'uni3088.half', 'uni3089.half', 'uni308A.half', 'uni308B.half', 'uni308C.half', 'uni308D.half', 'uni308F.half', 'uni3093.half', 'uni3090.half', 'uni3091.half', 'uni308E.half', 'uni304C.half', 'uni304E.half', 'uni3050.half', 'uni3052.half', 'uni3054.half', 'uni3056.half', 'uni3058.half', 'uni305A.half', 'uni305C.half', 'uni305E.half', 'uni3060.half', 'uni3062.half', 'uni3065.half', 'uni3067.half', 'uni3069.half', 'uni3070.half', 'uni3071.half', 'uni3073.half', 'uni3074.half', 'uni3076.half', 'uni3077.half', 'uni3079.half', 'uni307A.half', 'uni307C.half', 'uni307D.half', 'Adieresis.half', 'ugrave.half', 'eacute.half', 'iacute.half', 'germandbls.half', 'ccedilla.half', 'Ccedilla.half', 'Ntilde.half', 'ntilde.half', 'cent.half', 'sterling.half', 'oacute.half', 'uacute.half', 'exclamdown.half', 'questiondown.half', 'one_fraction_two.nut.half', 'Odieresis.half', 'Udieresis.half', 'adieresis.half', 'edieresis.half', 'idieresis.half', 'odieresis.half', 'udieresis.half', 'acircumflex.half', 'ecircumflex.half', 'icircumflex.half', 'ocircumflex.half', 'ucircumflex.half', 'agrave.half', 'egrave.half', 'triagup.half', 'aacute.half', 'asciitilde.half', 'zero.zero.half', 'logicalnot.half', 'backslash.half', 'CR', 'acute', 'dieresis', 'uni2215', 'Euro', 'uni2074', 'minus', 'uni00A0'] [code: mono-outliers]
--- Rationale --- Microsoft Office 2013 and below products expect fonts to have a digital signature declared in a DSIG table in order to implement OpenType features. The EOL date for Microsoft Office 2013 products is 4/11/2023. This issue does not impact Microsoft Office 2016 and above products. As we approach the EOL date, it is now considered better to completely remove the table. But if you still want your font to support OpenType features on Office 2013, then you may find it handy to add a fake signature on a dummy DSIG table by running one of the helper scripts provided at https://github.com/googlefonts/gftools Reference: https://github.com/googlefonts/fontbakery/issues/1845* โ **WARN** This font has a digital signature (DSIG table) which is only required - even if only a dummy placeholder - on old programs like MS Office 2013 in order to work properly. The current recommendation is to completely remove the DSIG table. [code: found-DSIG]
--- Rationale --- The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font family webpage on the Google Fonts website. For that reason, all hyperlinks in it must be properly working.* ๐ค **SKIP** Unfulfilled Conditions: description_html
--- Rationale --- The contents of the DESCRIPTION.en-us.html file are displayed on the Google Fonts website in the about section of each font family specimen page. Since all of the Google Fonts collection is composed of libre-licensed fonts, this check enforces a policy that there must be a hypertext link in that page directing users to the repository where the font project files are made available. Such hosting is typically done on sites like Github, Gitlab, GNU Savannah or any other git-based version control service.* ๐ค **SKIP** Unfulfilled Conditions: description_html
--- Rationale --- Sometimes people write malformed HTML markup. This check should ensure the file is good. Additionally, when packaging families for being pushed to the `google/fonts` git repo, if there is no DESCRIPTION.en_us.html file, some older versions of the `add_font.py` tool insert a dummy description file which contains invalid html. This file needs to either be replaced with an existing description file or edited by hand.* ๐ค **SKIP** Unfulfilled Conditions: description
--- Rationale --- The fonts.google.com catalog specimen pages 2016 to 2020 were placed in a narrow area of the page. That meant a maximum limit of 1,000 characters was good, so that the narrow column did not extent that section of the page to be too long. But with the "v4" redesign of 2020, the specimen pages allow for longer texts without upsetting the balance of the page. So currently the limit before warning is 2,000 characters.* ๐ค **SKIP** Unfulfilled Conditions: description
--- Rationale --- Some older text-handling tools sometimes misbehave if the last line of data in a text file is not terminated with a newline character (also known as '\n'). We know that this is a very small detail, but for the sake of keeping all DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts collection, we chose to adopt the practice of placing this final linebreak char on them.* ๐ค **SKIP** Unfulfilled Conditions: description
--- Rationale --- The purpose of this check is to ensure that the METADATA.pb file is not malformed.* ๐ค **SKIP** Font family at '.' lacks a METADATA.pb file. [code: file-not-found]
--- Rationale --- For a while the string "Multiple designers" was used as a placeholder on METADATA.pb files. We should replace all those instances with actual designer names so that proper credits are displayed on the Google Fonts family specimen pages. If there's more than a single designer, the designer names must be separated by commas.* ๐ค **SKIP** Unfulfilled Conditions: family_metadata
--- Rationale --- We must use commas instead of forward slashes because the server-side code at the fonts.google.com directory will segment the string on the commas into a list of names and display the first item in the list as the "principal designer" while the remaining names are identified as "contributors". See eg https://fonts.google.com/specimen/Rubik* ๐ค **SKIP** Unfulfilled Conditions: family_metadata
--- Rationale --- The set of font binaries available, except the ones on a "static" subdir, must match exactly those declared on the METADATA.pb file. Also, to avoid confusion, we expect that font files (other than statics) are not placed on subdirectories.* ๐ค **SKIP** Unfulfilled Conditions: family_metadata
--- Rationale --- There are only five acceptable values for the category field in a METADATA.pb file: - MONOSPACE - SANS_SERIF - SERIF - DISPLAY - HANDWRITING This check is meant to avoid typos in this field.* ๐ค **SKIP** Unfulfilled Conditions: family_metadata
--- Rationale --- Check METADATA.pb file includes the same subsets as the family in production.* ๐ค **SKIP** Unfulfilled Conditions: family_metadata
--- Rationale --- The expected pattern for the copyright string adheres to the following rules: * It must say "Copyright" followed by a 4 digit year (optionally followed by a hyphen and another 4 digit year) * Then it must say "The <familyname> Project Authors" * And within parentheses, a URL for a git repository must be provided * The check is case insensitive and does not validate whether the familyname is correct, even though we'd expect it is (and we may soon update the check to validate that aspect as well!) Here is an example of a valid copyright string: "Copyright 2017 The Archivo Black Project Authors (https://github.com/Omnibus-Type/ArchivoBlack)"* ๐ค **SKIP** Unfulfilled Conditions: font_metadata
--- Rationale --- Note: This check only looks for files in the current directory. Font files in subdirectories are checked by these other two checks: - com.google.fonts/check/metadata/undeclared_fonts - com.google.fonts/check/repo/vf_has_static_fonts We may want to merge them all into a single check.* ๐ค **SKIP** Unfulfilled Conditions: family_metadata
--- Rationale --- Check METADATA.pb font weights are correct. For static fonts, the metadata weight should be the same as the static font's OS/2 usWeightClass. For variable fonts, the weight value should be 400 if the font's wght axis range includes 400, otherwise it should be the value closest to 400.* ๐ค **SKIP** Unfulfilled Conditions: font_metadata
--- Rationale --- Google Fonts may serve static fonts which have been generated from variable fonts. This test will attempt to generate a static ttf using fontTool's varLib mutator. The target font will be the mean of each axis e.g: **VF font axes** - min weight, max weight = 400, 800 - min width, max width = 50, 100 **Target Instance** - weight = 600 - width = 75* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font
--- Rationale --- Not having a HVAR table can lead to costly text-layout operations on some platforms, which we want to avoid. So, all variable fonts on the Google Fonts collection should have an HVAR with valid values. More info on the HVAR table can be found at: https://docs.microsoft.com/en-us/typography/opentype/spec /otvaroverview#variation-data-tables-and-miscellaneous-requirements* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font
--- Rationale --- The purpose of this check is to make sure that all name entries referenced by variable font instances do exist in the name table.* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font
--- Rationale --- Named instances must be present in all variable fonts in order not to frustrate the users' typical expectations of a traditional static font workflow.* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font
--- Rationale --- The named instances on the weight axis of a variable font must have coordinates that are multiples of 100 on the design space.* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font
--- Rationale --- Hinted fonts must have head table flag bit 3 set. Per https://docs.microsoft.com/en-us/typography/opentype/spec/head, bit 3 of Head::flags decides whether PPEM should be rounded. This bit should always be set for hinted fonts. Note: Bit 3 = Force ppem to integer values for all internal scaler math; May use fractional ppem sizes if this bit is clear;* ๐ค **SKIP** Unfulfilled Conditions: is_hinted
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* ๐ค **SKIP** Unfulfilled Conditions: has_kerning_info
--- Rationale --- Variable font family directories kept in the google/fonts git repo may include a static/ subdir containing static fonts. These files are meant to be served for users that still lack support for variable fonts in their web browsers.* ๐ค **SKIP** Unfulfilled Conditions: gfonts_repo_structure, is_variable_font
--- Rationale --- If a family has been pushed using the gftools packager, we must check that all the required fields in the upstream.yaml file have been populated.* ๐ค **SKIP** Unfulfilled Conditions: upstream_yaml
--- Rationale --- If the family already exists on Google Fonts, we need to ensure that the checked family's vertical metrics are similar. This check will test the following schema which was outlined in Fontbakery issue #1162 [1]: - The family should visually have the same vertical metrics as the Regular style hosted on Google Fonts. - If the family on Google Fonts has differing hhea and typo metrics, the family being checked should use the typo metrics for both the hhea and typo entries. - If the family on Google Fonts has use typo metrics not enabled and the family being checked has it enabled, the hhea and typo metrics should use the family on Google Fonts winAscent and winDescent values. - If the upms differ, the values must be scaled so the visual appearance is the same. [1] https://github.com/googlefonts/fontbakery/issues/1162* ๐ค **SKIP** Unfulfilled Conditions: regular_remote_style, not is_cjk_font
--- Rationale --- Check CJK family has the same vertical metrics as the same family hosted on Google Fonts.* ๐ค **SKIP** Unfulfilled Conditions: regular_remote_style
--- Rationale --- This check's purpose is to detect duplicate named instances names in a given variable font. Repeating instance names may be the result of instances for several VF axes defined in `fvar`, but since currently only weight+italic tokens are allowed in instance names as per GF specs, they ended up repeating. Instead, only a base set of fonts for the most default representation of the family can be defined through instances in the `fvar` table, all other instances will have to be left to access through the `STAT` table.* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font
--- Rationale --- The 'ital' and 'slnt' axes are not supported yet in Google Chrome. For the time being, we need to ensure that VFs do not contain either of these axes. Once browser support is better, we can deprecate this check. For more info regarding browser support, see: https://arrowtype.github.io/vf-slnt-test/* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font
--- Rationale --- Each axis range in a METADATA.pb file must be registered, and within the bounds of the axis definition in the Google Fonts Axis Registry, available at https://github.com/google/fonts/tree/main/axisregistry* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, family_metadata
--- Rationale --- Ensure all axes in a METADATA.pb file are registered in the Google Fonts Axis Registry, available at https://github.com/google/fonts/tree/main/axisregistry Why does Google Fonts have its own Axis Registry? We support a superset of the OpenType axis registry axis set, and use additional metadata for each axis. Axes present in a font file but not in this registry will not function via our API. No variable font is expected to support all of the axes here. Any font foundry or distributor library that offers variable fonts has a implicit, latent, de-facto axis registry, which can be extracted by scanning the library for axes' tags, labels, and min/def/max values. While in 2016 Microsoft originally offered to include more axes in the OpenType 1.8 specification (github.com/microsoft/OpenTypeDesignVariationAxisTags), as of August 2020, this effort has stalled. We hope more foundries and distributors will publish documents like this that make their axes explicit, to encourage of adoption of variable fonts throughout the industry, and provide source material for a future update to the OpenType specification's axis registry.* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, family_metadata
--- Rationale --- Check that axis defaults have a corresponding fallback name registered at the Google Fonts Axis Registry, available at https://github.com/google/fonts/tree/main/axisregistry This is necessary for the following reasons: To get ZIP files downloads on Google Fonts to be accurate โ otherwise the chosen default font is not generated. The Newsreader family, for instance, has a default value on the 'opsz' axis of 16pt. If 16pt was not a registered fallback position, then the ZIP file would instead include another position as default (such as 14pt). For the Variable fonts to display the correct location on the specimen page. For VF with no weight axis to be displayed at all. For instance, Ballet, which has no weight axis, was not appearing in sandbox because default position on 'opsz' axis was 16pt, and it was not yet a registered fallback positon.* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font
--- Rationale --- Check that particle names and values on STAT table match the fallback names in each axis entry at the Google Fonts Axis Registry, available at https://github.com/google/fonts/tree/main/axisregistry* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font
--- Rationale --- All font variation axes present in the font files must be properly declared on METADATA.pb so that they can be served by the GFonts API.* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, family_metadata
--- Rationale --- In some cases we've seen designer names and other fields with escaped strings in METADATA files. Nowadays the strings can be full unicode strings and do not need escaping.* ๐ค **SKIP** Unfulfilled Conditions: metadata_file
--- Rationale --- Google Fonts has a catalog of designers. This check ensures that the online entries of the catalog can be found based on the designer names listed on the METADATA.pb file. It also validates the URLs and file formats are all correctly set.* ๐ค **SKIP** Unfulfilled Conditions: family_metadata
--- Rationale --- Most variable fonts should include an avar table to correctly define axes progression rates. For example, a weight axis from 0% to 100% doesn't map directly to 100 to 1000, because a 10% progression from 0% may be too much to define the 200, while 90% may be too little to define the 900. If the progression rates of axes is linear, this check can be ignored. Fontmake will also skip adding an avar table if the progression rates are linear. However, we still recommend designers visually proof each instance is at the desired weight, width etc.* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font
--- Rationale --- We want to ensure that any significant changes to the font family are properly mentioned in the DESCRIPTION file. In general, it means that the contents of the DESCRIPTION.en_us.html file will typically change if when font files are updated. Please treat this check as a reminder to do so whenever appropriate!* ๐ค **SKIP** Unfulfilled Conditions: description
--- Rationale --- All fonts on the Google Fonts collection should have OS/2.fsSelection bit 7 (USE_TYPO_METRICS) set. This requirement is part of the vertical metrics scheme established as a Google Fonts policy aiming at a common ground supported by all major font rendering environments. For more details, read: https://github.com/googlefonts/gf-docs/blob/main/VerticalMetrics/README.md Below is the portion of that document that is most relevant to this check: Use_Typo_Metrics must be enabled. This will force MS Applications to use the OS/2 Typo values instead of the Win values. By doing this, we can freely set the Win values to avoid clipping and control the line height with the typo values. It has the added benefit of future line height compatibility. When a new script is added, we simply change the Win values to the new yMin and yMax, without needing to worry if the line height have changed.* ๐ค **SKIP** Unfulfilled Conditions: not is_cjk_font
--- Rationale --- A font's winAscent and winDescent values should be greater than the head table's yMax, abs(yMin) values. If they are less than these values, clipping can occur on Windows platforms (https://github.com/RedHatBrand/Overpass/issues/33). If the font includes tall/deep writing systems such as Arabic or Devanagari, the winAscent and winDescent can be greater than the yMax and abs(yMin) to accommodate vowel marks. When the win Metrics are significantly greater than the upm, the linespacing can appear too loose. To counteract this, enabling the OS/2 fsSelection bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 typo values instead. This means the font developer can control the linespacing with the typo values, whilst avoiding clipping by setting the win values to values greater than the yMax and abs(yMin).* ๐ค **SKIP** Unfulfilled Conditions: not is_cjk_font
--- Rationale --- OS/2 and hhea vertical metric values should match. This will produce the same linespacing on Mac, GNU+Linux and Windows. - Mac OS X uses the hhea values. - Windows uses OS/2 or Win, depending on the OS or fsSelection bit value. When OS/2 and hhea vertical metrics match, the same linespacing results on macOS, GNU+Linux and Windows. Unfortunately as of 2018, Google Fonts has released many fonts with vertical metrics that don't match in this way. When we fix this issue in these existing families, we will create a visible change in line/paragraph layout for either Windows or macOS users, which will upset some of them. But we have a duty to fix broken stuff, and inconsistent paragraph layout is unacceptably broken when it is possible to avoid it. If users complain and prefer the old broken version, they have the freedom to take care of their own situation.* ๐ค **SKIP** Unfulfilled Conditions: not is_cjk_font
--- Rationale --- On the STAT table, the "Italic" keyword must not be used on AxisValues for variation axes other than 'ital'.* ๐ค **SKIP** Unfulfilled Conditions: STAT_table
--- Rationale --- We may want all fonts within a super-family (all sibling families) to have the same vertical metrics so their line spacing is consistent across the super-family. This is an experimental extended version of com.google.fonts/check/family/vertical_metrics and for now it will only result in WARNs.* ๐ค **SKIP** Sibling families were not detected.
--- Rationale --- Per Bureau of Indian Standards every font supporting one of the official Indian languages needs to include Unicode Character โโนโ (U+20B9) Indian Rupee Sign.* ๐ค **SKIP** Unfulfilled Conditions: is_indic_font
--- Rationale --- Per "The Type 2 Charstring Format, Technical Note #5177", the "Subr nesting, stack limit" is 10.* ๐ค **SKIP** Unfulfilled Conditions: is_cff
--- Rationale --- Per "The CFF2 CharString Format", the "Subr nesting, stack limit" is 10.* ๐ค **SKIP** Unfulfilled Conditions: is_cff2
--- Rationale --- The 'dotsection' operator and the use of 'endchar' to build accented characters from the Adobe Standard Encoding Character Set ("seac") are deprecated in CFF. Adobe recommends repairing any fonts that use these, especially endchar-as-seac, because a rendering issue was discovered in Microsoft Word with a font that makes use of this operation. The check treats that useage as a FAIL. There are no known ill effects of using dotsection, so that check is a WARN.* ๐ค **SKIP** Unfulfilled Conditions: is_cff
--- Rationale --- The PostScript name entries in the font's 'name' table should match the FontName string in the 'CFF ' table. The 'CFF ' table has a lot of information that is duplicated in other tables. This information should be consistent across tables, because there's no guarantee which table an app will get the data from.* ๐ค **SKIP** Unfulfilled Conditions: is_cff
--- Rationale --- Glyphs in the GDEF mark glyph class should be non-spacing. Spacing glyphs in the GDEF mark glyph class may have incorrect anchor positioning that was only intended for building composite glyphs during design.* ๐ค **SKIP** Font does not declare an optional "GDEF" table or has any GDEF glyph class definition.
--- Rationale --- Mark characters should be in the GDEF mark glyph class.* ๐ค **SKIP** Font does not declare an optional "GDEF" table or has any GDEF glyph class definition.
--- Rationale --- Glyphs in the GDEF mark glyph class become non-spacing and may be repositioned if they have mark anchors. Only combining mark glyphs should be in that class. Any non-mark glyph must not be in that class, in particular spacing glyphs.* ๐ค **SKIP** Font does not declare an optional "GDEF" table or has any GDEF glyph class definition.
--- Rationale --- According to the Open-Type spec's registered design-variation tag 'wght' available at https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght If a variable font has a 'wght' (Weight) axis, then the coordinate of its 'Regular' instance is required to be 400.* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, regular_wght_coord
--- Rationale --- According to the Open-Type spec's registered design-variation tag 'wdth' available at https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth If a variable font has a 'wdth' (Width) axis, then the coordinate of its 'Regular' instance is required to be 100.* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, regular_wdth_coord
--- Rationale --- According to the Open-Type spec's registered design-variation tag 'slnt' available at https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_slnt If a variable font has a 'slnt' (Slant) axis, then the coordinate of its 'Regular' instance is required to be zero.* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, regular_slnt_coord
--- Rationale --- According to the Open-Type spec's registered design-variation tag 'ital' available at https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_ital If a variable font has a 'ital' (Italic) axis, then the coordinate of its 'Regular' instance is required to be zero.* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, regular_ital_coord
--- Rationale --- According to the Open-Type spec's registered design-variation tag 'opsz' available at https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_opsz If a variable font has an 'opsz' (Optical Size) axis, then the coordinate of its 'Regular' instance is recommended to be a value in the range 10 to 16.* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, regular_opsz_coord
--- Rationale --- The Open-Type spec's registered design-variation tag 'wght' available at https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght does not specify a required value for the 'Bold' instance of a variable font. But Dave Crossland suggested that we should enforce a required value of 700 in this case.* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, bold_wght_coord
--- Rationale --- According to the Open-Type spec's registered design-variation tag 'wght' available at https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght On the 'wght' (Weight) axis, the valid coordinate range is 1-1000.* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font
--- Rationale --- According to the Open-Type spec's registered design-variation tag 'wdth' available at https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth On the 'wdth' (Width) axis, the valid coordinate range is 1-1000* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font
--- Rationale --- The OpenType spec says at https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt that: [...] the scale for the Slant axis is interpreted as the angle of slant in counter-clockwise degrees from upright. This means that a typical, right-leaning oblique design will have a negative slant value. This matches the scale used for the italicAngle field in the post table.* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, slnt_axis
--- Rationale --- cording to the OpenType spec, there must be an Axis Record for every axis defined in the fvar table. tps://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-records* ๐ค **SKIP** Unfulfilled Conditions: is_variable_font
--- Rationale --- Fonts with complex layout rules can benefit from regression tests to ensure that the rules are behaving as designed. This checks runs a shaping test suite and compares expected shaping against actual shaping, reporting any differences. Shaping test suites should be written by the font engineer and referenced in the fontbakery configuration file. For more information about write shaping test files and how to configure fontbakery to read the shaping test suites, see https://simoncozens.github.io/tdd-for-otl/* ๐ค **SKIP** Shaping test directory not defined in configuration file
--- Rationale --- Fonts with complex layout rules can benefit from regression tests to ensure that the rules are behaving as designed. This checks runs a shaping test suite and reports if any glyphs are generated in the shaping which should not be produced. (For example, .notdef glyphs, visible viramas, etc.) Shaping test suites should be written by the font engineer and referenced in the fontbakery configuration file. For more information about write shaping test files and how to configure fontbakery to read the shaping test suites, see https://simoncozens.github.io/tdd-for-otl/* ๐ค **SKIP** Shaping test directory not defined in configuration file
--- Rationale --- Fonts with complex layout rules can benefit from regression tests to ensure that the rules are behaving as designed. This checks runs a shaping test suite and reports instances where the glyphs collide in unexpected ways. Shaping test suites should be written by the font engineer and referenced in the fontbakery configuration file. For more information about write shaping test files and how to configure fontbakery to read the shaping test suites, see https://simoncozens.github.io/tdd-for-otl/* ๐ค **SKIP** Shaping test directory not defined in configuration file
--- Rationale --- This check is merely informative, displaying and useful comparison of filesizes of hinted versus unhinted font files.* โน **INFO** Hinting filesize impact: | | DotGothic16-Regular.ttf | |:------------- | ---------------:| | Dehinted Size | 2.0Mb | | Hinted Size | 2.0Mb | | Increase | 0 bytes | | Change | 0.0 % | [code: size-impact]
--- Rationale --- This check finds which version of ttfautohint was used, by inspecting name table entries and then finds which version of ttfautohint is currently installed in the system.* โน **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 1.100'] [code: version-not-detected]
--- Rationale --- The EPAR table is/was a way of expressing common licensing permissions and restrictions in metadata; while almost nothing supported it, Dave Crossland wonders that adding it to everything in Google Fonts could help make it more popular. More info is available at: https://davelab6.github.io/epar/* โน **INFO** EPAR table not present in font. To learn more see https://github.com/googlefonts/fontbakery/issues/818 [code: lacks-EPAR]
--- Rationale --- The git sha1 tagging and dev/release features of Source Foundry `font-v` tool are awesome and we would love to consider upstreaming the approach into fontmake someday. For now we only emit a WARN if a given font does not yet follow the experimental versioning style, but at some point we may start enforcing it.* โน **INFO** Version string is: "Version 1.100" 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" [code: bad-format]
--- Rationale --- Depending on the typeface and coverage of a font, certain tables are recommended for optimum quality. For example, the performance of a non-linear font is improved if the VDMX, LTSH, and hdmx tables are present. Non-monospaced Latin fonts should have a kern table. A gasp table is necessary if a designer wants to influence the sizes at which grayscaling is used under Windows. Etc.* โน **INFO** This font contains the following optional tables: - loca - BASE - GPOS - GSUB - gasp - vhea - vmtx [code: optional-tables] * ๐ **PASS** Font contains all required tables.
--- Rationale --- This is a merely informative check that lists all sibling families detected by fontbakery. Only the fontfiles in these directories will be considered in superfamily-level checks.* โน **INFO** . [code: family-path]
--- Rationale --- A font's filename must be composed in the following manner: <familyname>-<stylename>.ttf - Nunito-Regular.ttf, - Oswald-BoldItalic.ttf Variable fonts must list the axis tags in alphabetical order in square brackets and separated by commas: - Roboto[wdth,wght].ttf - Familyname-Italic[wght].ttf* ๐ **PASS** DotGothic16-Regular.ttf is named canonically.
--- Rationale --- The fsType in the OS/2 table is a legacy DRM-related field. Fonts in the Google Fonts collection must have it set to zero (also known as "Installable Embedding"). This setting indicates that the fonts can be embedded in documents and permanently installed by applications on remote systems. More detailed info is available at: https://docs.microsoft.com/en-us/typography/opentype/spec/os2#fstype* ๐ **PASS** OS/2 fsType is properly set to zero.
--- Rationale --- Microsoft keeps a list of font vendors and their respective contact info. This list is updated regularly and is indexed by a 4-char "Vendor ID" which is stored in the achVendID field of the OS/2 table. Registering your ID is not mandatory, but it is a good practice since some applications may display the type designer / type foundry contact info on some dialog and also because that info will be visible on Microsoft's website: https://docs.microsoft.com/en-us/typography/vendors/ This check verifies whether or not a given font's vendor ID is registered in that list or if it has some of the default values used by the most common font editors. Each new FontBakery release includes a cached copy of that list of vendor IDs. If you registered recently, you're safe to ignore warnings emitted by this check, since your ID will soon be included in one of our upcoming releases.* ๐ **PASS** OS/2 VendorID 'FWKS' looks good!
--- Rationale --- Google Fonts expects that fonts in its collection support at least the minimal set of characters defined in the `GF-latin-core` glyph-set.* ๐ **PASS** OK
--- Rationale --- Google Fonts expects variable fonts, static ttfs and static otfs to have differing OS/2 usWeightClass values. For Variable Fonts, Thin-Black must be 100-900 For static ttfs, Thin-Black can be 100-900 or 250-900 For static otfs, Thin-Black must be 250-900 If static otfs are set lower than 250, text may appear blurry in legacy Windows applications. Glyphsapp users can change the usWeightClass value of an instance by adding a 'weightClass' customParameter.* ๐ **PASS** OS/2 usWeightClass is good
--- Rationale --- An OFL.txt file's first line should be the font copyright e.g: "Copyright 2019 The Montserrat Project Authors (https://github.com/julietaula/montserrat)"* ๐ **PASS** looks good
--- Rationale --- Check OFL body text is correct. Often users will accidently delete parts of the body text.* ๐ **PASS** OFL license body text is correct
--- Rationale --- A known licensing description must be provided in the NameID 14 (LICENSE DESCRIPTION) entries of the name table. The source of truth for this check (to determine which license is in use) is a file placed side-by-side to your font project including the licensing terms. Depending on the chosen license, one of the following string snippets is expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the name table: - "This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: https://scripts.sil.org/OFL" - "Licensed under the Apache License, Version 2.0" - "Licensed under the Ubuntu Font Licence 1.0." Currently accepted licenses are Apache or Open Font License. For a small set of legacy families the Ubuntu Font License may be acceptable as well. When in doubt, please choose OFL for new font projects.* ๐ **PASS** Licensing entry on name table is correctly set.
--- Rationale --- A known license URL must be provided in the NameID 14 (LICENSE INFO URL) entry of the name table. The source of truth for this check is the licensing text found on the NameID 13 entry (LICENSE DESCRIPTION). The string snippets used for detecting licensing terms are: - "This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: https://scripts.sil.org/OFL" - "Licensed under the Apache License, Version 2.0" - "Licensed under the Ubuntu Font Licence 1.0." Currently accepted licenses are Apache or Open Font License. For a small set of legacy families the Ubuntu Font License may be acceptable as well. When in doubt, please choose OFL for new font projects.* ๐ **PASS** Font has a valid license URL in NAME table.
--- Rationale --- An old FontLab version had a bug which caused it to store copyright notices in nameID 10 entries. In order to detect those and distinguish them from actual legitimate usage of this name table entry, we expect that such strings do not exceed a reasonable length of 200 chars. Longer strings are likely instances of the FontLab bug.* ๐ **PASS** All description name records have reasonably small lengths.
--- Rationale --- Font family names which start with a numeral are often not discoverable in Windows applications.* ๐ **PASS** Font family name first character is not a digit.
--- Rationale --- The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6). For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be the same in CFF fonts which also have this requirement in the OpenType spec. Note: A common place where we find non-ASCII strings is on name table entries with NameID > 18, which are expressly for localising the ASCII-only IDs into Hindi / Arabic / etc.* ๐ **PASS** None of the ASCII-only NAME table entries contain non-ASCII characteres.
--- Rationale --- Even though the OpenType spec allows unitsPerEm to be any value between 16 and 16384, the Google Fonts project aims at a narrower set of reasonable values. The spec suggests usage of powers of two in order to get some performance improvements on legacy renderers, so those values are acceptable. But values of 500 or 1000 are also acceptable, with the added benefit that it makes upm math easier for designers, while the performance hit of not using a power of two is most likely negligible nowadays. Additionally, values above 2048 would likely result in unreasonable filesize increases.* ๐ **PASS** Font em size is good (unitsPerEm = 1000).
--- Rationale --- The 'post' table italicAngle property should be a reasonable amount, likely not more than -20ยฐ, never more than -30ยฐ, and never greater than 0ยฐ. Note that in the OpenType specification, the value is negative for a lean rightwards. https://docs.microsoft.com/en-us/typography/opentype/spec/post* ๐ **PASS** Value of post.italicAngle is 0.0 with style="Regular".
--- Rationale --- The values of the flags on the macStyle entry on the 'head' OpenType table that describe whether a font is bold and/or italic must be coherent with the actual style of the font as inferred by its filename.* ๐ **PASS** head macStyle ITALIC bit is properly set. * ๐ **PASS** head macStyle BOLD bit is properly set.
--- Rationale --- Requirements for the POSTSCRIPT_NAME entries in the 'name' table.* ๐ **PASS** POSTCRIPT_NAME entries are all good.
--- Rationale --- Requirements for the TYPOGRAPHIC_FAMILY_NAME entries in the 'name' table.* ๐ **PASS** TYPOGRAPHIC_FAMILY_NAME entries are all good.
--- Rationale --- Requirements for the TYPOGRAPHIC_SUBFAMILY_NAME entries in the 'name' table.* ๐ **PASS** TYPOGRAPHIC_SUBFAMILY_NAME entries are all good.
--- Rationale --- This is an arbitrary max length for the copyright notice field of the name table. We simply don't want such notices to be too long. Typically such notices are actually much shorter than this with a length of roughly 70 or 80 characters.* ๐ **PASS** All copyright notice name entries on the 'name' table are shorter than 500 characters.
--- Rationale --- We need to check names are not already used, and today the best place to check that is http://namecheck.fontdata.com* ๐ **PASS** Font familyname seems to be unique.
--- Rationale --- The goal here is to reduce filesizes and improve pageloading when dealing with webfonts. The VTT Talk sources are not necessary at runtime and endup being just dead weight when left embedded in the font binaries. The sources should be kept on the project files but stripped out when building release binaries.* ๐ **PASS** There are no tables with VTT Talk sources embedded in the font.
--- Rationale --- Apple's TrueType reference manual [1] describes SFNT tables not in the Microsoft OpenType specification [2] and these can sometimes sneak into final release files, but Google Fonts should only have OpenType tables. [1] https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html [2] https://docs.microsoft.com/en-us/typography/opentype/spec/* ๐ **PASS** There are no unwanted AAT tables.
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* ๐ **PASS** All name entries are good.
--- Rationale --- There are some entries on the name table that may include more than one line of text. The Google Fonts team, though, prefers to keep the name table entries short and simple without line breaks. For instance, some designers like to include the full text of a font license in the "copyright notice" entry, but for the GFonts collection this entry should only mention year, author and other basic info in a manner enforced by com.google.fonts/check/font_copyright* ๐ **PASS** Name table entries are all single-line (no line-breaks found).
--- Rationale --- Some designers adopt the "Reserved Font Name" clause of the OFL license. This means that the original author reserves the rights to the family name and other people can only distribute modified versions using a different family name. Google Fonts published updates to the fonts in the collection in order to fix issues and/or implement further improvements to the fonts. It is important to keep the family name so that users of the webfonts can benefit from the updates. Since it would forbid such usage scenario, all families in the GFonts collection are required to not adopt the RFN clause. This check ensures "Reserved Font Name" is not mentioned in the name table.* ๐ **PASS** None of the name table strings contain "Reserved Font Name".
--- Rationale --- A FontBakery report is ephemeral and so should be used for posting issues on a bug-tracker instead of being hosted in the font project repository.* ๐ **PASS** OK
--- Rationale --- Sometimes people check in ZIPs into their font project repositories. While we accept the practice of checking in binaries, we believe that a ZIP is a step too far ;) Note: a source purist position is that only source files and build scripts should be checked in.* ๐ **PASS** OK
--- Rationale --- CJK fonts have different vertical metrics when compared to Latin fonts. We follow the schema developed by dr Ken Lunde for Source Han Sans and the Noto CJK fonts. Our documentation includes further information: https://github.com/googlefonts/gf-docs/tree/main/Spec#cjk-vertical-metrics* ๐ **PASS** Vertical metrics are good
--- Rationale --- Hangul has 40 characters and it's the smallest CJK writing system. If a font contains less CJK glyphs than this writing system, we inform the user that some glyphs may be encoded incorrectly.* ๐ **PASS** Font has the correct quantity of CJK glyphs
--- Rationale --- Ensure small caps glyphs are available if a font declares smcp or c2sc OT features.* ๐ **PASS** OK
--- Rationale --- Stylistic sets should provide description text. Programs such as InDesign, TextEdit and Inkscape use that info to display to the users so that they know what a given stylistic set offers.* ๐ **PASS** OK
--- Rationale --- Tables such as `Debg` are useful in the pre-production stages of font development, but add unnecessary bloat to a production font and should be removed before release.* ๐ **PASS** OK
--- Rationale --- The OpenType specification v1.8.2 recommends that the first glyph is the '.notdef' glyph without a codepoint assigned and with a drawing. https://docs.microsoft.com/en-us/typography/opentype/spec /recom#glyph-0-the-notdef-glyph Pre-v1.8, it was recommended that fonts should also contain 'space', 'CR' and '.null' glyphs. This might have been relevant for MacOS 9 applications.* ๐ **PASS** OK
--- Rationale --- This check enforces adherence to recommended whitespace (codepoints 0020 and 00A0) glyph names according to the Adobe Glyph List.* ๐ **PASS** Font has **AGL recommended** names for whitespace glyphs.
--- Rationale --- Some font editors store source data in their own SFNT tables, and these can sometimes sneak into final release files, which should only have OpenType spec tables.* ๐ **PASS** There are no unwanted tables.
--- Rationale --- Microsoft's recommendations for OpenType Fonts states the following: 'NOTE: The PostScript glyph name must be no longer than 31 characters, include only uppercase or lowercase English letters, European digits, the period or the underscore, i.e. from the set [A-Za-z0-9_.] and should start with a letter, except the special glyph name ".notdef" which starts with a period.' https://docs.microsoft.com/en-us/typography/opentype/spec/recom#post-table In practice, though, particularly in modern environments, glyph names can be as long as 63 characters. According to the "Adobe Glyph List Specification" available at: https://github.com/adobe-type-tools/agl-specification* ๐ **PASS** Glyph names are all valid.
--- Rationale --- Duplicate glyph names prevent font installation on Mac OS X.* ๐ **PASS** Font contains unique glyph names.
--- Rationale --- According to the OpenType spec: The value of unitsPerEm at the head table must be a value between 16 and 16384. Any value in this range is valid. In fonts that have TrueType outlines, a power of 2 is recommended as this allows performance optimizations in some rasterizers. But 1000 is a commonly used value. And 2000 may become increasingly more common on Variable Fonts.* ๐ **PASS** The unitsPerEm value (1000) on the 'head' table is reasonable.
--- Rationale --- The bold and italic bits in OS/2.fsSelection must match the bold and italic bits in head.macStyle per the OpenType spec.* ๐ **PASS** The OS/2.fsSelection and head.macStyle bold and italic settings match.
--- Rationale --- At least some programs (such as Word and Sublime Text) under Windows 7 do not recognize fonts unless code page bits are properly set on the ulCodePageRange1 (and/or ulCodePageRange2) fields of the OS/2 table. More specifically, the fonts are selectable in the font menu, but whichever Windows API these applications use considers them unsuitable for any character set, so anything set in these fonts is rendered with a fallback font of Arial. This check currently does not identify which code pages should be set. Auto-detecting coverage is not trivial since the OpenType specification leaves the interpretation of whether a given code page is "functional" or not open to the font developer to decide. So here we simply detect as a FAIL when a given font has no code page declared at all.* ๐ **PASS** At least one code page is defined.
--- Rationale --- Apple recommends against using 'post' table format 3 under most circumstances, as it can create problems with some printer drivers and PDF documents. The savings in disk space usually does not justify the potential loss in functionality. Source: https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html The CFF2 table does not contain glyph names, so variable OTFs should be allowed to use post table version 2. This check expects: - Version 2 for TTF or OTF CFF2 Variable fonts - Version 3 for OTF* ๐ **PASS** Font has post table version 2.
--- Rationale --- Check the name table for empty records, as this can cause problems in Adobe apps.* ๐ **PASS** No empty name table records found.
--- Rationale --- The PostScript name entries in the font's 'name' table should be consistent across platforms. This is the TTF/CFF2 equivalent of the CFF 'name/postscript_vs_cff' check.* ๐ **PASS** Entries in the "name" table for ID 6 (PostScript name) are consistent.
--- Rationale --- Even though all fonts should have their kerning implemented in the GPOS table, there may be kerning info at the kern table as well. Some applications such as MS PowerPoint require kerning info on the kern table. More specifically, they require a format 0 kern subtable from a kern table version 0 with only glyphs defined in the cmap table, which is the only one that Windows understands (and which is also the simplest and more limited of all the kern subtables). Google Fonts ingests fonts made for download and use on desktops, and does all web font optimizations in the serving pipeline (using libre libraries that anyone can replicate.) Ideally, TTFs intended for desktop users (and thus the ones intended for Google Fonts) should have both KERN and GPOS tables. Given all of the above, we currently treat kerning on a v0 kern table as a good-to-have (but optional) feature.* ๐ **PASS** Font does not declare an optional "kern" table.
--- Rationale --- There have been cases in which fonts had faulty double quote marks, with each of them containing two single quote marks as components with the same x, y coordinates which makes them visually look like single quote marks. This check ensures that glyphs do not contain duplicate components which have the same x,y coordinates.* ๐ **PASS** Glyphs do not contain duplicate components which have the same x,y coordinates.
--- Rationale --- There have been bugs rendering variable fonts with nested components. Additionally, some static fonts with nested components have been reported to have rendering and printing issues. For more info, see: * https://github.com/googlefonts/fontbakery/issues/2961 * https://github.com/arrowtype/recursive/issues/412* ๐ **PASS** Glyphs do not contain nested components.
--- Rationale --- Incorrect tags can be indications of typos, leftover debugging code or questionable approaches, or user error in the font editor. Such typos can cause features and language support to fail to work as intended.* ๐ **PASS** No invalid feature tags were found
--- Rationale --- Incorrect script tags can be indications of typos, leftover debugging code or questionable approaches, or user error in the font editor. Such typos can cause features and language support to fail to work as intended.* ๐ **PASS** No invalid script tags were found
--- Rationale --- Incorrect language tags can be indications of typos, leftover debugging code or questionable approaches, or user error in the font editor. Such typos can cause features and language support to fail to work as intended.* ๐ **PASS** No invalid language tags were found
--- Rationale --- This check heuristically looks for on-curve points which are close to, but do not sit on, significant boundary coordinates. For example, a point which has a Y-coordinate of 1 or -1 might be a misplaced baseline point. As well as the baseline, here we also check for points near the x-height (but only for lower case Latin letters), cap-height, ascender and descender Y coordinates. Not all such misaligned curve points are a mistake, and sometimes the design may call for points in locations near the boundaries. As this check is liable to generate significant numbers of false positives, it will pass if there are more than 100 reported misalignments.* ๐ **PASS** So many Y-coordinates of points were close to boundaries that this was probably by design.
--- Rationale --- This check looks for outline segments which seem particularly short (less than 0.6% of the overall path length). This check is not run for variable fonts, as they may legitimately have short segments. As this check is liable to generate significant numbers of false positives, it will pass if there are more than 100 reported short segments.* ๐ **PASS** So many short segments were found that this was probably by design.
--- Rationale --- This check looks for consecutive line segments which have the same angle. This normally happens if an outline point has been added by accident. This check is not run for variable fonts, as they may legitimately have colinear vectors.* ๐ **PASS** No colinear vectors found.
--- Rationale --- This check heuristically detects outline segments which form a particularly small angle, indicative of an outline error. This may cause false positives in cases such as extreme ink traps, so should be regarded as advisory and backed up by manual inspection.* ๐ **PASS** No jaggy segments found.
--- Rationale --- This check detects line segments which are nearly, but not quite, exactly horizontal or vertical. Sometimes such lines are created by design, but often they are indicative of a design error. This check is disabled for italic styles, which often contain nearly-upright lines.* ๐ **PASS** No semi-horizontal/semi-vertical lines found.
๐ ERROR | ๐ฅ FAIL | โ WARN | ๐ค SKIP | โน INFO | ๐ PASS | ๐ DEBUG |
---|---|---|---|---|---|---|
0 | 4 | 7 | 104 | 7 | 91 | 0 |
0% | 2% | 3% | 49% | 3% | 43% | 0% |
Fontbakery Adobe Fonts report
Fontbakery version: 0.8.1
[12] Family checks
๐ฅ FAIL: Do we have the latest version of FontBakery installed?
* [com.google.fonts/check/fontbakery_version](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/fontbakery_version) * ๐ฅ **FAIL** Current Font Bakery version is 0.8.1, while a newer 0.8.2 is already available. Please upgrade it with 'pip install -U fontbakery'๐ PASS: Fonts have consistent Units Per Em?
* [com.adobe.fonts/check/family/consistent_upm](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/adobefonts.html#com.adobe.fonts/check/family/consistent_upm) * ๐ **PASS** Fonts have consistent units per em.๐ PASS: Checking all files are in the same directory.
* [com.google.fonts/check/family/single_directory](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/family/single_directory) * ๐ **PASS** All files are in the same directory.๐ PASS: Is the command `ftxvalidator` (Apple Font Tool Suite) available?
* [com.google.fonts/check/ftxvalidator_is_available](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/ftxvalidator_is_available) * ๐ **PASS** ftxvalidator is available at /usr/local/bin/ftxvalidator๐ PASS: Each font in a family must have the same set of vertical metrics values.
* [com.google.fonts/check/family/vertical_metrics](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/family/vertical_metrics) * ๐ **PASS** Vertical metrics are the same across the family.๐ PASS: Fonts have equal unicode encodings?
* [com.google.fonts/check/family/equal_unicode_encodings](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/cmap.html#com.google.fonts/check/family/equal_unicode_encodings) * ๐ **PASS** Fonts have equal unicode encodings.๐ PASS: Make sure all font files have the same version value.
* [com.google.fonts/check/family/equal_font_versions](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/head.html#com.google.fonts/check/family/equal_font_versions) * ๐ **PASS** All font files have the same version.๐ PASS: Fonts have consistent PANOSE proportion?
* [com.google.fonts/check/family/panose_proportion](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/os2.html#com.google.fonts/check/family/panose_proportion) * ๐ **PASS** Fonts have consistent PANOSE proportion.๐ PASS: Fonts have consistent PANOSE family type?
* [com.google.fonts/check/family/panose_familytype](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/os2.html#com.google.fonts/check/family/panose_familytype) * ๐ **PASS** Fonts have consistent PANOSE family type.๐ PASS: Check that OS/2.fsSelection bold & italic settings are unique for each NameID1
* [com.adobe.fonts/check/family/bold_italic_unique_for_nameid1](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/os2.html#com.adobe.fonts/check/family/bold_italic_unique_for_nameid1) * ๐ **PASS** The OS/2.fsSelection bold & italic settings were unique within each compatible family group.๐ PASS: Fonts have consistent underline thickness?
* [com.google.fonts/check/family/underline_thickness](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/post.html#com.google.fonts/check/family/underline_thickness) * ๐ **PASS** Fonts have consistent underline thickness.๐ PASS: Verify that each group of fonts with the same nameID 1 has maximum of 4 fonts
* [com.adobe.fonts/check/family/max_4_fonts_per_family_name](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/name.html#com.adobe.fonts/check/family/max_4_fonts_per_family_name) * ๐ **PASS** There were no more than 4 fonts per family name.[71] DotGothic16-Regular.ttf
๐ฅ FAIL: Checking correctness of monospaced metadata.
* [com.google.fonts/check/monospace](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/name.html#com.google.fonts/check/monospace) * ๐ฅ **FAIL** On monospaced fonts, the value of post.isFixedPitch must be set to a non-zero value (meaning 'fixed width monospaced'), but got 0 instead. [code: mono-bad-post-isFixedPitch] * ๐ฅ **FAIL** On monospaced fonts, the value of OS/2.panose.bProportion must be set to 9 (proportion: monospaced), but got 0 instead. [code: mono-bad-panose-proportion] * โ **WARN** Font is monospaced but 642 glyphs (6.86%) have a different width. You should check the widths of: ['space', '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', 'yen', 'bracketright', 'asciicircum', 'underscore', 'grave', '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', 'brokenbar', 'braceright', 'tilde', 'quoteright', 'backslash', 'quoteleft', 'bar', 'asciitilde', 'exclamdown', 'cent', 'sterling', 'fraction', 'florin', 'section', 'currency', 'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'endash', 'dagger.prop', 'daggerdbl.prop', 'periodcentered', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis.full', 'perthousand.full', 'questiondown', 'acutecomb', 'circumflex', 'macron', 'uni0306', 'uni0307', 'uni0308', 'ring', 'cedilla', 'uni030B', 'uni0328', 'uni030C', 'emdash', 'AE', 'ordfeminine', 'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae', 'dotlessi', 'lslash', 'oslash', 'oe', 'germandbls', 'uni00AD', 'copyright', 'logicalnot', 'registered', 'degree', 'plusminus', 'uni00B2', 'uni00B3', 'uni00B5', 'uni00B9', 'onequarter', 'onehalf', 'threequarters', 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', 'Adieresis', 'Aring', 'Ccedilla', 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Eth', 'Ntilde', 'Ograve', 'Oacute', 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', 'Ugrave', 'Uacute', 'Ucircumflex', 'Udieresis', 'Yacute', 'Thorn', 'agrave', 'aacute', 'acircumflex', 'atilde', 'adieresis', 'aring', 'ccedilla', 'egrave', 'eacute', 'ecircumflex', 'edieresis', 'igrave', 'iacute', 'icircumflex', 'idieresis', 'eth', 'ntilde', 'ograve', 'oacute', 'ocircumflex', 'otilde', 'odieresis', 'divide', 'ugrave', 'uacute', 'ucircumflex', 'udieresis', 'yacute', 'thorn', 'ydieresis', 'Scaron', 'Ydieresis', 'Zcaron', 'uni0305', 'scaron', 'trademark', 'zcaron', 'zero.zero', 'uni2002', 'exclam.half', 'quotedblright.half', 'numbersign.half', 'dollar.half', 'percent.half', 'ampersand.half', 'quoteright.half', 'parenleft.half', 'parenright.half', 'asterisk.half', 'plus.half', 'comma.half', 'hyphen.half', 'period.half', 'slash.half', 'zero.half', 'one.half', 'two.half', 'three.half', 'four.half', 'five.half', 'six.half', 'seven.half', 'eight.half', 'nine.half', 'colon.half', 'semicolon.half', 'less.half', 'equal.half', 'greater.half', 'question.half', 'at.half', 'A.half', 'B.half', 'C.half', 'D.half', 'E.half', 'F.half', 'G.half', 'H.half', 'I.half', 'J.half', 'K.half', 'L.half', 'M.half', 'N.half', 'O.half', 'P.half', 'Q.half', 'R.half', 'S.half', 'T.half', 'U.half', 'V.half', 'W.half', 'X.half', 'Y.half', 'Z.half', 'bracketleft.half', 'yen.half', 'bracketright.half', 'asciicircum.half', 'underscore.half', 'quoteleft.half', 'a.half', 'b.half', 'c.half', 'd.half', 'e.half', 'f.half', 'g.half', 'h.half', 'i.half', 'j.half', 'k.half', 'l.half', 'm.half', 'n.half', 'o.half', 'p.half', 'q.half', 'r.half', 's.half', 't.half', 'u.half', 'v.half', 'w.half', 'x.half', 'y.half', 'z.half', 'braceleft.half', 'uniFFE8', 'braceright.half', 'macron.half', 'spacekata.half', 'uniFF61', 'uniFF62', 'uniFF63', 'uniFF64', 'uniFF65', 'uniFF66', 'uniFF67', 'uniFF68', 'uniFF69', 'uniFF6A', 'uniFF6B', 'uniFF6C', 'uniFF6D', 'uniFF6E', 'uniFF6F', 'uniFF70', 'uniFF71', 'uniFF72', 'uniFF73', 'uniFF74', 'uniFF75', 'uniFF76', 'uniFF77', 'uniFF78', 'uniFF79', 'uniFF7A', 'uniFF7B', 'uniFF7C', 'uniFF7D', 'uniFF7E', 'uniFF7F', 'uniFF80', 'uniFF81', 'uniFF82', 'uniFF83', 'uniFF84', 'uniFF85', 'uniFF86', 'uniFF87', 'uniFF88', 'uniFF89', 'uniFF8A', 'uniFF8B', 'uniFF8C', 'uniFF8D', 'uniFF8E', 'uniFF8F', 'uniFF90', 'uniFF91', 'uniFF92', 'uniFF93', 'uniFF94', 'uniFF95', 'uniFF96', 'uniFF97', 'uniFF98', 'uniFF99', 'uniFF9A', 'uniFF9B', 'uniFF9C', 'uniFF9D', 'uniFF9E', 'uniFF9F', 'grave.half', 'uni30F0.half', 'uni30F1.half', 'uni30EE.half', 'uni30F5.half', 'uni30F6.half', 'uni30F4.half', 'uni30AC.half', 'uni30AE.half', 'uni30B0.half', 'uni30B2.half', 'uni30B4.half', 'uni30B6.half', 'uni30B8.half', 'uni30BA.half', 'uni30BC.half', 'uni30BE.half', 'uni30C0.half', 'uni30C2.half', 'uni30C5.half', 'uni30C7.half', 'uni30C9.half', 'uni30D0.half', 'uni30D1.half', 'uni30D3.half', 'uni30D4.half', 'uni30D6.half', 'uni30D7.half', 'uni30D9.half', 'uni30DA.half', 'uni30DC.half', 'uni30DD.half', 'space.half', 'uni301D.half', 'uni301F.half', 'uni2500.half', 'uni2501.half', 'uni2502.half', 'uni2503.half', 'uni2504.half', 'uni2505.half', 'uni2506.half', 'uni2507.half', 'uni2508.half', 'uni2509.half', 'uni250A.half', 'uni250B.half', 'uni250C.half', 'uni250D.half', 'uni250E.half', 'uni250F.half', 'uni2510.half', 'uni2511.half', 'uni2512.half', 'uni2513.half', 'uni2514.half', 'uni2515.half', 'uni2516.half', 'uni2517.half', 'uni2518.half', 'uni2519.half', 'uni251A.half', 'uni251B.half', 'uni251C.half', 'uni251D.half', 'uni251E.half', 'uni251F.half', 'uni2520.half', 'uni2521.half', 'uni2522.half', 'uni2523.half', 'uni2524.half', 'uni2525.half', 'uni2526.half', 'uni2527.half', 'uni2528.half', 'uni2529.half', 'uni252A.half', 'uni252B.half', 'uni252C.half', 'uni252D.half', 'uni252E.half', 'uni252F.half', 'uni2530.half', 'uni2531.half', 'uni2532.half', 'uni2533.half', 'uni2534.half', 'uni2535.half', 'uni2536.half', 'uni2537.half', 'uni2538.half', 'uni2539.half', 'uni253A.half', 'uni253B.half', 'uni253C.half', 'uni253D.half', 'uni253E.half', 'uni253F.half', 'uni2540.half', 'uni2541.half', 'uni2542.half', 'uni2543.half', 'uni2544.half', 'uni2545.half', 'uni2546.half', 'uni2547.half', 'uni2548.half', 'uni2549.half', 'uni254A.half', 'uni254B.half', 'acute.half', 'dieresis.half', 'quotedblleft.half', 'uni3014.half', 'uni3015.half', 'uni3008.half', 'uni3009.half', 'uni300A.half', 'uni300B.half', 'uni300E.half', 'uni300F.half', 'uni3010.half', 'uni3011.half', 'endash.half', 'spacehira.half', 'uni3092.half', 'uni3041.half', 'uni3043.half', 'uni3045.half', 'uni3047.half', 'uni3049.half', 'uni3083.half', 'uni3085.half', 'uni3087.half', 'uni3063.half', 'uni3042.half', 'uni3044.half', 'uni3046.half', 'uni3048.half', 'uni304A.half', 'uni304B.half', 'uni304D.half', 'uni304F.half', 'uni3051.half', 'uni3053.half', 'uni3055.half', 'uni3057.half', 'uni3059.half', 'uni305B.half', 'uni305D.half', 'uni305F.half', 'uni3061.half', 'uni3064.half', 'uni3066.half', 'uni3068.half', 'uni306A.half', 'uni306B.half', 'uni306C.half', 'uni306D.half', 'uni306E.half', 'uni306F.half', 'uni3072.half', 'uni3075.half', 'uni3078.half', 'uni307B.half', 'uni307E.half', 'uni307F.half', 'uni3080.half', 'uni3081.half', 'uni3082.half', 'uni3084.half', 'uni3086.half', 'uni3088.half', 'uni3089.half', 'uni308A.half', 'uni308B.half', 'uni308C.half', 'uni308D.half', 'uni308F.half', 'uni3093.half', 'uni3090.half', 'uni3091.half', 'uni308E.half', 'uni304C.half', 'uni304E.half', 'uni3050.half', 'uni3052.half', 'uni3054.half', 'uni3056.half', 'uni3058.half', 'uni305A.half', 'uni305C.half', 'uni305E.half', 'uni3060.half', 'uni3062.half', 'uni3065.half', 'uni3067.half', 'uni3069.half', 'uni3070.half', 'uni3071.half', 'uni3073.half', 'uni3074.half', 'uni3076.half', 'uni3077.half', 'uni3079.half', 'uni307A.half', 'uni307C.half', 'uni307D.half', 'Adieresis.half', 'ugrave.half', 'eacute.half', 'iacute.half', 'germandbls.half', 'ccedilla.half', 'Ccedilla.half', 'Ntilde.half', 'ntilde.half', 'cent.half', 'sterling.half', 'oacute.half', 'uacute.half', 'exclamdown.half', 'questiondown.half', 'one_fraction_two.nut.half', 'Odieresis.half', 'Udieresis.half', 'adieresis.half', 'edieresis.half', 'idieresis.half', 'odieresis.half', 'udieresis.half', 'acircumflex.half', 'ecircumflex.half', 'icircumflex.half', 'ocircumflex.half', 'ucircumflex.half', 'agrave.half', 'egrave.half', 'triagup.half', 'aacute.half', 'asciitilde.half', 'zero.zero.half', 'logicalnot.half', 'backslash.half', 'CR', 'acute', 'dieresis', 'uni2215', 'Euro', 'uni2074', 'minus', 'uni00A0'] [code: mono-outliers]โ WARN: Does the font have a DSIG table?
* [com.google.fonts/check/dsig](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/dsig.html#com.google.fonts/check/dsig) * โ **WARN** This font has a digital signature (DSIG table) which is only required - even if only a dummy placeholder - on old programs like MS Office 2013 in order to work properly. The current recommendation is to completely remove the DSIG table. [code: found-DSIG]โ WARN: Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value
* [com.google.fonts/check/gpos_kerning_info](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/gpos.html#com.google.fonts/check/gpos_kerning_info) * โ **WARN** GPOS table lacks kerning information. [code: lacks-kern-info]๐ค SKIP: Checking OS/2 usWinAscent & usWinDescent.
* [com.google.fonts/check/family/win_ascent_and_descent](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/family/win_ascent_and_descent) * ๐ค **SKIP** Unfulfilled Conditions: not is_cjk_font๐ค SKIP: Checking OS/2 Metrics match hhea Metrics.
* [com.google.fonts/check/os2_metrics_match_hhea](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/os2_metrics_match_hhea) * ๐ค **SKIP** Unfulfilled Conditions: not is_cjk_font๐ค SKIP: Check correctness of STAT table strings
* [com.google.fonts/check/STAT_strings](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/STAT_strings) * ๐ค **SKIP** Unfulfilled Conditions: STAT_table๐ค SKIP: Each font in set of sibling families must have the same set of vertical metrics values.
* [com.google.fonts/check/superfamily/vertical_metrics](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/superfamily/vertical_metrics) * ๐ค **SKIP** Sibling families were not detected.๐ค SKIP: Ensure indic fonts have the Indian Rupee Sign glyph.
* [com.google.fonts/check/rupee](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/rupee) * ๐ค **SKIP** Unfulfilled Conditions: is_indic_font๐ค SKIP: Is the CFF subr/gsubr call depth > 10?
* [com.adobe.fonts/check/cff_call_depth](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/cff.html#com.adobe.fonts/check/cff_call_depth) * ๐ค **SKIP** Unfulfilled Conditions: is_cff๐ค SKIP: Is the CFF2 subr/gsubr call depth > 10?
* [com.adobe.fonts/check/cff2_call_depth](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/cff.html#com.adobe.fonts/check/cff2_call_depth) * ๐ค **SKIP** Unfulfilled Conditions: is_cff2๐ค SKIP: Does the font use deprecated CFF operators or operations?
* [com.adobe.fonts/check/cff_deprecated_operators](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/cff.html#com.adobe.fonts/check/cff_deprecated_operators) * ๐ค **SKIP** Unfulfilled Conditions: is_cff๐ค SKIP: CFF table FontName must match name table ID 6 (PostScript name).
* [com.adobe.fonts/check/name/postscript_vs_cff](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/name.html#com.adobe.fonts/check/name/postscript_vs_cff) * ๐ค **SKIP** Unfulfilled Conditions: is_cff๐ค SKIP: Check glyphs in mark glyph class are non-spacing.
* [com.google.fonts/check/gdef_spacing_marks](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/gdef.html#com.google.fonts/check/gdef_spacing_marks) * ๐ค **SKIP** Font does not declare an optional "GDEF" table or has any GDEF glyph class definition.๐ค SKIP: Check mark characters are in GDEF mark glyph class.
* [com.google.fonts/check/gdef_mark_chars](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/gdef.html#com.google.fonts/check/gdef_mark_chars) * ๐ค **SKIP** Font does not declare an optional "GDEF" table or has any GDEF glyph class definition.๐ค SKIP: Check GDEF mark glyph class doesn't have characters that are not marks.
* [com.google.fonts/check/gdef_non_mark_chars](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/gdef.html#com.google.fonts/check/gdef_non_mark_chars) * ๐ค **SKIP** Font does not declare an optional "GDEF" table or has any GDEF glyph class definition.๐ค SKIP: The variable font 'wght' (Weight) axis coordinate must be 400 on the 'Regular' instance.
* [com.google.fonts/check/varfont/regular_wght_coord](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/fvar.html#com.google.fonts/check/varfont/regular_wght_coord) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, regular_wght_coord๐ค SKIP: The variable font 'wdth' (Width) axis coordinate must be 100 on the 'Regular' instance.
* [com.google.fonts/check/varfont/regular_wdth_coord](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/fvar.html#com.google.fonts/check/varfont/regular_wdth_coord) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, regular_wdth_coord๐ค SKIP: The variable font 'slnt' (Slant) axis coordinate must be zero on the 'Regular' instance.
* [com.google.fonts/check/varfont/regular_slnt_coord](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/fvar.html#com.google.fonts/check/varfont/regular_slnt_coord) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, regular_slnt_coord๐ค SKIP: The variable font 'ital' (Italic) axis coordinate must be zero on the 'Regular' instance.
* [com.google.fonts/check/varfont/regular_ital_coord](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/fvar.html#com.google.fonts/check/varfont/regular_ital_coord) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, regular_ital_coord๐ค SKIP: The variable font 'opsz' (Optical Size) axis coordinate should be between 10 and 16 on the 'Regular' instance.
* [com.google.fonts/check/varfont/regular_opsz_coord](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/fvar.html#com.google.fonts/check/varfont/regular_opsz_coord) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, regular_opsz_coord๐ค SKIP: The variable font 'wght' (Weight) axis coordinate must be 700 on the 'Bold' instance.
* [com.google.fonts/check/varfont/bold_wght_coord](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/fvar.html#com.google.fonts/check/varfont/bold_wght_coord) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, bold_wght_coord๐ค SKIP: The variable font 'wght' (Weight) axis coordinate must be within spec range of 1 to 1000 on all instances.
* [com.google.fonts/check/varfont/wght_valid_range](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/fvar.html#com.google.fonts/check/varfont/wght_valid_range) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font๐ค SKIP: The variable font 'wdth' (Weight) axis coordinate must be within spec range of 1 to 1000 on all instances.
* [com.google.fonts/check/varfont/wdth_valid_range](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/fvar.html#com.google.fonts/check/varfont/wdth_valid_range) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font๐ค SKIP: The variable font 'slnt' (Slant) axis coordinate specifies positive values in its range?
* [com.google.fonts/check/varfont/slnt_range](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/fvar.html#com.google.fonts/check/varfont/slnt_range) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, slnt_axis๐ค SKIP: All fvar axes have a correspondent Axis Record on STAT table?
* [com.google.fonts/check/varfont/stat_axis_record_for_each_axis](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/stat.html#com.google.fonts/check/varfont/stat_axis_record_for_each_axis) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font๐ค SKIP: Check that texts shape as per expectation
* [com.google.fonts/check/shaping/regression](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/๐ค SKIP: Check that no forbidden glyphs are found while shaping
* [com.google.fonts/check/shaping/forbidden](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/๐ค SKIP: Check that no collisions are found while shaping
* [com.google.fonts/check/shaping/collides](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/โน INFO: Font contains all required tables?
* [com.google.fonts/check/required_tables](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/required_tables) * โน **INFO** This font contains the following optional tables: - loca - BASE - GPOS - GSUB - gasp - vhea - vmtx [code: optional-tables] * ๐ **PASS** Font contains all required tables.โน INFO: List all superfamily filepaths
* [com.google.fonts/check/superfamily/list](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/superfamily/list) * โน **INFO** . [code: family-path]๐ PASS: Letters in font have glyphs that are not empty?
* [com.adobe.fonts/check/find_empty_letters](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/adobefonts.html#com.adobe.fonts/check/find_empty_letters) * ๐ **PASS** No empty glyphs for letters found.๐ PASS: Name table records must not have trailing spaces.
* [com.google.fonts/check/name/trailing_spaces](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/name/trailing_spaces) * ๐ **PASS** No trailing spaces on name table entries.๐ PASS: Checking with ftxvalidator.
* [com.google.fonts/check/ftxvalidator](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/ftxvalidator) * ๐ **PASS** ftxvalidator passed this file๐ PASS: Checking with ots-sanitize.
* [com.google.fonts/check/ots](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/ots) * ๐ **PASS** ots-sanitize passed this file๐ PASS: Font contains '.notdef' as its first glyph?
* [com.google.fonts/check/mandatory_glyphs](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/mandatory_glyphs) * ๐ **PASS** OK๐ PASS: Font contains glyphs for whitespace characters? (derived from com.google.fonts/check/whitespace_glyphs)
* [com.google.fonts/check/whitespace_glyphs](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/whitespace_glyphs) * ๐ **PASS** Font contains glyphs for whitespace characters.๐ PASS: Font has **proper** whitespace glyph names?
* [com.google.fonts/check/whitespace_glyphnames](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/whitespace_glyphnames) * ๐ **PASS** Font has **AGL recommended** names for whitespace glyphs.๐ PASS: Whitespace glyphs have ink?
* [com.google.fonts/check/whitespace_ink](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/whitespace_ink) * ๐ **PASS** There is no whitespace glyph with ink.๐ PASS: Are there unwanted tables?
* [com.google.fonts/check/unwanted_tables](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/unwanted_tables) * ๐ **PASS** There are no unwanted tables.๐ PASS: Glyph names are all valid? (derived from com.google.fonts/check/valid_glyphnames)
* [com.google.fonts/check/valid_glyphnames](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/valid_glyphnames) * ๐ **PASS** Glyph names are all valid.๐ PASS: Font contains unique glyph names?
* [com.google.fonts/check/unique_glyphnames](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/unique_glyphnames) * ๐ **PASS** Font contains unique glyph names.๐ PASS: Checking with fontTools.ttx
* [com.google.fonts/check/ttx-roundtrip](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/ttx-roundtrip) * ๐ **PASS** Hey! It all looks good!๐ PASS: Check all glyphs have codepoints assigned.
* [com.google.fonts/check/all_glyphs_have_codepoints](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/cmap.html#com.google.fonts/check/all_glyphs_have_codepoints) * ๐ **PASS** All glyphs have a codepoint value assigned.๐ PASS: Checking unitsPerEm value is reasonable.
* [com.google.fonts/check/unitsperem](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/head.html#com.google.fonts/check/unitsperem) * ๐ **PASS** The unitsPerEm value (1000) on the 'head' table is reasonable.๐ PASS: Checking font version fields (head and name table).
* [com.google.fonts/check/font_version](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/head.html#com.google.fonts/check/font_version) * ๐ **PASS** All font version fields match.๐ PASS: Check if OS/2 xAvgCharWidth is correct.
* [com.google.fonts/check/xavgcharwidth](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/os2.html#com.google.fonts/check/xavgcharwidth) * ๐ **PASS** OS/2 xAvgCharWidth value is correct.๐ PASS: Check if OS/2 fsSelection matches head macStyle bold and italic bits.
* [com.adobe.fonts/check/fsselection_matches_macstyle](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/os2.html#com.adobe.fonts/check/fsselection_matches_macstyle) * ๐ **PASS** The OS/2.fsSelection and head.macStyle bold and italic settings match.๐ PASS: Check code page character ranges
* [com.google.fonts/check/code_pages](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/os2.html#com.google.fonts/check/code_pages) * ๐ **PASS** At least one code page is defined.๐ PASS: Font has correct post table version?
* [com.google.fonts/check/post_table_version](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/post.html#com.google.fonts/check/post_table_version) * ๐ **PASS** Font has post table version 2.๐ PASS: Check name table for empty records.
* [com.adobe.fonts/check/name/empty_records](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/name.html#com.adobe.fonts/check/name/empty_records) * ๐ **PASS** No empty name table records found.๐ PASS: Description strings in the name table must not contain copyright info.
* [com.google.fonts/check/name/no_copyright_on_description](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/name.html#com.google.fonts/check/name/no_copyright_on_description) * ๐ **PASS** Description strings in the name table do not contain any copyright string.๐ PASS: Does full font name begin with the font family name?
* [com.google.fonts/check/name/match_familyname_fullfont](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/name.html#com.google.fonts/check/name/match_familyname_fullfont) * ๐ **PASS** Full font name begins with the font family name.๐ PASS: Font follows the family naming recommendations?
* [com.google.fonts/check/family_naming_recommendations](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/name.html#com.google.fonts/check/family_naming_recommendations) * ๐ **PASS** Font follows the family naming recommendations.๐ PASS: Name table ID 6 (PostScript name) must be consistent across platforms.
* [com.adobe.fonts/check/name/postscript_name_consistency](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/name.html#com.adobe.fonts/check/name/postscript_name_consistency) * ๐ **PASS** Entries in the "name" table for ID 6 (PostScript name) are consistent.๐ PASS: Does the number of glyphs in the loca table match the maxp table?
* [com.google.fonts/check/loca/maxp_num_glyphs](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/loca.html#com.google.fonts/check/loca/maxp_num_glyphs) * ๐ **PASS** 'loca' table matches numGlyphs in 'maxp' table.๐ PASS: Checking Vertical Metric Linegaps.
* [com.google.fonts/check/linegaps](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/hhea.html#com.google.fonts/check/linegaps) * ๐ **PASS** OS/2 sTypoLineGap and hhea lineGap are both 0.๐ PASS: MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables?
* [com.google.fonts/check/maxadvancewidth](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/hhea.html#com.google.fonts/check/maxadvancewidth) * ๐ **PASS** MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.๐ PASS: Space and non-breaking space have the same width?
* [com.google.fonts/check/whitespace_widths](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/hmtx.html#com.google.fonts/check/whitespace_widths) * ๐ **PASS** Space and non-breaking space have the same width.๐ PASS: Is there a usable "kern" table declared in the font?
* [com.google.fonts/check/kern_table](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/kern.html#com.google.fonts/check/kern_table) * ๐ **PASS** Font does not declare an optional "kern" table.๐ PASS: Is there any unused data at the end of the glyf table?
* [com.google.fonts/check/glyf_unused_data](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/glyf.html#com.google.fonts/check/glyf_unused_data) * ๐ **PASS** There is no unused data at the end of the glyf table.๐ PASS: Check for points out of bounds.
* [com.google.fonts/check/points_out_of_bounds](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/glyf.html#com.google.fonts/check/points_out_of_bounds) * ๐ **PASS** All glyph paths have coordinates within bounds!๐ PASS: Check glyphs do not have duplicate components which have the same x,y coordinates.
* [com.google.fonts/check/glyf_non_transformed_duplicate_components](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/glyf.html#com.google.fonts/check/glyf_non_transformed_duplicate_components) * ๐ **PASS** Glyphs do not contain duplicate components which have the same x,y coordinates.๐ PASS: Check glyphs do not have components which are themselves components.
* [com.google.fonts/check/glyf_nested_components](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/glyf.html#com.google.fonts/check/glyf_nested_components) * ๐ **PASS** Glyphs do not contain nested components.๐ PASS: Does the font have any invalid feature tags?
* [com.google.fonts/check/layout_valid_feature_tags](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/layout.html#com.google.fonts/check/layout_valid_feature_tags) * ๐ **PASS** No invalid feature tags were found๐ PASS: Does the font have any invalid script tags?
* [com.google.fonts/check/layout_valid_script_tags](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/layout.html#com.google.fonts/check/layout_valid_script_tags) * ๐ **PASS** No invalid script tags were found๐ PASS: Does the font have any invalid language tags?
* [com.google.fonts/check/layout_valid_language_tags](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/layout.html#com.google.fonts/check/layout_valid_language_tags) * ๐ **PASS** No invalid language tags were found๐ PASS: Are there any misaligned on-curve points?
* [com.google.fonts/check/outline_alignment_miss](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/๐ PASS: Are any segments inordinately short?
* [com.google.fonts/check/outline_short_segments](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/๐ PASS: Do any segments have colinear vectors?
* [com.google.fonts/check/outline_colinear_vectors](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/๐ PASS: Do outlines contain any jaggy segments?
* [com.google.fonts/check/outline_jaggy_segments](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/๐ PASS: Do outlines contain any semi-vertical or semi-horizontal lines?
* [com.google.fonts/check/outline_semi_vertical](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/Summary
Fontbakery Google Fonts report
Fontbakery version: 0.8.1
[16] Family checks
๐ฅ FAIL: Do we have the latest version of FontBakery installed?
* [com.google.fonts/check/fontbakery_version](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/fontbakery_version) * ๐ฅ **FAIL** Current Font Bakery version is 0.8.1, while a newer 0.8.2 is already available. Please upgrade it with 'pip install -U fontbakery'โน INFO: Check axis ordering on the STAT table.
* [com.google.fonts/check/STAT/axis_order](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/STAT/axis_order) * โน **INFO** From a total of 1 font files, 1 of them (100.00%) lack a STAT table. And these are the most common STAT axis orderings: [code: summary] * ๐ค **SKIP** This font does not have a STAT table: DotGothic16-Regular.ttf [code: missing-STAT]๐ PASS: All tabular figures must have the same width across the RIBBI-family.
* [com.google.fonts/check/family/tnum_horizontal_metrics](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/family/tnum_horizontal_metrics) * ๐ **PASS** OK๐ PASS: Does font file include unacceptable control character glyphs?
* [com.google.fonts/check/family/control_chars](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/family/control_chars) * ๐ **PASS** Unacceptable control characters were not identified.๐ PASS: Ensure Italic styles have Roman counterparts.
* [com.google.fonts/check/family/italics_have_roman_counterparts](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/family/italics_have_roman_counterparts) * ๐ **PASS** OK๐ PASS: Checking all files are in the same directory.
* [com.google.fonts/check/family/single_directory](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/family/single_directory) * ๐ **PASS** All files are in the same directory.๐ PASS: Is the command `ftxvalidator` (Apple Font Tool Suite) available?
* [com.google.fonts/check/ftxvalidator_is_available](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/ftxvalidator_is_available) * ๐ **PASS** ftxvalidator is available at /usr/local/bin/ftxvalidator๐ PASS: Each font in a family must have the same set of vertical metrics values.
* [com.google.fonts/check/family/vertical_metrics](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/family/vertical_metrics) * ๐ **PASS** Vertical metrics are the same across the family.๐ PASS: Fonts have equal unicode encodings?
* [com.google.fonts/check/family/equal_unicode_encodings](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/cmap.html#com.google.fonts/check/family/equal_unicode_encodings) * ๐ **PASS** Fonts have equal unicode encodings.๐ PASS: Make sure all font files have the same version value.
* [com.google.fonts/check/family/equal_font_versions](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/head.html#com.google.fonts/check/family/equal_font_versions) * ๐ **PASS** All font files have the same version.๐ PASS: Fonts have consistent PANOSE proportion?
* [com.google.fonts/check/family/panose_proportion](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/os2.html#com.google.fonts/check/family/panose_proportion) * ๐ **PASS** Fonts have consistent PANOSE proportion.๐ PASS: Fonts have consistent PANOSE family type?
* [com.google.fonts/check/family/panose_familytype](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/os2.html#com.google.fonts/check/family/panose_familytype) * ๐ **PASS** Fonts have consistent PANOSE family type.๐ PASS: Check that OS/2.fsSelection bold & italic settings are unique for each NameID1
* [com.adobe.fonts/check/family/bold_italic_unique_for_nameid1](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/os2.html#com.adobe.fonts/check/family/bold_italic_unique_for_nameid1) * ๐ **PASS** The OS/2.fsSelection bold & italic settings were unique within each compatible family group.๐ PASS: Fonts have consistent underline thickness?
* [com.google.fonts/check/family/underline_thickness](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/post.html#com.google.fonts/check/family/underline_thickness) * ๐ **PASS** Fonts have consistent underline thickness.๐ PASS: Verify that each group of fonts with the same nameID 1 has maximum of 4 fonts
* [com.adobe.fonts/check/family/max_4_fonts_per_family_name](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/name.html#com.adobe.fonts/check/family/max_4_fonts_per_family_name) * ๐ **PASS** There were no more than 4 fonts per family name.๐ค SKIP: Ensure that all variable font files have the same set of axes and axis ranges.
* [com.google.fonts/check/varfont/consistent_axes](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/varfont/consistent_axes) * ๐ค **SKIP** Unfulfilled Conditions: VFs[197] DotGothic16-Regular.ttf
๐ฅ FAIL: Check name table: FONT_FAMILY_NAME entries.
* [com.google.fonts/check/name/familyname](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/name/familyname) * ๐ฅ **FAIL** Entry [FONT_FAMILY_NAME(1):WINDOWS(3)] on the "name" table: Expected "Dot Gothic 16" but got "DotGothic16". [code: mismatch] * ๐ฅ **FAIL** Entry [FONT_FAMILY_NAME(1):WINDOWS(3)] on the "name" table: Expected "Dot Gothic 16" but got "ใใใใดใทใใฏ16". [code: mismatch]๐ฅ FAIL: Check name table: FULL_FONT_NAME entries.
* [com.google.fonts/check/name/fullfontname](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/name/fullfontname) * ๐ฅ **FAIL** [FULL_FONT_NAME(4):WINDOWS(3)] Expected: "Dot Gothic 16 Regular" But got: "DotGothic16 Regular" [code: bad-entry]๐ฅ FAIL: Font enables smart dropout control in "prep" table instructions?
* [com.google.fonts/check/smart_dropout](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/smart_dropout) * ๐ฅ **FAIL** The 'prep' table does not contain TrueType instructions enabling smart dropout control. To fix, export the font with autohinting enabled, or run ttfautohint on the font, or run the `gftools fix-nonhinting` script. [code: lacks-smart-dropout]๐ฅ FAIL: Checking correctness of monospaced metadata.
* [com.google.fonts/check/monospace](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/name.html#com.google.fonts/check/monospace) * ๐ฅ **FAIL** On monospaced fonts, the value of post.isFixedPitch must be set to a non-zero value (meaning 'fixed width monospaced'), but got 0 instead. [code: mono-bad-post-isFixedPitch] * ๐ฅ **FAIL** On monospaced fonts, the value of OS/2.panose.bProportion must be set to 9 (proportion: monospaced), but got 0 instead. [code: mono-bad-panose-proportion] * โ **WARN** Font is monospaced but 642 glyphs (6.86%) have a different width. You should check the widths of: ['space', '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', 'yen', 'bracketright', 'asciicircum', 'underscore', 'grave', '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', 'brokenbar', 'braceright', 'tilde', 'quoteright', 'backslash', 'quoteleft', 'bar', 'asciitilde', 'exclamdown', 'cent', 'sterling', 'fraction', 'florin', 'section', 'currency', 'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'endash', 'dagger.prop', 'daggerdbl.prop', 'periodcentered', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis.full', 'perthousand.full', 'questiondown', 'acutecomb', 'circumflex', 'macron', 'uni0306', 'uni0307', 'uni0308', 'ring', 'cedilla', 'uni030B', 'uni0328', 'uni030C', 'emdash', 'AE', 'ordfeminine', 'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae', 'dotlessi', 'lslash', 'oslash', 'oe', 'germandbls', 'uni00AD', 'copyright', 'logicalnot', 'registered', 'degree', 'plusminus', 'uni00B2', 'uni00B3', 'uni00B5', 'uni00B9', 'onequarter', 'onehalf', 'threequarters', 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', 'Adieresis', 'Aring', 'Ccedilla', 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Eth', 'Ntilde', 'Ograve', 'Oacute', 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', 'Ugrave', 'Uacute', 'Ucircumflex', 'Udieresis', 'Yacute', 'Thorn', 'agrave', 'aacute', 'acircumflex', 'atilde', 'adieresis', 'aring', 'ccedilla', 'egrave', 'eacute', 'ecircumflex', 'edieresis', 'igrave', 'iacute', 'icircumflex', 'idieresis', 'eth', 'ntilde', 'ograve', 'oacute', 'ocircumflex', 'otilde', 'odieresis', 'divide', 'ugrave', 'uacute', 'ucircumflex', 'udieresis', 'yacute', 'thorn', 'ydieresis', 'Scaron', 'Ydieresis', 'Zcaron', 'uni0305', 'scaron', 'trademark', 'zcaron', 'zero.zero', 'uni2002', 'exclam.half', 'quotedblright.half', 'numbersign.half', 'dollar.half', 'percent.half', 'ampersand.half', 'quoteright.half', 'parenleft.half', 'parenright.half', 'asterisk.half', 'plus.half', 'comma.half', 'hyphen.half', 'period.half', 'slash.half', 'zero.half', 'one.half', 'two.half', 'three.half', 'four.half', 'five.half', 'six.half', 'seven.half', 'eight.half', 'nine.half', 'colon.half', 'semicolon.half', 'less.half', 'equal.half', 'greater.half', 'question.half', 'at.half', 'A.half', 'B.half', 'C.half', 'D.half', 'E.half', 'F.half', 'G.half', 'H.half', 'I.half', 'J.half', 'K.half', 'L.half', 'M.half', 'N.half', 'O.half', 'P.half', 'Q.half', 'R.half', 'S.half', 'T.half', 'U.half', 'V.half', 'W.half', 'X.half', 'Y.half', 'Z.half', 'bracketleft.half', 'yen.half', 'bracketright.half', 'asciicircum.half', 'underscore.half', 'quoteleft.half', 'a.half', 'b.half', 'c.half', 'd.half', 'e.half', 'f.half', 'g.half', 'h.half', 'i.half', 'j.half', 'k.half', 'l.half', 'm.half', 'n.half', 'o.half', 'p.half', 'q.half', 'r.half', 's.half', 't.half', 'u.half', 'v.half', 'w.half', 'x.half', 'y.half', 'z.half', 'braceleft.half', 'uniFFE8', 'braceright.half', 'macron.half', 'spacekata.half', 'uniFF61', 'uniFF62', 'uniFF63', 'uniFF64', 'uniFF65', 'uniFF66', 'uniFF67', 'uniFF68', 'uniFF69', 'uniFF6A', 'uniFF6B', 'uniFF6C', 'uniFF6D', 'uniFF6E', 'uniFF6F', 'uniFF70', 'uniFF71', 'uniFF72', 'uniFF73', 'uniFF74', 'uniFF75', 'uniFF76', 'uniFF77', 'uniFF78', 'uniFF79', 'uniFF7A', 'uniFF7B', 'uniFF7C', 'uniFF7D', 'uniFF7E', 'uniFF7F', 'uniFF80', 'uniFF81', 'uniFF82', 'uniFF83', 'uniFF84', 'uniFF85', 'uniFF86', 'uniFF87', 'uniFF88', 'uniFF89', 'uniFF8A', 'uniFF8B', 'uniFF8C', 'uniFF8D', 'uniFF8E', 'uniFF8F', 'uniFF90', 'uniFF91', 'uniFF92', 'uniFF93', 'uniFF94', 'uniFF95', 'uniFF96', 'uniFF97', 'uniFF98', 'uniFF99', 'uniFF9A', 'uniFF9B', 'uniFF9C', 'uniFF9D', 'uniFF9E', 'uniFF9F', 'grave.half', 'uni30F0.half', 'uni30F1.half', 'uni30EE.half', 'uni30F5.half', 'uni30F6.half', 'uni30F4.half', 'uni30AC.half', 'uni30AE.half', 'uni30B0.half', 'uni30B2.half', 'uni30B4.half', 'uni30B6.half', 'uni30B8.half', 'uni30BA.half', 'uni30BC.half', 'uni30BE.half', 'uni30C0.half', 'uni30C2.half', 'uni30C5.half', 'uni30C7.half', 'uni30C9.half', 'uni30D0.half', 'uni30D1.half', 'uni30D3.half', 'uni30D4.half', 'uni30D6.half', 'uni30D7.half', 'uni30D9.half', 'uni30DA.half', 'uni30DC.half', 'uni30DD.half', 'space.half', 'uni301D.half', 'uni301F.half', 'uni2500.half', 'uni2501.half', 'uni2502.half', 'uni2503.half', 'uni2504.half', 'uni2505.half', 'uni2506.half', 'uni2507.half', 'uni2508.half', 'uni2509.half', 'uni250A.half', 'uni250B.half', 'uni250C.half', 'uni250D.half', 'uni250E.half', 'uni250F.half', 'uni2510.half', 'uni2511.half', 'uni2512.half', 'uni2513.half', 'uni2514.half', 'uni2515.half', 'uni2516.half', 'uni2517.half', 'uni2518.half', 'uni2519.half', 'uni251A.half', 'uni251B.half', 'uni251C.half', 'uni251D.half', 'uni251E.half', 'uni251F.half', 'uni2520.half', 'uni2521.half', 'uni2522.half', 'uni2523.half', 'uni2524.half', 'uni2525.half', 'uni2526.half', 'uni2527.half', 'uni2528.half', 'uni2529.half', 'uni252A.half', 'uni252B.half', 'uni252C.half', 'uni252D.half', 'uni252E.half', 'uni252F.half', 'uni2530.half', 'uni2531.half', 'uni2532.half', 'uni2533.half', 'uni2534.half', 'uni2535.half', 'uni2536.half', 'uni2537.half', 'uni2538.half', 'uni2539.half', 'uni253A.half', 'uni253B.half', 'uni253C.half', 'uni253D.half', 'uni253E.half', 'uni253F.half', 'uni2540.half', 'uni2541.half', 'uni2542.half', 'uni2543.half', 'uni2544.half', 'uni2545.half', 'uni2546.half', 'uni2547.half', 'uni2548.half', 'uni2549.half', 'uni254A.half', 'uni254B.half', 'acute.half', 'dieresis.half', 'quotedblleft.half', 'uni3014.half', 'uni3015.half', 'uni3008.half', 'uni3009.half', 'uni300A.half', 'uni300B.half', 'uni300E.half', 'uni300F.half', 'uni3010.half', 'uni3011.half', 'endash.half', 'spacehira.half', 'uni3092.half', 'uni3041.half', 'uni3043.half', 'uni3045.half', 'uni3047.half', 'uni3049.half', 'uni3083.half', 'uni3085.half', 'uni3087.half', 'uni3063.half', 'uni3042.half', 'uni3044.half', 'uni3046.half', 'uni3048.half', 'uni304A.half', 'uni304B.half', 'uni304D.half', 'uni304F.half', 'uni3051.half', 'uni3053.half', 'uni3055.half', 'uni3057.half', 'uni3059.half', 'uni305B.half', 'uni305D.half', 'uni305F.half', 'uni3061.half', 'uni3064.half', 'uni3066.half', 'uni3068.half', 'uni306A.half', 'uni306B.half', 'uni306C.half', 'uni306D.half', 'uni306E.half', 'uni306F.half', 'uni3072.half', 'uni3075.half', 'uni3078.half', 'uni307B.half', 'uni307E.half', 'uni307F.half', 'uni3080.half', 'uni3081.half', 'uni3082.half', 'uni3084.half', 'uni3086.half', 'uni3088.half', 'uni3089.half', 'uni308A.half', 'uni308B.half', 'uni308C.half', 'uni308D.half', 'uni308F.half', 'uni3093.half', 'uni3090.half', 'uni3091.half', 'uni308E.half', 'uni304C.half', 'uni304E.half', 'uni3050.half', 'uni3052.half', 'uni3054.half', 'uni3056.half', 'uni3058.half', 'uni305A.half', 'uni305C.half', 'uni305E.half', 'uni3060.half', 'uni3062.half', 'uni3065.half', 'uni3067.half', 'uni3069.half', 'uni3070.half', 'uni3071.half', 'uni3073.half', 'uni3074.half', 'uni3076.half', 'uni3077.half', 'uni3079.half', 'uni307A.half', 'uni307C.half', 'uni307D.half', 'Adieresis.half', 'ugrave.half', 'eacute.half', 'iacute.half', 'germandbls.half', 'ccedilla.half', 'Ccedilla.half', 'Ntilde.half', 'ntilde.half', 'cent.half', 'sterling.half', 'oacute.half', 'uacute.half', 'exclamdown.half', 'questiondown.half', 'one_fraction_two.nut.half', 'Odieresis.half', 'Udieresis.half', 'adieresis.half', 'edieresis.half', 'idieresis.half', 'odieresis.half', 'udieresis.half', 'acircumflex.half', 'ecircumflex.half', 'icircumflex.half', 'ocircumflex.half', 'ucircumflex.half', 'agrave.half', 'egrave.half', 'triagup.half', 'aacute.half', 'asciitilde.half', 'zero.zero.half', 'logicalnot.half', 'backslash.half', 'CR', 'acute', 'dieresis', 'uni2215', 'Euro', 'uni2074', 'minus', 'uni00A0'] [code: mono-outliers]โ WARN: Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?
* [com.google.fonts/check/gasp](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/gasp) * โน **INFO** These are the ppm ranges declared on the gasp table: PPM <= 65535: flag = 0x0A - Use grayscale rendering - Use smoothing along multiple axes with ClearTypeยฎ [code: ranges] * โ **WARN** The gasp range 0xFFFF value 0x0A should be set to 0x0F. [code: unset-flags]โ WARN: Check if each glyph has the recommended amount of contours.
* [com.google.fonts/check/contour_count](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/contour_count) * โ **WARN** This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct. The following glyphs do not have the recommended number of contours: Glyph name: percent Contours detected: 4 Expected: 5 Glyph name: at Contours detected: 4 Expected: 2 Glyph name: registered Contours detected: 5 Expected: 3 or 4 Glyph name: onehalf Contours detected: 1 Expected: 3 Glyph name: Agrave Contours detected: 2 Expected: 3 Glyph name: Aacute Contours detected: 2 Expected: 3 Glyph name: Egrave Contours detected: 1 Expected: 2 Glyph name: Eacute Contours detected: 1 Expected: 2 Glyph name: Igrave Contours detected: 1 Expected: 2 Glyph name: Iacute Contours detected: 1 Expected: 2 Glyph name: Ograve Contours detected: 2 Expected: 3 Glyph name: Oacute Contours detected: 2 Expected: 3 Glyph name: Ocircumflex Contours detected: 2 Expected: 3 Glyph name: eth Contours detected: 3 Expected: 2 Glyph name: Scaron Contours detected: 1 Expected: 2 Glyph name: Zcaron Contours detected: 1 Expected: 2 Glyph name: perthousand Contours detected: 5 Expected: 6 or 7 Glyph name: uni210A Contours detected: 3 Expected: 2 Glyph name: trademark Contours detected: 1 Expected: 2 Glyph name: uni255E Contours detected: 1 Expected: 2 Glyph name: uni2561 Contours detected: 1 Expected: 2 Glyph name: Aacute Contours detected: 2 Expected: 3 Glyph name: Agrave Contours detected: 2 Expected: 3 Glyph name: Eacute Contours detected: 1 Expected: 2 Glyph name: Egrave Contours detected: 1 Expected: 2 Glyph name: Iacute Contours detected: 1 Expected: 2 Glyph name: Igrave Contours detected: 1 Expected: 2 Glyph name: Oacute Contours detected: 2 Expected: 3 Glyph name: Ocircumflex Contours detected: 2 Expected: 3 Glyph name: Ograve Contours detected: 2 Expected: 3 Glyph name: Scaron Contours detected: 1 Expected: 2 Glyph name: Zcaron Contours detected: 1 Expected: 2 Glyph name: at Contours detected: 4 Expected: 2 Glyph name: eth Contours detected: 3 Expected: 2 Glyph name: onehalf Contours detected: 1 Expected: 3 Glyph name: percent Contours detected: 4 Expected: 5 Glyph name: perthousand Contours detected: 5 Expected: 6 or 7 Glyph name: registered Contours detected: 5 Expected: 3 or 4 Glyph name: trademark Contours detected: 1 Expected: 2 Glyph name: uni210A Contours detected: 3 Expected: 2 [code: contour-count]โ WARN: Are there caret positions declared for every ligature?
* [com.google.fonts/check/ligature_carets](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/ligature_carets) * โ **WARN** GDEF table is missing, but it is mandatory to declare it on fonts that provide ligature glyphs because the caret (text cursor) positioning for each ligature must be provided in this table. [code: GDEF-missing]โ WARN: Ensure fonts have ScriptLangTags declared on the 'meta' table.
* [com.google.fonts/check/meta/script_lang_tags](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/meta/script_lang_tags) * โ **WARN** This font file does not have a 'meta' table. [code: lacks-meta-table]โ WARN: Does the font have a DSIG table?
* [com.google.fonts/check/dsig](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/dsig.html#com.google.fonts/check/dsig) * โ **WARN** This font has a digital signature (DSIG table) which is only required - even if only a dummy placeholder - on old programs like MS Office 2013 in order to work properly. The current recommendation is to completely remove the DSIG table. [code: found-DSIG]โ WARN: Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value
* [com.google.fonts/check/gpos_kerning_info](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/gpos.html#com.google.fonts/check/gpos_kerning_info) * โ **WARN** GPOS table lacks kerning information. [code: lacks-kern-info]๐ค SKIP: Does DESCRIPTION file contain broken links?
* [com.google.fonts/check/description/broken_links](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/description/broken_links) * ๐ค **SKIP** Unfulfilled Conditions: description_html๐ค SKIP: Does DESCRIPTION file contain a upstream Git repo URL?
* [com.google.fonts/check/description/git_url](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/description/git_url) * ๐ค **SKIP** Unfulfilled Conditions: description_html๐ค SKIP: Is this a proper HTML snippet?
* [com.google.fonts/check/description/valid_html](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/description/valid_html) * ๐ค **SKIP** Unfulfilled Conditions: description๐ค SKIP: DESCRIPTION.en_us.html must have more than 200 bytes.
* [com.google.fonts/check/description/min_length](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/description/min_length) * ๐ค **SKIP** Unfulfilled Conditions: description๐ค SKIP: DESCRIPTION.en_us.html must have less than 2000 bytes.
* [com.google.fonts/check/description/max_length](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/description/max_length) * ๐ค **SKIP** Unfulfilled Conditions: description๐ค SKIP: DESCRIPTION.en_us.html should end in a linebreak.
* [com.google.fonts/check/description/eof_linebreak](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/description/eof_linebreak) * ๐ค **SKIP** Unfulfilled Conditions: description๐ค SKIP: Check METADATA.pb parse correctly.
* [com.google.fonts/check/metadata/parses](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/parses) * ๐ค **SKIP** Font family at '.' lacks a METADATA.pb file. [code: file-not-found]๐ค SKIP: Font designer field in METADATA.pb must not be 'unknown'.
* [com.google.fonts/check/metadata/unknown_designer](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/unknown_designer) * ๐ค **SKIP** Unfulfilled Conditions: family_metadata๐ค SKIP: Font designer field in METADATA.pb must not contain 'Multiple designers'.
* [com.google.fonts/check/metadata/multiple_designers](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/multiple_designers) * ๐ค **SKIP** Unfulfilled Conditions: family_metadata๐ค SKIP: Multiple values in font designer field in METADATA.pb must be separated by commas.
* [com.google.fonts/check/metadata/designer_values](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/designer_values) * ๐ค **SKIP** Unfulfilled Conditions: family_metadata๐ค SKIP: Does METADATA.pb copyright field contain broken links?
* [com.google.fonts/check/metadata/broken_links](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/broken_links) * ๐ค **SKIP** Unfulfilled Conditions: family_metadata๐ค SKIP: Ensure METADATA.pb lists all font binaries.
* [com.google.fonts/check/metadata/undeclared_fonts](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/undeclared_fonts) * ๐ค **SKIP** Unfulfilled Conditions: family_metadata๐ค SKIP: Ensure METADATA.pb category field is valid.
* [com.google.fonts/check/metadata/category](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/category) * ๐ค **SKIP** Unfulfilled Conditions: family_metadata๐ค SKIP: Check font has a license.
* [com.google.fonts/check/family/has_license](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/family/has_license) * ๐ค **SKIP** Unfulfilled Conditions: gfonts_repo_structure๐ค SKIP: Font has ttfautohint params?
* [com.google.fonts/check/has_ttfautohint_params](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/has_ttfautohint_params) * ๐ค **SKIP** Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]๐ค SKIP: METADATA.pb: Fontfamily is listed on Google Fonts API?
* [com.google.fonts/check/metadata/listed_on_gfonts](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/listed_on_gfonts) * ๐ค **SKIP** Unfulfilled Conditions: family_metadata๐ค SKIP: METADATA.pb: check if fonts field only has unique "full_name" values.
* [com.google.fonts/check/metadata/unique_full_name_values](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/unique_full_name_values) * ๐ค **SKIP** Unfulfilled Conditions: family_metadata๐ค SKIP: METADATA.pb: check if fonts field only contains unique style:weight pairs.
* [com.google.fonts/check/metadata/unique_weight_style_pairs](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/unique_weight_style_pairs) * ๐ค **SKIP** Unfulfilled Conditions: family_metadata๐ค SKIP: METADATA.pb license is "APACHE2", "UFL" or "OFL"?
* [com.google.fonts/check/metadata/license](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/license) * ๐ค **SKIP** Unfulfilled Conditions: family_metadata๐ค SKIP: METADATA.pb should contain at least "menu" and "latin" subsets.
* [com.google.fonts/check/metadata/menu_and_latin](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/menu_and_latin) * ๐ค **SKIP** Unfulfilled Conditions: family_metadata๐ค SKIP: METADATA.pb subsets should be alphabetically ordered.
* [com.google.fonts/check/metadata/subsets_order](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/subsets_order) * ๐ค **SKIP** Unfulfilled Conditions: family_metadata๐ค SKIP: Check METADATA.pb includes production subsets.
* [com.google.fonts/check/metadata/includes_production_subsets](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/includes_production_subsets) * ๐ค **SKIP** Unfulfilled Conditions: family_metadata๐ค SKIP: METADATA.pb: Copyright notice is the same in all fonts?
* [com.google.fonts/check/metadata/copyright](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/copyright) * ๐ค **SKIP** Unfulfilled Conditions: family_metadata๐ค SKIP: Check that METADATA.pb family values are all the same.
* [com.google.fonts/check/metadata/familyname](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/familyname) * ๐ค **SKIP** Unfulfilled Conditions: family_metadata๐ค SKIP: METADATA.pb: According to Google Fonts standards, families should have a Regular style.
* [com.google.fonts/check/metadata/has_regular](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/has_regular) * ๐ค **SKIP** Unfulfilled Conditions: family_metadata๐ค SKIP: METADATA.pb: Regular should be 400.
* [com.google.fonts/check/metadata/regular_is_400](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/regular_is_400) * ๐ค **SKIP** Unfulfilled Conditions: family_metadata, has_regular_style๐ค SKIP: Checks METADATA.pb font.name field matches family name declared on the name table.
* [com.google.fonts/check/metadata/nameid/family_name](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/nameid/family_name) * ๐ค **SKIP** Unfulfilled Conditions: font_metadata๐ค SKIP: Checks METADATA.pb font.post_script_name matches postscript name declared on the name table.
* [com.google.fonts/check/metadata/nameid/post_script_name](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/nameid/post_script_name) * ๐ค **SKIP** Unfulfilled Conditions: font_metadata๐ค SKIP: METADATA.pb font.full_name value matches fullname declared on the name table?
* [com.google.fonts/check/metadata/nameid/full_name](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/nameid/full_name) * ๐ค **SKIP** Unfulfilled Conditions: font_metadata๐ค SKIP: METADATA.pb font.name value should be same as the family name declared on the name table.
* [com.google.fonts/check/metadata/nameid/font_name](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/nameid/font_name) * ๐ค **SKIP** Unfulfilled Conditions: font_metadata๐ค SKIP: METADATA.pb font.full_name and font.post_script_name fields have equivalent values ?
* [com.google.fonts/check/metadata/match_fullname_postscript](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/match_fullname_postscript) * ๐ค **SKIP** Unfulfilled Conditions: font_metadata๐ค SKIP: METADATA.pb font.filename and font.post_script_name fields have equivalent values?
* [com.google.fonts/check/metadata/match_filename_postscript](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/match_filename_postscript) * ๐ค **SKIP** Unfulfilled Conditions: font_metadata๐ค SKIP: METADATA.pb font.name field contains font name in right format?
* [com.google.fonts/check/metadata/valid_name_values](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/valid_name_values) * ๐ค **SKIP** Unfulfilled Conditions: font_metadata๐ค SKIP: METADATA.pb font.full_name field contains font name in right format?
* [com.google.fonts/check/metadata/valid_full_name_values](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/valid_full_name_values) * ๐ค **SKIP** Unfulfilled Conditions: font_metadata๐ค SKIP: METADATA.pb font.filename field contains font name in right format?
* [com.google.fonts/check/metadata/valid_filename_values](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/valid_filename_values) * ๐ค **SKIP** Unfulfilled Conditions: family_metadata๐ค SKIP: METADATA.pb font.post_script_name field contains font name in right format?
* [com.google.fonts/check/metadata/valid_post_script_name_values](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/valid_post_script_name_values) * ๐ค **SKIP** Unfulfilled Conditions: font_metadata๐ค SKIP: Copyright notices match canonical pattern in METADATA.pb
* [com.google.fonts/check/metadata/valid_copyright](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/valid_copyright) * ๐ค **SKIP** Unfulfilled Conditions: font_metadata๐ค SKIP: Copyright notice on METADATA.pb should not contain 'Reserved Font Name'.
* [com.google.fonts/check/metadata/reserved_font_name](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/reserved_font_name) * ๐ค **SKIP** Unfulfilled Conditions: font_metadata๐ค SKIP: METADATA.pb: Copyright notice shouldn't exceed 500 chars.
* [com.google.fonts/check/metadata/copyright_max_length](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/copyright_max_length) * ๐ค **SKIP** Unfulfilled Conditions: font_metadata๐ค SKIP: METADATA.pb: Font filenames match font.filename entries?
* [com.google.fonts/check/metadata/filenames](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/filenames) * ๐ค **SKIP** Unfulfilled Conditions: family_metadata๐ค SKIP: METADATA.pb font.style "italic" matches font internals?
* [com.google.fonts/check/metadata/italic_style](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/italic_style) * ๐ค **SKIP** Unfulfilled Conditions: font_metadata๐ค SKIP: METADATA.pb font.style "normal" matches font internals?
* [com.google.fonts/check/metadata/normal_style](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/normal_style) * ๐ค **SKIP** Unfulfilled Conditions: font_metadata๐ค SKIP: METADATA.pb font.name and font.full_name fields match the values declared on the name table?
* [com.google.fonts/check/metadata/nameid/family_and_full_names](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/nameid/family_and_full_names) * ๐ค **SKIP** Unfulfilled Conditions: font_metadata๐ค SKIP: METADATA.pb: Check if fontname is not camel cased.
* [com.google.fonts/check/metadata/fontname_not_camel_cased](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/fontname_not_camel_cased) * ๐ค **SKIP** Unfulfilled Conditions: font_metadata๐ค SKIP: METADATA.pb: Check font name is the same as family name.
* [com.google.fonts/check/metadata/match_name_familyname](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/match_name_familyname) * ๐ค **SKIP** Unfulfilled Conditions: family_metadata, font_metadata๐ค SKIP: METADATA.pb: Check that font weight has a canonical value.
* [com.google.fonts/check/metadata/canonical_weight_value](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/canonical_weight_value) * ๐ค **SKIP** Unfulfilled Conditions: font_metadata๐ค SKIP: Check METADATA.pb font weights are correct.
* [com.google.fonts/check/metadata/os2_weightclass](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/os2_weightclass) * ๐ค **SKIP** Unfulfilled Conditions: font_metadata๐ค SKIP: METADATA.pb weight matches postScriptName for static fonts.
* [com.google.fonts/check/metadata/match_weight_postscript](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/match_weight_postscript) * ๐ค **SKIP** Unfulfilled Conditions: font_metadata๐ค SKIP: METADATA.pb: Font styles are named canonically?
* [com.google.fonts/check/metadata/canonical_style_names](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/canonical_style_names) * ๐ค **SKIP** Unfulfilled Conditions: font_metadata๐ค SKIP: Version number has increased since previous release on Google Fonts?
* [com.google.fonts/check/version_bump](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/version_bump) * ๐ค **SKIP** Unfulfilled Conditions: api_gfonts_ttFont๐ค SKIP: Glyphs are similiar to Google Fonts version?
* [com.google.fonts/check/production_glyphs_similarity](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/production_glyphs_similarity) * ๐ค **SKIP** Unfulfilled Conditions: api_gfonts_ttFont๐ค SKIP: Copyright field for this font on METADATA.pb matches all copyright notice entries on the name table ?
* [com.google.fonts/check/metadata/nameid/copyright](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/nameid/copyright) * ๐ค **SKIP** Unfulfilled Conditions: font_metadata๐ค SKIP: Check a static ttf can be generated from a variable font.
* [com.google.fonts/check/varfont/generate_static](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/varfont/generate_static) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font๐ค SKIP: Check that variable fonts have an HVAR table.
* [com.google.fonts/check/varfont/has_HVAR](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/varfont/has_HVAR) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font๐ค SKIP: All name entries referenced by fvar instances exist on the name table?
* [com.google.fonts/check/fvar_name_entries](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/fvar_name_entries) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font๐ค SKIP: A variable font must have named instances.
* [com.google.fonts/check/varfont_has_instances](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/varfont_has_instances) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font๐ค SKIP: Variable font weight coordinates must be multiples of 100.
* [com.google.fonts/check/varfont_weight_instances](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/varfont_weight_instances) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font๐ค SKIP: PPEM must be an integer on hinted fonts.
* [com.google.fonts/check/integer_ppem_if_hinted](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/integer_ppem_if_hinted) * ๐ค **SKIP** Unfulfilled Conditions: is_hinted๐ค SKIP: Is there kerning info for non-ligated sequences?
* [com.google.fonts/check/kerning_for_non_ligated_sequences](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/kerning_for_non_ligated_sequences) * ๐ค **SKIP** Unfulfilled Conditions: has_kerning_info๐ค SKIP: Directory name in GFonts repo structure must match NameID 1 of the regular.
* [com.google.fonts/check/repo/dirname_matches_nameid_1](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/repo/dirname_matches_nameid_1) * ๐ค **SKIP** Unfulfilled Conditions: gfonts_repo_structure๐ค SKIP: A static fonts directory with at least two fonts must accompany variable fonts
* [com.google.fonts/check/repo/vf_has_static_fonts](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/repo/vf_has_static_fonts) * ๐ค **SKIP** Unfulfilled Conditions: gfonts_repo_structure, is_variable_font๐ค SKIP: Check upstream.yaml file contains all required fields
* [com.google/fonts/check/repo/upstream_yaml_has_required_fields](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google/fonts/check/repo/upstream_yaml_has_required_fields) * ๐ค **SKIP** Unfulfilled Conditions: upstream_yaml๐ค SKIP: Check if the vertical metrics of a family are similar to the same family hosted on Google Fonts.
* [com.google.fonts/check/vertical_metrics_regressions](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/vertical_metrics_regressions) * ๐ค **SKIP** Unfulfilled Conditions: regular_remote_style, not is_cjk_font๐ค SKIP: Check if the vertical metrics of a CJK family are similar to the same family hosted on Google Fonts.
* [com.google.fonts/check/cjk_vertical_metrics_regressions](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/cjk_vertical_metrics_regressions) * ๐ค **SKIP** Unfulfilled Conditions: regular_remote_style๐ค SKIP: Check variable font instances have correct coordinate values
* [com.google.fonts/check/varfont_instance_coordinates](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/varfont_instance_coordinates) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font๐ค SKIP: Check variable font instances have correct names
* [com.google.fonts/check/varfont_instance_names](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/varfont_instance_names) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font๐ค SKIP: Check variable font instances don't have duplicate names
* [com.google.fonts/check/varfont_duplicate_instance_names](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/varfont_duplicate_instance_names) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font๐ค SKIP: Ensure VFs do not contain slnt or ital axes.
* [com.google.fonts/check/varfont/unsupported_axes](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/varfont/unsupported_axes) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font๐ค SKIP: Validate METADATA.pb axes values are within gf-axisregistry bounds.
* [com.google.fonts/check/metadata/gf-axisregistry_bounds](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/gf-axisregistry_bounds) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, family_metadata๐ค SKIP: Validate METADATA.pb axes tags are defined in gf-axisregistry.
* [com.google.fonts/check/metadata/gf-axisregistry_valid_tags](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/gf-axisregistry_valid_tags) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, family_metadata๐ค SKIP: Validate defaults on fvar table match registered fallback names in GFAxisRegistry.
* [com.google.fonts/check/gf-axisregistry/fvar_axis_defaults](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/gf-axisregistry/fvar_axis_defaults) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font๐ค SKIP: Validate STAT particle names and values match the fallback names in GFAxisRegistry.
* [com.google.fonts/check/STAT/gf-axisregistry](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/STAT/gf-axisregistry) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font๐ค SKIP: Validate VF axes match the ones declared on METADATA.pb.
* [com.google.fonts/check/metadata/consistent_axis_enumeration](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/consistent_axis_enumeration) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, family_metadata๐ค SKIP: Ensure METADATA.pb does not use escaped strings.
* [com.google.fonts/check/metadata/escaped_strings](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/escaped_strings) * ๐ค **SKIP** Unfulfilled Conditions: metadata_file๐ค SKIP: METADATA.pb: Designers are listed correctly on the Google Fonts catalog?
* [com.google.fonts/check/metadata/designer_profiles](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/metadata/designer_profiles) * ๐ค **SKIP** Unfulfilled Conditions: family_metadata๐ค SKIP: Ensure variable fonts include an avar table.
* [com.google.fonts/check/mandatory_avar_table](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/mandatory_avar_table) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font๐ค SKIP: On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.
* [com.google.fonts/check/description/family_update](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/description/family_update) * ๐ค **SKIP** Unfulfilled Conditions: description๐ค SKIP: OS/2.fsSelection bit 7 (USE_TYPO_METRICS) is set in all fonts.
* [com.google.fonts/check/os2/use_typo_metrics](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/os2/use_typo_metrics) * ๐ค **SKIP** Unfulfilled Conditions: not is_cjk_font๐ค SKIP: Checking OS/2 usWinAscent & usWinDescent.
* [com.google.fonts/check/family/win_ascent_and_descent](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/family/win_ascent_and_descent) * ๐ค **SKIP** Unfulfilled Conditions: not is_cjk_font๐ค SKIP: Checking OS/2 Metrics match hhea Metrics.
* [com.google.fonts/check/os2_metrics_match_hhea](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/os2_metrics_match_hhea) * ๐ค **SKIP** Unfulfilled Conditions: not is_cjk_font๐ค SKIP: Check correctness of STAT table strings
* [com.google.fonts/check/STAT_strings](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/STAT_strings) * ๐ค **SKIP** Unfulfilled Conditions: STAT_table๐ค SKIP: Each font in set of sibling families must have the same set of vertical metrics values.
* [com.google.fonts/check/superfamily/vertical_metrics](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/superfamily/vertical_metrics) * ๐ค **SKIP** Sibling families were not detected.๐ค SKIP: Ensure indic fonts have the Indian Rupee Sign glyph.
* [com.google.fonts/check/rupee](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/rupee) * ๐ค **SKIP** Unfulfilled Conditions: is_indic_font๐ค SKIP: Is the CFF subr/gsubr call depth > 10?
* [com.adobe.fonts/check/cff_call_depth](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/cff.html#com.adobe.fonts/check/cff_call_depth) * ๐ค **SKIP** Unfulfilled Conditions: is_cff๐ค SKIP: Is the CFF2 subr/gsubr call depth > 10?
* [com.adobe.fonts/check/cff2_call_depth](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/cff.html#com.adobe.fonts/check/cff2_call_depth) * ๐ค **SKIP** Unfulfilled Conditions: is_cff2๐ค SKIP: Does the font use deprecated CFF operators or operations?
* [com.adobe.fonts/check/cff_deprecated_operators](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/cff.html#com.adobe.fonts/check/cff_deprecated_operators) * ๐ค **SKIP** Unfulfilled Conditions: is_cff๐ค SKIP: CFF table FontName must match name table ID 6 (PostScript name).
* [com.adobe.fonts/check/name/postscript_vs_cff](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/name.html#com.adobe.fonts/check/name/postscript_vs_cff) * ๐ค **SKIP** Unfulfilled Conditions: is_cff๐ค SKIP: Check glyphs in mark glyph class are non-spacing.
* [com.google.fonts/check/gdef_spacing_marks](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/gdef.html#com.google.fonts/check/gdef_spacing_marks) * ๐ค **SKIP** Font does not declare an optional "GDEF" table or has any GDEF glyph class definition.๐ค SKIP: Check mark characters are in GDEF mark glyph class.
* [com.google.fonts/check/gdef_mark_chars](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/gdef.html#com.google.fonts/check/gdef_mark_chars) * ๐ค **SKIP** Font does not declare an optional "GDEF" table or has any GDEF glyph class definition.๐ค SKIP: Check GDEF mark glyph class doesn't have characters that are not marks.
* [com.google.fonts/check/gdef_non_mark_chars](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/gdef.html#com.google.fonts/check/gdef_non_mark_chars) * ๐ค **SKIP** Font does not declare an optional "GDEF" table or has any GDEF glyph class definition.๐ค SKIP: The variable font 'wght' (Weight) axis coordinate must be 400 on the 'Regular' instance.
* [com.google.fonts/check/varfont/regular_wght_coord](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/fvar.html#com.google.fonts/check/varfont/regular_wght_coord) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, regular_wght_coord๐ค SKIP: The variable font 'wdth' (Width) axis coordinate must be 100 on the 'Regular' instance.
* [com.google.fonts/check/varfont/regular_wdth_coord](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/fvar.html#com.google.fonts/check/varfont/regular_wdth_coord) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, regular_wdth_coord๐ค SKIP: The variable font 'slnt' (Slant) axis coordinate must be zero on the 'Regular' instance.
* [com.google.fonts/check/varfont/regular_slnt_coord](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/fvar.html#com.google.fonts/check/varfont/regular_slnt_coord) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, regular_slnt_coord๐ค SKIP: The variable font 'ital' (Italic) axis coordinate must be zero on the 'Regular' instance.
* [com.google.fonts/check/varfont/regular_ital_coord](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/fvar.html#com.google.fonts/check/varfont/regular_ital_coord) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, regular_ital_coord๐ค SKIP: The variable font 'opsz' (Optical Size) axis coordinate should be between 10 and 16 on the 'Regular' instance.
* [com.google.fonts/check/varfont/regular_opsz_coord](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/fvar.html#com.google.fonts/check/varfont/regular_opsz_coord) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, regular_opsz_coord๐ค SKIP: The variable font 'wght' (Weight) axis coordinate must be 700 on the 'Bold' instance.
* [com.google.fonts/check/varfont/bold_wght_coord](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/fvar.html#com.google.fonts/check/varfont/bold_wght_coord) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, bold_wght_coord๐ค SKIP: The variable font 'wght' (Weight) axis coordinate must be within spec range of 1 to 1000 on all instances.
* [com.google.fonts/check/varfont/wght_valid_range](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/fvar.html#com.google.fonts/check/varfont/wght_valid_range) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font๐ค SKIP: The variable font 'wdth' (Weight) axis coordinate must be within spec range of 1 to 1000 on all instances.
* [com.google.fonts/check/varfont/wdth_valid_range](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/fvar.html#com.google.fonts/check/varfont/wdth_valid_range) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font๐ค SKIP: The variable font 'slnt' (Slant) axis coordinate specifies positive values in its range?
* [com.google.fonts/check/varfont/slnt_range](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/fvar.html#com.google.fonts/check/varfont/slnt_range) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font, slnt_axis๐ค SKIP: All fvar axes have a correspondent Axis Record on STAT table?
* [com.google.fonts/check/varfont/stat_axis_record_for_each_axis](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/stat.html#com.google.fonts/check/varfont/stat_axis_record_for_each_axis) * ๐ค **SKIP** Unfulfilled Conditions: is_variable_font๐ค SKIP: Check that texts shape as per expectation
* [com.google.fonts/check/shaping/regression](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/๐ค SKIP: Check that no forbidden glyphs are found while shaping
* [com.google.fonts/check/shaping/forbidden](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/๐ค SKIP: Check that no collisions are found while shaping
* [com.google.fonts/check/shaping/collides](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/โน INFO: Show hinting filesize impact.
* [com.google.fonts/check/hinting_impact](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/hinting_impact) * โน **INFO** Hinting filesize impact: | | DotGothic16-Regular.ttf | |:------------- | ---------------:| | Dehinted Size | 2.0Mb | | Hinted Size | 2.0Mb | | Increase | 0 bytes | | Change | 0.0 % | [code: size-impact]โน INFO: Font has old ttfautohint applied?
* [com.google.fonts/check/old_ttfautohint](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/old_ttfautohint) * โน **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 1.100'] [code: version-not-detected]โน INFO: EPAR table present in font?
* [com.google.fonts/check/epar](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/epar) * โน **INFO** EPAR table not present in font. To learn more see https://github.com/googlefonts/fontbakery/issues/818 [code: lacks-EPAR]โน INFO: Check for font-v versioning.
* [com.google.fonts/check/fontv](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/fontv) * โน **INFO** Version string is: "Version 1.100" 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" [code: bad-format]โน INFO: Font contains all required tables?
* [com.google.fonts/check/required_tables](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/required_tables) * โน **INFO** This font contains the following optional tables: - loca - BASE - GPOS - GSUB - gasp - vhea - vmtx [code: optional-tables] * ๐ **PASS** Font contains all required tables.โน INFO: List all superfamily filepaths
* [com.google.fonts/check/superfamily/list](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/superfamily/list) * โน **INFO** . [code: family-path]๐ PASS: Checking file is named canonically.
* [com.google.fonts/check/canonical_filename](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/canonical_filename) * ๐ **PASS** DotGothic16-Regular.ttf is named canonically.๐ PASS: Checking OS/2 fsType does not impose restrictions.
* [com.google.fonts/check/fstype](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/fstype) * ๐ **PASS** OS/2 fsType is properly set to zero.๐ PASS: Checking OS/2 achVendID.
* [com.google.fonts/check/vendor_id](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/vendor_id) * ๐ **PASS** OS/2 VendorID 'FWKS' looks good!๐ PASS: Check `Google Fonts Latin Core` glyph coverage.
* [com.google.fonts/check/glyph_coverage](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/glyph_coverage) * ๐ **PASS** OK๐ PASS: Substitute copyright, registered and trademark symbols in name table entries.
* [com.google.fonts/check/name/unwanted_chars](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/name/unwanted_chars) * ๐ **PASS** No need to substitute copyright, registered and trademark symbols in name table entries of this font.๐ PASS: Checking OS/2 usWeightClass.
* [com.google.fonts/check/usweightclass](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/usweightclass) * ๐ **PASS** OS/2 usWeightClass is good๐ PASS: Check license file has good copyright string.
* [com.google.fonts/check/license/OFL_copyright](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/license/OFL_copyright) * ๐ **PASS** looks good๐ PASS: Check OFL body text is correct.
* [com.google.fonts/check/license/OFL_body_text](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/license/OFL_body_text) * ๐ **PASS** OFL license body text is correct๐ PASS: Check copyright namerecords match license file.
* [com.google.fonts/check/name/license](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/name/license) * ๐ **PASS** Licensing entry on name table is correctly set.๐ PASS: License URL matches License text on name table?
* [com.google.fonts/check/name/license_url](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/name/license_url) * ๐ **PASS** Font has a valid license URL in NAME table.๐ PASS: Description strings in the name table must not exceed 200 characters.
* [com.google.fonts/check/name/description_max_length](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/name/description_max_length) * ๐ **PASS** All description name records have reasonably small lengths.๐ PASS: Version format is correct in 'name' table?
* [com.google.fonts/check/name/version_format](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/name/version_format) * ๐ **PASS** Version format in NAME table entries is correct.๐ PASS: Make sure family name does not begin with a digit.
* [com.google.fonts/check/name/familyname_first_char](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/name/familyname_first_char) * ๐ **PASS** Font family name first character is not a digit.๐ PASS: Are there non-ASCII characters in ASCII-only NAME table entries?
* [com.google.fonts/check/name/ascii_only_entries](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/name/ascii_only_entries) * ๐ **PASS** None of the ASCII-only NAME table entries contain non-ASCII characteres.๐ PASS: Copyright notices match canonical pattern in fonts
* [com.google.fonts/check/font_copyright](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/font_copyright) * ๐ **PASS** Name Table entry: Copyright field 'Copyright 2020 The DotGothic16 Project Authors (https://github.com/fontworks-fonts/DotGothic16/)' matches canonical pattern. * ๐ **PASS** Name table copyright entries are good๐ PASS: Stricter unitsPerEm criteria for Google Fonts.
* [com.google.fonts/check/unitsperem_strict](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/unitsperem_strict) * ๐ **PASS** Font em size is good (unitsPerEm = 1000).๐ PASS: Checking OS/2 fsSelection value.
* [com.google.fonts/check/fsselection](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/fsselection) * ๐ **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.
* [com.google.fonts/check/italic_angle](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/italic_angle) * ๐ **PASS** Value of post.italicAngle is 0.0 with style="Regular".๐ PASS: Checking head.macStyle value.
* [com.google.fonts/check/mac_style](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/mac_style) * ๐ **PASS** head macStyle ITALIC bit is properly set. * ๐ **PASS** head macStyle BOLD bit is properly set.๐ PASS: Font has all mandatory 'name' table entries?
* [com.google.fonts/check/name/mandatory_entries](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/name/mandatory_entries) * ๐ **PASS** Font contains values for all mandatory name table entries.๐ PASS: Check name table: FONT_SUBFAMILY_NAME entries.
* [com.google.fonts/check/name/subfamilyname](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/name/subfamilyname) * ๐ **PASS** FONT_SUBFAMILY_NAME entries are all good.๐ PASS: Check name table: POSTSCRIPT_NAME entries.
* [com.google.fonts/check/name/postscriptname](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/name/postscriptname) * ๐ **PASS** POSTCRIPT_NAME entries are all good.๐ PASS: Check name table: TYPOGRAPHIC_FAMILY_NAME entries.
* [com.google.fonts/check/name/typographicfamilyname](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/name/typographicfamilyname) * ๐ **PASS** TYPOGRAPHIC_FAMILY_NAME entries are all good.๐ PASS: Check name table: TYPOGRAPHIC_SUBFAMILY_NAME entries.
* [com.google.fonts/check/name/typographicsubfamilyname](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/name/typographicsubfamilyname) * ๐ **PASS** TYPOGRAPHIC_SUBFAMILY_NAME entries are all good.๐ PASS: Length of copyright notice must not exceed 500 characters.
* [com.google.fonts/check/name/copyright_length](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/name/copyright_length) * ๐ **PASS** All copyright notice name entries on the 'name' table are shorter than 500 characters.๐ PASS: Familyname must be unique according to namecheck.fontdata.com
* [com.google.fonts/check/fontdata_namecheck](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/fontdata_namecheck) * ๐ **PASS** Font familyname seems to be unique.๐ PASS: There must not be VTT Talk sources in the font.
* [com.google.fonts/check/vttclean](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/vttclean) * ๐ **PASS** There are no tables with VTT Talk sources embedded in the font.๐ PASS: Are there unwanted Apple tables?
* [com.google.fonts/check/aat](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/aat) * ๐ **PASS** There are no unwanted AAT tables.๐ PASS: Combined length of family and style must not exceed 27 characters.
* [com.google.fonts/check/name/family_and_style_max_length](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/name/family_and_style_max_length) * ๐ **PASS** All name entries are good.๐ PASS: Name table entries should not contain line-breaks.
* [com.google.fonts/check/name/line_breaks](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/name/line_breaks) * ๐ **PASS** Name table entries are all single-line (no line-breaks found).๐ PASS: Name table strings must not contain the string 'Reserved Font Name'.
* [com.google.fonts/check/name/rfn](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/name/rfn) * ๐ **PASS** None of the name table strings contain "Reserved Font Name".๐ PASS: A font repository should not include fontbakery report files
* [com.google.fonts/check/repo/fb_report](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/repo/fb_report) * ๐ **PASS** OK๐ PASS: A font repository should not include ZIP files
* [com.google.fonts/check/repo/zip_files](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/repo/zip_files) * ๐ **PASS** OK๐ PASS: Check font follows the Google Fonts CJK vertical metric schema
* [com.google.fonts/check/cjk_vertical_metrics](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/cjk_vertical_metrics) * ๐ **PASS** Vertical metrics are good๐ PASS: Does the font contain less than 40 CJK characters?
* [com.google.fonts/check/cjk_not_enough_glyphs](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/cjk_not_enough_glyphs) * ๐ **PASS** Font has the correct quantity of CJK glyphs๐ PASS: Check small caps glyphs are available.
* [com.google.fonts/check/missing_small_caps_glyphs](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/missing_small_caps_glyphs) * ๐ **PASS** OK๐ PASS: Ensure Stylistic Sets have description.
* [com.google.fonts/check/stylisticset_description](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/stylisticset_description) * ๐ **PASS** OK๐ PASS: Ensure fonts do not contain any pre-production tables.
* [com.google.fonts/check/no_debugging_tables](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/no_debugging_tables) * ๐ **PASS** OK๐ PASS: Name table records must not have trailing spaces.
* [com.google.fonts/check/name/trailing_spaces](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/name/trailing_spaces) * ๐ **PASS** No trailing spaces on name table entries.๐ PASS: Checking with ftxvalidator.
* [com.google.fonts/check/ftxvalidator](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/ftxvalidator) * ๐ **PASS** ftxvalidator passed this file๐ PASS: Checking with ots-sanitize.
* [com.google.fonts/check/ots](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/ots) * ๐ **PASS** ots-sanitize passed this file๐ PASS: Font contains '.notdef' as its first glyph?
* [com.google.fonts/check/mandatory_glyphs](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/mandatory_glyphs) * ๐ **PASS** OK๐ PASS: Font contains glyphs for whitespace characters?
* [com.google.fonts/check/whitespace_glyphs](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/whitespace_glyphs) * ๐ **PASS** Font contains glyphs for whitespace characters.๐ PASS: Font has **proper** whitespace glyph names?
* [com.google.fonts/check/whitespace_glyphnames](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/whitespace_glyphnames) * ๐ **PASS** Font has **AGL recommended** names for whitespace glyphs.๐ PASS: Whitespace glyphs have ink?
* [com.google.fonts/check/whitespace_ink](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/whitespace_ink) * ๐ **PASS** There is no whitespace glyph with ink.๐ PASS: Are there unwanted tables?
* [com.google.fonts/check/unwanted_tables](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/unwanted_tables) * ๐ **PASS** There are no unwanted tables.๐ PASS: Glyph names are all valid?
* [com.google.fonts/check/valid_glyphnames](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/valid_glyphnames) * ๐ **PASS** Glyph names are all valid.๐ PASS: Font contains unique glyph names?
* [com.google.fonts/check/unique_glyphnames](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/unique_glyphnames) * ๐ **PASS** Font contains unique glyph names.๐ PASS: Checking with fontTools.ttx
* [com.google.fonts/check/ttx-roundtrip](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/universal.html#com.google.fonts/check/ttx-roundtrip) * ๐ **PASS** Hey! It all looks good!๐ PASS: Check all glyphs have codepoints assigned.
* [com.google.fonts/check/all_glyphs_have_codepoints](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/cmap.html#com.google.fonts/check/all_glyphs_have_codepoints) * ๐ **PASS** All glyphs have a codepoint value assigned.๐ PASS: Checking unitsPerEm value is reasonable.
* [com.google.fonts/check/unitsperem](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/head.html#com.google.fonts/check/unitsperem) * ๐ **PASS** The unitsPerEm value (1000) on the 'head' table is reasonable.๐ PASS: Checking font version fields (head and name table).
* [com.google.fonts/check/font_version](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/head.html#com.google.fonts/check/font_version) * ๐ **PASS** All font version fields match.๐ PASS: Check if OS/2 xAvgCharWidth is correct.
* [com.google.fonts/check/xavgcharwidth](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/os2.html#com.google.fonts/check/xavgcharwidth) * ๐ **PASS** OS/2 xAvgCharWidth value is correct.๐ PASS: Check if OS/2 fsSelection matches head macStyle bold and italic bits.
* [com.adobe.fonts/check/fsselection_matches_macstyle](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/os2.html#com.adobe.fonts/check/fsselection_matches_macstyle) * ๐ **PASS** The OS/2.fsSelection and head.macStyle bold and italic settings match.๐ PASS: Check code page character ranges
* [com.google.fonts/check/code_pages](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/os2.html#com.google.fonts/check/code_pages) * ๐ **PASS** At least one code page is defined.๐ PASS: Font has correct post table version?
* [com.google.fonts/check/post_table_version](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/post.html#com.google.fonts/check/post_table_version) * ๐ **PASS** Font has post table version 2.๐ PASS: Check name table for empty records.
* [com.adobe.fonts/check/name/empty_records](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/name.html#com.adobe.fonts/check/name/empty_records) * ๐ **PASS** No empty name table records found.๐ PASS: Description strings in the name table must not contain copyright info.
* [com.google.fonts/check/name/no_copyright_on_description](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/name.html#com.google.fonts/check/name/no_copyright_on_description) * ๐ **PASS** Description strings in the name table do not contain any copyright string.๐ PASS: Does full font name begin with the font family name?
* [com.google.fonts/check/name/match_familyname_fullfont](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/name.html#com.google.fonts/check/name/match_familyname_fullfont) * ๐ **PASS** Full font name begins with the font family name.๐ PASS: Font follows the family naming recommendations?
* [com.google.fonts/check/family_naming_recommendations](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/name.html#com.google.fonts/check/family_naming_recommendations) * ๐ **PASS** Font follows the family naming recommendations.๐ PASS: Name table ID 6 (PostScript name) must be consistent across platforms.
* [com.adobe.fonts/check/name/postscript_name_consistency](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/name.html#com.adobe.fonts/check/name/postscript_name_consistency) * ๐ **PASS** Entries in the "name" table for ID 6 (PostScript name) are consistent.๐ PASS: Does the number of glyphs in the loca table match the maxp table?
* [com.google.fonts/check/loca/maxp_num_glyphs](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/loca.html#com.google.fonts/check/loca/maxp_num_glyphs) * ๐ **PASS** 'loca' table matches numGlyphs in 'maxp' table.๐ PASS: Checking Vertical Metric Linegaps.
* [com.google.fonts/check/linegaps](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/hhea.html#com.google.fonts/check/linegaps) * ๐ **PASS** OS/2 sTypoLineGap and hhea lineGap are both 0.๐ PASS: MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables?
* [com.google.fonts/check/maxadvancewidth](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/hhea.html#com.google.fonts/check/maxadvancewidth) * ๐ **PASS** MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.๐ PASS: Space and non-breaking space have the same width?
* [com.google.fonts/check/whitespace_widths](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/hmtx.html#com.google.fonts/check/whitespace_widths) * ๐ **PASS** Space and non-breaking space have the same width.๐ PASS: Is there a usable "kern" table declared in the font?
* [com.google.fonts/check/kern_table](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/kern.html#com.google.fonts/check/kern_table) * ๐ **PASS** Font does not declare an optional "kern" table.๐ PASS: Is there any unused data at the end of the glyf table?
* [com.google.fonts/check/glyf_unused_data](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/glyf.html#com.google.fonts/check/glyf_unused_data) * ๐ **PASS** There is no unused data at the end of the glyf table.๐ PASS: Check for points out of bounds.
* [com.google.fonts/check/points_out_of_bounds](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/glyf.html#com.google.fonts/check/points_out_of_bounds) * ๐ **PASS** All glyph paths have coordinates within bounds!๐ PASS: Check glyphs do not have duplicate components which have the same x,y coordinates.
* [com.google.fonts/check/glyf_non_transformed_duplicate_components](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/glyf.html#com.google.fonts/check/glyf_non_transformed_duplicate_components) * ๐ **PASS** Glyphs do not contain duplicate components which have the same x,y coordinates.๐ PASS: Check glyphs do not have components which are themselves components.
* [com.google.fonts/check/glyf_nested_components](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/glyf.html#com.google.fonts/check/glyf_nested_components) * ๐ **PASS** Glyphs do not contain nested components.๐ PASS: Does the font have any invalid feature tags?
* [com.google.fonts/check/layout_valid_feature_tags](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/layout.html#com.google.fonts/check/layout_valid_feature_tags) * ๐ **PASS** No invalid feature tags were found๐ PASS: Does the font have any invalid script tags?
* [com.google.fonts/check/layout_valid_script_tags](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/layout.html#com.google.fonts/check/layout_valid_script_tags) * ๐ **PASS** No invalid script tags were found๐ PASS: Does the font have any invalid language tags?
* [com.google.fonts/check/layout_valid_language_tags](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/layout.html#com.google.fonts/check/layout_valid_language_tags) * ๐ **PASS** No invalid language tags were found๐ PASS: Are there any misaligned on-curve points?
* [com.google.fonts/check/outline_alignment_miss](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/๐ PASS: Are any segments inordinately short?
* [com.google.fonts/check/outline_short_segments](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/๐ PASS: Do any segments have colinear vectors?
* [com.google.fonts/check/outline_colinear_vectors](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/๐ PASS: Do outlines contain any jaggy segments?
* [com.google.fonts/check/outline_jaggy_segments](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/๐ PASS: Do outlines contain any semi-vertical or semi-horizontal lines?
* [com.google.fonts/check/outline_semi_vertical](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/Summary