Open vv-monsalve opened 3 years ago
Fontbakery version: 0.7.34
--- Rationale --- There's no reasonable (and legal) way to run the command `ftxvalidator` of the Apple Font Tool Suite on a non-macOS machine. I.e. on GNU+Linux or Windows etc. If Font Bakery is not running on an OSX machine, the machine running Font Bakery could access `ftxvalidator` on OSX, e.g. via ssh or a remote procedure call (rpc). There's an ssh example implementation at: https://github.com/googlefonts/fontbakery/blob/master/prebuilt/workarounds /ftxvalidator/ssh-implementation/ftxvalidator* β **WARN** Could not find ftxvalidator.
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: multiply Contours detected: 2 Expected: 1 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: multiply Contours detected: 2 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- Rationale --- This test heuristically looks for on-curve points which are close to, but do not sit on, significant boundary coordinates. For example, a point which has a Y-coordinate of 1 or -1 might be a misplaced baseline point. As well as the baseline, the test also checks for points near the x-height (but only for lower case Latin letters), cap-height, ascender and descender Y coordinates. Not all such misaligned curve points are a mistake, and sometimes the design may call for points in locations near the boundaries. As this test is liable to generate significant numbers of false positives, the test will pass if there are more than 100 reported misalignments.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * Cdotaccent: X=625.0,Y=1798.0 (should be at ascender 1800?) * Cdotaccent: X=1113.0,Y=1798.0 (should be at ascender 1800?) * Edotaccent: X=583.0,Y=1798.0 (should be at ascender 1800?) * Edotaccent: X=1071.0,Y=1798.0 (should be at ascender 1800?) * Gdotaccent: X=605.0,Y=1798.0 (should be at ascender 1800?) * Gdotaccent: X=1093.0,Y=1798.0 (should be at ascender 1800?) * Idotaccent: X=204.0,Y=1798.0 (should be at ascender 1800?) * Idotaccent: X=692.0,Y=1798.0 (should be at ascender 1800?) * uni1E44: X=684.0,Y=1798.0 (should be at ascender 1800?) * uni1E44: X=1172.0,Y=1798.0 (should be at ascender 1800?) and 24 more. [code: found-misalignments]
--- Rationale --- This test 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.* β **WARN** The following glyphs have jaggy segments: * braceleft: B<<497.5,678.0>-<416.0,641.0>-<298.0,630.0>>/B<<298.0,630.0>-<416.0,620.0>-<497.5,582.5>> = 10.169740999848386 * braceright: B<<468.5,582.5>-<550.0,620.0>-<668.0,630.0>>/B<<668.0,630.0>-<550.0,641.0>-<468.5,678.0>> = 10.169740999848386 * eng: L<<587.0,1160.0>--<587.0,911.0>>/B<<587.0,911.0>-<615.0,1040.0>-<702.0,1113.5>> = 12.246332859680393 * m: L<<581.0,1160.0>--<581.0,900.0>>/B<<581.0,900.0>-<605.0,1034.0>-<687.5,1110.0>> = 10.154266580200266 * n: L<<587.0,1160.0>--<587.0,911.0>>/B<<587.0,911.0>-<615.0,1040.0>-<702.0,1113.5>> = 12.246332859680393 * nacute: L<<587.0,1160.0>--<587.0,911.0>>/B<<587.0,911.0>-<615.0,1040.0>-<702.0,1113.5>> = 12.246332859680393 * ncaron: L<<587.0,1160.0>--<587.0,911.0>>/B<<587.0,911.0>-<615.0,1040.0>-<702.0,1113.5>> = 12.246332859680393 * ntilde: L<<587.0,1160.0>--<587.0,911.0>>/B<<587.0,911.0>-<615.0,1040.0>-<702.0,1113.5>> = 12.246332859680393 * u: L<<962.0,0.0>--<962.0,250.0>>/B<<962.0,250.0>-<934.0,121.0>-<847.0,47.5>> = 12.246332859680393 * uacute: L<<962.0,0.0>--<962.0,250.0>>/B<<962.0,250.0>-<934.0,121.0>-<847.0,47.5>> = 12.246332859680393 and 25 more. [code: found-jaggy-segments]
--- Rationale --- This test detects line segments which are nearly, but not quite, exactly horizontal or vertical. Sometimes such lines are created by design, but often they are indicative of a design error. This test is disabled for italic styles, which often contain nearly-upright lines.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * k: L<<222.0,210.0>--<223.0,1370.0>> * k: L<<623.0,1580.0>--<622.0,644.0>> * uni0137: L<<222.0,210.0>--<223.0,1370.0>> and uni0137: L<<623.0,1580.0>--<622.0,644.0>> [code: found-semi-vertical]
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: multiply Contours detected: 2 Expected: 1 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: multiply Contours detected: 2 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 14pt ExtraLight' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- Rationale --- This test heuristically looks for on-curve points which are close to, but do not sit on, significant boundary coordinates. For example, a point which has a Y-coordinate of 1 or -1 might be a misplaced baseline point. As well as the baseline, the test also checks for points near the x-height (but only for lower case Latin letters), cap-height, ascender and descender Y coordinates. Not all such misaligned curve points are a mistake, and sometimes the design may call for points in locations near the boundaries. As this test is liable to generate significant numbers of false positives, the test will pass if there are more than 100 reported misalignments.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni1EA2: X=1024.5,Y=1801.5 (should be at ascender 1800?) * Atilde: X=864.0,Y=1802.0 (should be at ascender 1800?) * uni1EBA: X=979.5,Y=1801.5 (should be at ascender 1800?) * uni1EBC: X=818.0,Y=1802.0 (should be at ascender 1800?) * uni1EC8: X=534.5,Y=1801.5 (should be at ascender 1800?) * Itilde: X=374.0,Y=1802.0 (should be at ascender 1800?) * Ntilde: X=924.0,Y=1802.0 (should be at ascender 1800?) * uni1ECE: X=1082.5,Y=1801.5 (should be at ascender 1800?) * uni1EDE: X=1082.5,Y=1801.5 (should be at ascender 1800?) * uni1EE0: X=921.0,Y=1802.0 (should be at ascender 1800?) and 88 more. [code: found-misalignments]
--- Rationale --- This test 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.* β **WARN** The following glyphs have jaggy segments: * braceleft: B<<452.0,656.5>-<375.0,586.0>-<248.0,578.0>>/B<<248.0,578.0>-<375.0,570.0>-<452.0,499.5>> = 7.2088410783514005 * braceright: B<<477.0,499.5>-<554.0,570.0>-<681.0,578.0>>/B<<681.0,578.0>-<554.0,586.0>-<476.5,656.5>> = 7.2088410783514005 * eth: B<<894.5,1055.5>-<1004.0,999.0>-<1067.0,882.0>>/B<<1067.0,882.0>-<1032.0,1011.0>-<972.5,1119.0>> = 13.120828331480157 * nine.lf: B<<1111.5,549.0>-<1148.0,729.0>-<1129.0,987.0>>/B<<1129.0,987.0>-<1113.0,796.0>-<987.5,679.0>> = 9.0003200404022 * nine: B<<1111.5,549.0>-<1148.0,729.0>-<1129.0,987.0>>/B<<1129.0,987.0>-<1113.0,796.0>-<987.5,679.0>> = 9.0003200404022 * six.dnom: B<<188.5,523.5>-<154.0,437.0>-<162.0,300.0>>/B<<162.0,300.0>-<174.0,366.0>-<236.5,416.5>> = 13.646790326027142 * six.lf: B<<254.0,951.0>-<218.0,771.0>-<237.0,513.0>>/B<<237.0,513.0>-<253.0,704.0>-<378.0,821.0>> = 9.0003200404022 * six.numr: B<<188.5,1291.5>-<154.0,1205.0>-<162.0,1068.0>>/B<<162.0,1068.0>-<174.0,1134.0>-<236.5,1184.5>> = 13.646790326027142 * six: B<<254.0,951.0>-<218.0,771.0>-<237.0,513.0>>/B<<237.0,513.0>-<253.0,704.0>-<378.0,821.0>> = 9.0003200404022 * uni2076: B<<188.5,1291.5>-<154.0,1205.0>-<162.0,1068.0>>/B<<162.0,1068.0>-<174.0,1134.0>-<236.5,1184.5>> = 13.646790326027142 and uni2086: B<<188.5,103.5>-<154.0,17.0>-<162.0,-120.0>>/B<<162.0,-120.0>-<174.0,-54.0>-<236.5,-3.5>> = 13.646790326027142 [code: found-jaggy-segments]
--- Rationale --- This test detects line segments which are nearly, but not quite, exactly horizontal or vertical. Sometimes such lines are created by design, but often they are indicative of a design error. This test is disabled for italic styles, which often contain nearly-upright lines.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * dotlessi.ss01: L<<263.0,217.0>--<266.0,1044.0>> * i.loclTRK.ss01: L<<263.0,217.0>--<266.0,1044.0>> * i.ss01: L<<263.0,217.0>--<266.0,1044.0>> * iacute.ss01: L<<263.0,217.0>--<266.0,1044.0>> * icircumflex.ss01: L<<263.0,217.0>--<266.0,1044.0>> * idieresis.ss01: L<<263.0,217.0>--<266.0,1044.0>> * igrave.ss01: L<<263.0,217.0>--<266.0,1044.0>> * imacron.ss01: L<<263.0,217.0>--<266.0,1044.0>> * l.ss01: L<<260.0,225.0>--<263.0,1498.0>> * lacute.ss01: L<<260.0,225.0>--<263.0,1498.0>> and 12 more. [code: found-semi-vertical]
--- 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: 3 Expected: 5 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: multiply Contours detected: 2 Expected: 1 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: perthousand Contours detected: 5 Expected: 6 or 7 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: multiply Contours detected: 2 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: percent Contours detected: 3 Expected: 5 Glyph name: perthousand Contours detected: 5 Expected: 6 or 7 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 14pt Light' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- Rationale --- This test heuristically looks for on-curve points which are close to, but do not sit on, significant boundary coordinates. For example, a point which has a Y-coordinate of 1 or -1 might be a misplaced baseline point. As well as the baseline, the test also checks for points near the x-height (but only for lower case Latin letters), cap-height, ascender and descender Y coordinates. Not all such misaligned curve points are a mistake, and sometimes the design may call for points in locations near the boundaries. As this test is liable to generate significant numbers of false positives, the test will pass if there are more than 100 reported misalignments.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni1EA2: X=911.0,Y=1798.0 (should be at ascender 1800?) * uni1EA2: X=1045.0,Y=1798.5 (should be at ascender 1800?) * Atilde: X=782.0,Y=1800.5 (should be at ascender 1800?) * uni1EBA: X=860.0,Y=1798.0 (should be at ascender 1800?) * uni1EBA: X=993.0,Y=1798.5 (should be at ascender 1800?) * uni1EBC: X=731.0,Y=1800.5 (should be at ascender 1800?) * uni1EC8: X=425.0,Y=1798.0 (should be at ascender 1800?) * uni1EC8: X=559.0,Y=1798.5 (should be at ascender 1800?) * Itilde: X=296.0,Y=1800.5 (should be at ascender 1800?) * Ntilde: X=835.0,Y=1800.5 (should be at ascender 1800?) and 61 more. [code: found-misalignments]
--- Rationale --- This test 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.* β **WARN** The following glyphs have jaggy segments: * braceleft: B<<470.0,667.0>-<390.0,595.0>-<255.0,586.0>>/B<<255.0,586.0>-<390.0,577.0>-<470.0,505.0>> = 7.628149668580618 * braceright: B<<464.5,505.0>-<544.0,577.0>-<679.0,586.0>>/B<<679.0,586.0>-<544.0,595.0>-<464.0,667.0>> = 7.628149668580618 * nine.lf: B<<1089.0,543.0>-<1123.0,712.0>-<1106.0,952.0>>/B<<1106.0,952.0>-<1085.0,776.0>-<965.5,667.5>> = 10.855943400436837 * nine: B<<1089.0,543.0>-<1123.0,712.0>-<1106.0,952.0>>/B<<1106.0,952.0>-<1085.0,776.0>-<965.5,667.5>> = 10.855943400436837 * six.lf: B<<296.5,957.0>-<262.0,788.0>-<279.0,548.0>>/B<<279.0,548.0>-<300.0,724.0>-<420.0,832.5>> = 10.855943400436837 and six: B<<296.5,957.0>-<262.0,788.0>-<279.0,548.0>>/B<<279.0,548.0>-<300.0,724.0>-<420.0,832.5>> = 10.855943400436837 [code: found-jaggy-segments]
--- Rationale --- This test detects line segments which are nearly, but not quite, exactly horizontal or vertical. Sometimes such lines are created by design, but often they are indicative of a design error. This test is disabled for italic styles, which often contain nearly-upright lines.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * dotlessi.ss01: L<<260.0,237.0>--<266.0,1029.0>> * i.loclTRK.ss01: L<<260.0,237.0>--<266.0,1029.0>> * i.ss01: L<<260.0,237.0>--<266.0,1029.0>> * iacute.ss01: L<<260.0,237.0>--<266.0,1029.0>> * icircumflex.ss01: L<<260.0,237.0>--<266.0,1029.0>> * idieresis.ss01: L<<260.0,237.0>--<266.0,1029.0>> * igrave.ss01: L<<260.0,237.0>--<266.0,1029.0>> * imacron.ss01: L<<260.0,237.0>--<266.0,1029.0>> * k: L<<273.0,87.0>--<274.0,1479.0>> * l.ss01: L<<249.0,253.0>--<257.0,1479.0>> and 6 more. [code: found-semi-vertical]
--- 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: 3 Expected: 5 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: multiply Contours detected: 2 Expected: 1 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: perthousand Contours detected: 4 Expected: 6 or 7 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: multiply Contours detected: 2 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: percent Contours detected: 3 Expected: 5 Glyph name: perthousand Contours detected: 4 Expected: 6 or 7 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 14pt Medium' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- Rationale --- This test heuristically looks for on-curve points which are close to, but do not sit on, significant boundary coordinates. For example, a point which has a Y-coordinate of 1 or -1 might be a misplaced baseline point. As well as the baseline, the test also checks for points near the x-height (but only for lower case Latin letters), cap-height, ascender and descender Y coordinates. Not all such misaligned curve points are a mistake, and sometimes the design may call for points in locations near the boundaries. As this test is liable to generate significant numbers of false positives, the test will pass if there are more than 100 reported misalignments.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni01EA: X=1184.0,Y=-2.0 (should be at baseline 0?) * Q: X=1191.0,Y=2.0 (should be at baseline 0?) * uni1EA9: X=830.0,Y=1798.0 (should be at ascender 1800?) * uni1EA3: X=531.0,Y=1501.0 (should be at cap-height 1500?) * uni1EC3: X=828.0,Y=1798.0 (should be at ascender 1800?) * uni1EBB: X=529.0,Y=1501.0 (should be at cap-height 1500?) * uni1EC9: X=253.0,Y=1501.0 (should be at cap-height 1500?) * uni1ED5: X=896.0,Y=1798.0 (should be at ascender 1800?) * uni1ECF: X=597.0,Y=1501.0 (should be at cap-height 1500?) * uni1EDF: X=597.0,Y=1501.0 (should be at cap-height 1500?) and 9 more. [code: found-misalignments]
--- Rationale --- This test looks for outline segments which seem particularly short (less than 0.006%% of the overall path length). This test is not run for variable fonts, as they may legitimately have short segments. As this test is liable to generate significant numbers of false positives, the test will pass if there are more than 100 reported short segments.* β **WARN** The following glyphs have segments which seem very short: * Aogonek contains a short segment B<<1520.0,-298.0>-<1547.0,-298.0>-<1565.5,-291.5>> * Aogonek contains a short segment B<<1565.5,-291.5>-<1584.0,-285.0>-<1606.0,-272.0>> * Ccedilla contains a short segment B<<933.0,-259.0>-<933.0,-232.0>-<913.5,-219.0>> * Ccedilla contains a short segment B<<913.5,-219.0>-<894.0,-206.0>-<864.0,-206.0>> * Ccedilla contains a short segment L<<890.0,-105.0>--<905.0,-105.0>> * Eogonek contains a short segment B<<1272.0,-207.0>-<1272.0,-251.0>-<1299.5,-274.5>> * Eogonek contains a short segment B<<1299.5,-274.5>-<1327.0,-298.0>-<1370.0,-298.0>> * Eogonek contains a short segment B<<1370.0,-298.0>-<1396.0,-298.0>-<1415.0,-291.5>> * Eogonek contains a short segment B<<1415.0,-291.5>-<1434.0,-285.0>-<1455.0,-272.0>> * Scedilla contains a short segment B<<910.0,-29.0>-<895.0,-29.0>-<880.0,-29.0>> and 69 more. [code: found-short-segments]
--- Rationale --- This test 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.* β **WARN** The following glyphs have jaggy segments: * braceleft: B<<457.0,653.0>-<383.0,618.0>-<278.0,609.0>>/B<<278.0,609.0>-<383.0,601.0>-<457.0,565.5>> = 9.25606745963407 * braceright: B<<494.5,565.5>-<569.0,601.0>-<673.0,609.0>>/B<<673.0,609.0>-<569.0,618.0>-<494.5,653.0>> = 9.344671902099696 * dollar: B<<1021.5,563.5>-<951.0,588.0>-<866.0,600.0>>/L<<866.0,600.0>--<866.0,600.0>> = 8.035710710534744 * m: L<<504.0,1139.0>--<504.0,897.0>>/B<<504.0,897.0>-<536.0,1025.0>-<621.5,1093.5>> = 14.036243467926484 * u: L<<995.0,0.0>--<995.0,279.0>>/B<<995.0,279.0>-<959.0,131.0>-<860.5,54.0>> = 13.67130713219584 * uacute: L<<995.0,0.0>--<995.0,279.0>>/B<<995.0,279.0>-<959.0,131.0>-<860.5,54.0>> = 13.67130713219584 * ubreve: L<<995.0,0.0>--<995.0,279.0>>/B<<995.0,279.0>-<959.0,131.0>-<860.5,54.0>> = 13.67130713219584 * ucircumflex: L<<995.0,0.0>--<995.0,279.0>>/B<<995.0,279.0>-<959.0,131.0>-<860.5,54.0>> = 13.67130713219584 * udieresis: L<<995.0,0.0>--<995.0,279.0>>/B<<995.0,279.0>-<959.0,131.0>-<860.5,54.0>> = 13.67130713219584 * ugrave: L<<995.0,0.0>--<995.0,279.0>>/B<<995.0,279.0>-<959.0,131.0>-<860.5,54.0>> = 13.67130713219584 and 16 more. [code: found-jaggy-segments]
--- Rationale --- This test detects line segments which are nearly, but not quite, exactly horizontal or vertical. Sometimes such lines are created by design, but often they are indicative of a design error. This test is disabled for italic styles, which often contain nearly-upright lines.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * k: L<<246.0,152.0>--<247.0,1421.0>> * k: L<<525.0,1573.0>--<524.0,578.0>> * uni0137: L<<246.0,152.0>--<247.0,1421.0>> and uni0137: L<<525.0,1573.0>--<524.0,578.0>> [code: found-semi-vertical]
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: multiply Contours detected: 2 Expected: 1 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: multiply Contours detected: 2 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- Rationale --- This test heuristically looks for on-curve points which are close to, but do not sit on, significant boundary coordinates. For example, a point which has a Y-coordinate of 1 or -1 might be a misplaced baseline point. As well as the baseline, the test also checks for points near the x-height (but only for lower case Latin letters), cap-height, ascender and descender Y coordinates. Not all such misaligned curve points are a mistake, and sometimes the design may call for points in locations near the boundaries. As this test is liable to generate significant numbers of false positives, the test will pass if there are more than 100 reported misalignments.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * Abreve: X=720.5,Y=1800.5 (should be at ascender 1800?) * Abreve: X=1034.0,Y=1800.5 (should be at ascender 1800?) * uni1EAE: X=720.5,Y=1800.5 (should be at ascender 1800?) * uni1EAE: X=1034.0,Y=1800.5 (should be at ascender 1800?) * uni1EB6: X=720.5,Y=1800.5 (should be at ascender 1800?) * uni1EB6: X=1034.0,Y=1800.5 (should be at ascender 1800?) * uni1EB0: X=720.5,Y=1800.5 (should be at ascender 1800?) * uni1EB0: X=1034.0,Y=1800.5 (should be at ascender 1800?) * uni1EB2: X=720.5,Y=1800.5 (should be at ascender 1800?) * uni1EB2: X=1034.0,Y=1800.5 (should be at ascender 1800?) and 47 more. [code: found-misalignments]
--- Rationale --- This test looks for outline segments which seem particularly short (less than 0.006%% of the overall path length). This test is not run for variable fonts, as they may legitimately have short segments. As this test is liable to generate significant numbers of false positives, the test will pass if there are more than 100 reported short segments.* β **WARN** The following glyphs have segments which seem very short: * Ccedilla contains a short segment B<<952.0,-263.0>-<952.0,-231.0>-<929.0,-215.5>> * Ccedilla contains a short segment B<<929.0,-215.5>-<906.0,-200.0>-<871.0,-200.0>> * Ccedilla contains a short segment L<<882.0,-116.0>--<902.0,-116.0>> * Eogonek contains a short segment B<<1345.0,-315.0>-<1375.0,-315.0>-<1396.0,-307.0>> * Eogonek contains a short segment B<<1396.0,-307.0>-<1417.0,-299.0>-<1441.0,-283.0>> * Scedilla contains a short segment B<<898.0,-28.0>-<881.0,-28.0>-<865.0,-27.0>> * Scedilla contains a short segment L<<852.0,-116.0>--<872.0,-116.0>> * Scedilla contains a short segment B<<897.5,-318.5>-<922.0,-298.0>-<922.0,-263.0>> * Scedilla contains a short segment B<<922.0,-263.0>-<922.0,-231.0>-<899.5,-215.5>> * Scedilla contains a short segment B<<899.5,-215.5>-<877.0,-200.0>-<842.0,-200.0>> and 63 more. [code: found-short-segments]
--- Rationale --- This test 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.* β **WARN** The following glyphs have jaggy segments: * braceleft: B<<497.0,683.0>-<413.0,609.0>-<267.0,598.0>>/B<<267.0,598.0>-<413.0,587.0>-<497.0,513.0>> = 8.617329833049736 * braceright: B<<446.0,513.0>-<530.0,587.0>-<676.0,598.0>>/B<<676.0,598.0>-<530.0,609.0>-<446.0,683.0>> = 8.617329833049736 * nine.lf: B<<1031.0,439.5>-<1092.0,617.0>-<1073.0,899.0>>/B<<1073.0,899.0>-<1045.0,746.0>-<933.0,651.0>> = 14.225269954002863 * nine: B<<1031.0,439.5>-<1092.0,617.0>-<1073.0,899.0>>/B<<1073.0,899.0>-<1045.0,746.0>-<933.0,651.0>> = 14.225269954002863 * percent: B<<1093.0,1027.0>-<1062.0,1037.0>-<1027.0,1039.0>>/B<<1027.0,1039.0>-<1061.0,1034.0>-<1091.0,1025.0>> = 5.095398200849013 * percent: B<<864.0,474.0>-<894.0,463.0>-<930.0,461.0>>/B<<930.0,461.0>-<896.0,466.0>-<865.0,476.0>> = 5.186056004168259 * perthousand: B<<1093.0,1027.0>-<1062.0,1037.0>-<1027.0,1039.0>>/B<<1027.0,1039.0>-<1061.0,1034.0>-<1091.0,1025.0>> = 5.095398200849013 * perthousand: B<<864.0,474.0>-<889.0,465.0>-<918.0,462.0>>/B<<918.0,462.0>-<890.0,466.0>-<864.0,474.0>> = 2.2239612403853224 * perthousand: B<<918.0,462.0>-<890.0,466.0>-<864.0,474.0>>/B<<864.0,474.0>-<889.0,465.0>-<918.0,462.0>> = 2.6961473854724685 * six.lf: B<<383.0,1060.5>-<322.0,883.0>-<341.0,601.0>>/B<<341.0,601.0>-<369.0,754.0>-<481.0,849.0>> = 14.225269954002863 and 22 more. [code: found-jaggy-segments]
--- 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: 3 Expected: 5 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: multiply Contours detected: 2 Expected: 1 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: perthousand Contours detected: 5 Expected: 6 or 7 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: multiply Contours detected: 2 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: percent Contours detected: 3 Expected: 5 Glyph name: perthousand Contours detected: 5 Expected: 6 or 7 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 14pt SemiBold' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- Rationale --- This test heuristically looks for on-curve points which are close to, but do not sit on, significant boundary coordinates. For example, a point which has a Y-coordinate of 1 or -1 might be a misplaced baseline point. As well as the baseline, the test also checks for points near the x-height (but only for lower case Latin letters), cap-height, ascender and descender Y coordinates. Not all such misaligned curve points are a mistake, and sometimes the design may call for points in locations near the boundaries. As this test is liable to generate significant numbers of false positives, the test will pass if there are more than 100 reported misalignments.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * parenleft: X=384.5,Y=1501.0 (should be at cap-height 1500?) * parenright: X=359.0,Y=1501.0 (should be at cap-height 1500?) * uni0328: X=198.0,Y=-0.5 (should be at baseline 0?) and ogonek: X=198.0,Y=-0.5 (should be at baseline 0?) [code: found-misalignments]
--- Rationale --- This test 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.* β **WARN** The following glyphs have jaggy segments: * braceleft: B<<476.0,664.0>-<398.0,628.0>-<287.0,619.0>>/B<<287.0,619.0>-<398.0,609.0>-<476.0,573.0>> = 9.783348251038905 * braceright: B<<482.0,573.0>-<560.0,609.0>-<671.0,619.0>>/B<<671.0,619.0>-<560.0,628.0>-<482.0,664.0>> = 9.783348251038905 * eng: L<<545.0,1149.0>--<545.0,888.0>>/B<<545.0,888.0>-<577.0,1025.0>-<670.0,1099.5>> = 13.147242375269487 * m: L<<540.0,1149.0>--<540.0,899.0>>/B<<540.0,899.0>-<568.0,1029.0>-<652.5,1101.0>> = 12.154941697222226 * n: L<<545.0,1149.0>--<545.0,888.0>>/B<<545.0,888.0>-<577.0,1025.0>-<670.0,1099.5>> = 13.147242375269487 * nacute: L<<545.0,1149.0>--<545.0,888.0>>/B<<545.0,888.0>-<577.0,1025.0>-<670.0,1099.5>> = 13.147242375269487 * ncaron: L<<545.0,1149.0>--<545.0,888.0>>/B<<545.0,888.0>-<577.0,1025.0>-<670.0,1099.5>> = 13.147242375269487 * ntilde: L<<545.0,1149.0>--<545.0,888.0>>/B<<545.0,888.0>-<577.0,1025.0>-<670.0,1099.5>> = 13.147242375269487 * u: L<<980.0,0.0>--<980.0,266.0>>/B<<980.0,266.0>-<948.0,127.0>-<855.0,51.5>> = 12.964508660419233 * uacute: L<<980.0,0.0>--<980.0,266.0>>/B<<980.0,266.0>-<948.0,127.0>-<855.0,51.5>> = 12.964508660419233 and 25 more. [code: found-jaggy-segments]
--- Rationale --- This test detects line segments which are nearly, but not quite, exactly horizontal or vertical. Sometimes such lines are created by design, but often they are indicative of a design error. This test is disabled for italic styles, which often contain nearly-upright lines.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * k: L<<235.0,179.0>--<236.0,1398.0>> and uni0137: L<<235.0,179.0>--<236.0,1398.0>> [code: found-semi-vertical]
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: multiply Contours detected: 2 Expected: 1 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: multiply Contours detected: 2 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 14pt Thin' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- Rationale --- This test heuristically looks for on-curve points which are close to, but do not sit on, significant boundary coordinates. For example, a point which has a Y-coordinate of 1 or -1 might be a misplaced baseline point. As well as the baseline, the test also checks for points near the x-height (but only for lower case Latin letters), cap-height, ascender and descender Y coordinates. Not all such misaligned curve points are a mistake, and sometimes the design may call for points in locations near the boundaries. As this test is liable to generate significant numbers of false positives, the test will pass if there are more than 100 reported misalignments.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni01EA: X=1116.0,Y=-1.0 (should be at baseline 0?) * Q: X=1086.0,Y=-2.0 (should be at baseline 0?) * Uogonek: X=1103.0,Y=-1.0 (should be at baseline 0?) * eogonek: X=785.0,Y=-1.0 (should be at baseline 0?) * u: X=72.0,Y=1102.0 (should be at x-height 1100?) * u: X=306.0,Y=1102.0 (should be at x-height 1100?) * uni2082: X=597.0,Y=-1.5 (should be at baseline 0?) * uni2085: X=576.0,Y=-2.0 (should be at baseline 0?) * uni2086: X=381.0,Y=1.0 (should be at baseline 0?) * period: X=142.0,Y=1.5 (should be at baseline 0?) and 20 more. [code: found-misalignments]
--- Rationale --- This test 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.* β **WARN** The following glyphs have jaggy segments: * braceleft: B<<434.0,646.0>-<359.0,577.0>-<240.0,570.0>>/B<<240.0,570.0>-<359.0,563.0>-<434.0,494.0>> = 6.732921326859609 * braceright: B<<489.5,494.0>-<564.0,563.0>-<683.0,570.0>>/B<<683.0,570.0>-<564.0,577.0>-<489.5,646.0>> = 6.732921326859609 * eth: B<<909.5,1055.5>-<1022.0,995.0>-<1085.0,873.0>>/B<<1085.0,873.0>-<1049.0,1012.0>-<983.0,1126.0>> = 12.791384733230128 * nine.dnom: B<<583.5,204.0>-<620.0,296.0>-<611.0,442.0>>/B<<611.0,442.0>-<601.0,371.0>-<536.5,316.0>> = 11.544561124029443 * nine.lf: B<<1134.0,554.5>-<1172.0,746.0>-<1151.0,1023.0>>/B<<1151.0,1023.0>-<1140.0,816.0>-<1009.5,690.0>> = 7.377272242458543 * nine.numr: B<<583.5,984.0>-<620.0,1076.0>-<611.0,1222.0>>/B<<611.0,1222.0>-<601.0,1151.0>-<536.5,1096.0>> = 11.544561124029443 * nine: B<<1134.0,554.5>-<1172.0,746.0>-<1151.0,1023.0>>/B<<1151.0,1023.0>-<1140.0,816.0>-<1009.5,690.0>> = 7.377272242458543 * six.dnom: B<<160.0,516.5>-<124.0,425.0>-<132.0,278.0>>/B<<132.0,278.0>-<142.0,349.0>-<206.5,404.0>> = 11.132157833560836 * six.lf: B<<212.0,945.5>-<174.0,754.0>-<195.0,477.0>>/B<<195.0,477.0>-<206.0,684.0>-<336.5,810.0>> = 7.377272242458543 * six.numr: B<<160.0,1296.5>-<124.0,1205.0>-<132.0,1058.0>>/B<<132.0,1058.0>-<142.0,1129.0>-<206.5,1184.0>> = 11.132157833560836 and 5 more. [code: found-jaggy-segments]
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: multiply Contours detected: 2 Expected: 1 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: multiply Contours detected: 2 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- Rationale --- This test heuristically looks for on-curve points which are close to, but do not sit on, significant boundary coordinates. For example, a point which has a Y-coordinate of 1 or -1 might be a misplaced baseline point. As well as the baseline, the test also checks for points near the x-height (but only for lower case Latin letters), cap-height, ascender and descender Y coordinates. Not all such misaligned curve points are a mistake, and sometimes the design may call for points in locations near the boundaries. As this test is liable to generate significant numbers of false positives, the test will pass if there are more than 100 reported misalignments.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * Cdotaccent: X=619.0,Y=1798.0 (should be at ascender 1800?) * Cdotaccent: X=1051.0,Y=1798.0 (should be at ascender 1800?) * Edotaccent: X=572.0,Y=1798.0 (should be at ascender 1800?) * Edotaccent: X=1004.0,Y=1798.0 (should be at ascender 1800?) * Gdotaccent: X=631.0,Y=1798.0 (should be at ascender 1800?) * Gdotaccent: X=1063.0,Y=1798.0 (should be at ascender 1800?) * Idotaccent: X=238.0,Y=1798.0 (should be at ascender 1800?) * Idotaccent: X=670.0,Y=1798.0 (should be at ascender 1800?) * uni1E44: X=669.0,Y=1798.0 (should be at ascender 1800?) * uni1E44: X=1101.0,Y=1798.0 (should be at ascender 1800?) and 27 more. [code: found-misalignments]
--- Rationale --- This test 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.* β **WARN** The following glyphs have jaggy segments: * B: B<<1351.5,896.5>-<1256.0,810.0>-<1095.0,786.0>>/B<<1095.0,786.0>-<1298.0,770.0>-<1414.5,682.5>> = 12.98515885733826 * R: L<<1042.0,708.0>--<947.0,708.0>>/B<<947.0,708.0>-<1100.0,697.0>-<1176.0,619.0>> = 4.112228844718457 * Racute: L<<1042.0,708.0>--<947.0,708.0>>/B<<947.0,708.0>-<1100.0,697.0>-<1176.0,619.0>> = 4.112228844718457 * Rcaron: L<<1042.0,708.0>--<947.0,708.0>>/B<<947.0,708.0>-<1100.0,697.0>-<1176.0,619.0>> = 4.112228844718457 * braceleft: B<<461.5,643.0>-<371.0,602.0>-<240.0,590.0>>/B<<240.0,590.0>-<371.0,579.0>-<461.5,537.5>> = 10.033697761121097 * braceright: B<<460.5,537.5>-<551.0,579.0>-<682.0,590.0>>/B<<682.0,590.0>-<551.0,602.0>-<460.5,643.0>> = 10.033697761121097 * eng: L<<558.0,1140.0>--<558.0,901.0>>/B<<558.0,901.0>-<582.0,1025.0>-<663.0,1095.5>> = 10.954062643398332 * m: L<<546.0,1140.0>--<546.0,902.0>>/B<<546.0,902.0>-<570.0,1025.0>-<649.0,1095.5>> = 11.04094018032372 * n: L<<558.0,1140.0>--<558.0,901.0>>/B<<558.0,901.0>-<582.0,1025.0>-<663.0,1095.5>> = 10.954062643398332 * nacute: L<<558.0,1140.0>--<558.0,901.0>>/B<<558.0,901.0>-<582.0,1025.0>-<663.0,1095.5>> = 10.954062643398332 and 35 more. [code: found-jaggy-segments]
--- Rationale --- This test detects line segments which are nearly, but not quite, exactly horizontal or vertical. Sometimes such lines are created by design, but often they are indicative of a design error. This test is disabled for italic styles, which often contain nearly-upright lines.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * k: L<<204.0,192.0>--<205.0,1308.0>> * k: L<<34.0,0.0>--<35.0,192.0>> * k: L<<605.0,1500.0>--<604.0,650.0>> * uni0137: L<<204.0,192.0>--<205.0,1308.0>> * uni0137: L<<34.0,0.0>--<35.0,192.0>> and uni0137: L<<605.0,1500.0>--<604.0,650.0>> [code: found-semi-vertical]
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: multiply Contours detected: 2 Expected: 1 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: multiply Contours detected: 2 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 144pt ExtraLight' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- Rationale --- This test heuristically looks for on-curve points which are close to, but do not sit on, significant boundary coordinates. For example, a point which has a Y-coordinate of 1 or -1 might be a misplaced baseline point. As well as the baseline, the test also checks for points near the x-height (but only for lower case Latin letters), cap-height, ascender and descender Y coordinates. Not all such misaligned curve points are a mistake, and sometimes the design may call for points in locations near the boundaries. As this test is liable to generate significant numbers of false positives, the test will pass if there are more than 100 reported misalignments.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * A: X=798.0,Y=1501.0 (should be at cap-height 1500?) * A: X=876.0,Y=1501.0 (should be at cap-height 1500?) * Aacute: X=798.0,Y=1501.0 (should be at cap-height 1500?) * Aacute: X=876.0,Y=1501.0 (should be at cap-height 1500?) * Abreve: X=798.0,Y=1501.0 (should be at cap-height 1500?) * Abreve: X=876.0,Y=1501.0 (should be at cap-height 1500?) * uni1EAE: X=798.0,Y=1501.0 (should be at cap-height 1500?) * uni1EAE: X=876.0,Y=1501.0 (should be at cap-height 1500?) * uni1EB6: X=798.0,Y=1501.0 (should be at cap-height 1500?) * uni1EB6: X=876.0,Y=1501.0 (should be at cap-height 1500?) and 71 more. [code: found-misalignments]
--- Rationale --- This test 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.* β **WARN** The following glyphs have jaggy segments: * B: B<<1237.0,881.0>-<1150.0,792.0>-<995.0,769.0>>/B<<995.0,769.0>-<1177.0,754.0>-<1280.5,661.0>> = 13.151896221608181 * R: L<<935.0,724.0>--<849.0,724.0>>/B<<849.0,724.0>-<974.0,695.0>-<1031.0,606.5>> = 13.0615510833281 * Racute: L<<935.0,724.0>--<849.0,724.0>>/B<<849.0,724.0>-<974.0,695.0>-<1031.0,606.5>> = 13.0615510833281 * Rcaron: L<<935.0,724.0>--<849.0,724.0>>/B<<849.0,724.0>-<974.0,695.0>-<1031.0,606.5>> = 13.0615510833281 * a: L<<862.0,187.0>--<862.0,308.0>>/B<<862.0,308.0>-<820.0,136.0>-<708.5,59.5>> = 13.722297133133548 * aacute: L<<862.0,187.0>--<862.0,308.0>>/B<<862.0,308.0>-<820.0,136.0>-<708.5,59.5>> = 13.722297133133548 * abreve: L<<862.0,187.0>--<862.0,308.0>>/B<<862.0,308.0>-<820.0,136.0>-<708.5,59.5>> = 13.722297133133548 * acircumflex: L<<862.0,187.0>--<862.0,308.0>>/B<<862.0,308.0>-<820.0,136.0>-<708.5,59.5>> = 13.722297133133548 * adieresis: L<<862.0,187.0>--<862.0,308.0>>/B<<862.0,308.0>-<820.0,136.0>-<708.5,59.5>> = 13.722297133133548 * agrave: L<<862.0,187.0>--<862.0,308.0>>/B<<862.0,308.0>-<820.0,136.0>-<708.5,59.5>> = 13.722297133133548 and 71 more. [code: found-jaggy-segments]
--- Rationale --- This test detects line segments which are nearly, but not quite, exactly horizontal or vertical. Sometimes such lines are created by design, but often they are indicative of a design error. This test is disabled for italic styles, which often contain nearly-upright lines.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * R: L<<997.0,214.0>--<996.0,392.0>> * Racute: L<<997.0,214.0>--<996.0,392.0>> * Rcaron: L<<997.0,214.0>--<996.0,392.0>> * dotlessi.ss01: L<<236.0,215.0>--<239.0,1031.0>> * i.loclTRK.ss01: L<<236.0,215.0>--<239.0,1031.0>> * i.ss01: L<<236.0,215.0>--<239.0,1031.0>> * iacute.ss01: L<<236.0,215.0>--<239.0,1031.0>> * icircumflex.ss01: L<<236.0,215.0>--<239.0,1031.0>> * idieresis.ss01: L<<236.0,215.0>--<239.0,1031.0>> * igrave.ss01: L<<236.0,215.0>--<239.0,1031.0>> and 20 more. [code: found-semi-vertical]
--- 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: 3 Expected: 5 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: multiply Contours detected: 2 Expected: 1 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: perthousand Contours detected: 5 Expected: 6 or 7 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: multiply Contours detected: 2 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: percent Contours detected: 3 Expected: 5 Glyph name: perthousand Contours detected: 5 Expected: 6 or 7 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 144pt Light' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- Rationale --- This test 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.* β **WARN** The following glyphs have jaggy segments: * B: B<<1254.5,883.5>-<1166.0,795.0>-<1010.0,771.0>>/B<<1010.0,771.0>-<1196.0,756.0>-<1301.0,664.0>> = 13.35681158121582 * R: L<<952.0,721.0>--<869.0,721.0>>/B<<869.0,721.0>-<996.0,695.0>-<1054.5,607.5>> = 11.569972047901999 * Racute: L<<952.0,721.0>--<869.0,721.0>>/B<<869.0,721.0>-<996.0,695.0>-<1054.5,607.5>> = 11.569972047901999 * Rcaron: L<<952.0,721.0>--<869.0,721.0>>/B<<869.0,721.0>-<996.0,695.0>-<1054.5,607.5>> = 11.569972047901999 * a: L<<849.0,208.0>--<849.0,298.0>>/B<<849.0,298.0>-<808.0,131.0>-<700.0,56.0>> = 13.793808612176546 * aacute: L<<849.0,208.0>--<849.0,298.0>>/B<<849.0,298.0>-<808.0,131.0>-<700.0,56.0>> = 13.793808612176546 * abreve: L<<849.0,208.0>--<849.0,298.0>>/B<<849.0,298.0>-<808.0,131.0>-<700.0,56.0>> = 13.793808612176546 * acircumflex: L<<849.0,208.0>--<849.0,298.0>>/B<<849.0,298.0>-<808.0,131.0>-<700.0,56.0>> = 13.793808612176546 * adieresis: L<<849.0,208.0>--<849.0,298.0>>/B<<849.0,298.0>-<808.0,131.0>-<700.0,56.0>> = 13.793808612176546 * agrave: L<<849.0,208.0>--<849.0,298.0>>/B<<849.0,298.0>-<808.0,131.0>-<700.0,56.0>> = 13.793808612176546 and 63 more. [code: found-jaggy-segments]
--- Rationale --- This test detects line segments which are nearly, but not quite, exactly horizontal or vertical. Sometimes such lines are created by design, but often they are indicative of a design error. This test is disabled for italic styles, which often contain nearly-upright lines.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * dotlessi.ss01: L<<231.0,232.0>--<236.0,1018.0>> * i.loclTRK.ss01: L<<231.0,232.0>--<236.0,1018.0>> * i.ss01: L<<231.0,232.0>--<236.0,1018.0>> * iacute.ss01: L<<231.0,232.0>--<236.0,1018.0>> * icircumflex.ss01: L<<231.0,232.0>--<236.0,1018.0>> * idieresis.ss01: L<<231.0,232.0>--<236.0,1018.0>> * igrave.ss01: L<<231.0,232.0>--<236.0,1018.0>> * imacron.ss01: L<<231.0,232.0>--<236.0,1018.0>> * l.ss01: L<<206.0,248.0>--<214.0,1422.0>> * lacute.ss01: L<<206.0,248.0>--<214.0,1422.0>> and 5 more. [code: found-semi-vertical]
--- 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: 3 Expected: 5 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: multiply Contours detected: 2 Expected: 1 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: perthousand Contours detected: 4 Expected: 6 or 7 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: multiply Contours detected: 2 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: percent Contours detected: 3 Expected: 5 Glyph name: perthousand Contours detected: 4 Expected: 6 or 7 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 144pt Medium' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- Rationale --- This test heuristically looks for on-curve points which are close to, but do not sit on, significant boundary coordinates. For example, a point which has a Y-coordinate of 1 or -1 might be a misplaced baseline point. As well as the baseline, the test also checks for points near the x-height (but only for lower case Latin letters), cap-height, ascender and descender Y coordinates. Not all such misaligned curve points are a mistake, and sometimes the design may call for points in locations near the boundaries. As this test is liable to generate significant numbers of false positives, the test will pass if there are more than 100 reported misalignments.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * Acircumflex: X=856.0,Y=1801.0 (should be at ascender 1800?) * uni1EA4: X=856.0,Y=1801.0 (should be at ascender 1800?) * uni1EAC: X=856.0,Y=1801.0 (should be at ascender 1800?) * uni1EA6: X=856.0,Y=1801.0 (should be at ascender 1800?) * uni1EA8: X=856.0,Y=1801.0 (should be at ascender 1800?) * uni1EAA: X=856.0,Y=1801.0 (should be at ascender 1800?) * uni0202: X=877.0,Y=1801.0 (should be at ascender 1800?) * Amacron: X=534.0,Y=1799.0 (should be at ascender 1800?) * Amacron: X=1219.0,Y=1799.0 (should be at ascender 1800?) * Ccircumflex: X=819.0,Y=1801.0 (should be at ascender 1800?) and 59 more. [code: found-misalignments]
--- Rationale --- This test looks for outline segments which seem particularly short (less than 0.006%% of the overall path length). This test is not run for variable fonts, as they may legitimately have short segments. As this test is liable to generate significant numbers of false positives, the test will pass if there are more than 100 reported short segments.* β **WARN** The following glyphs have segments which seem very short: * Aogonek contains a short segment B<<1489.0,-311.0>-<1516.0,-311.0>-<1534.5,-304.5>> * Aogonek contains a short segment B<<1534.5,-304.5>-<1553.0,-298.0>-<1574.0,-285.0>> * Ccedilla contains a short segment B<<881.0,-308.5>-<903.0,-290.0>-<903.0,-258.0>> * Ccedilla contains a short segment B<<903.0,-258.0>-<903.0,-229.0>-<882.5,-214.5>> * Ccedilla contains a short segment B<<882.5,-214.5>-<862.0,-200.0>-<831.0,-200.0>> * Ccedilla contains a short segment L<<854.0,-105.0>--<872.0,-105.0>> * Eogonek contains a short segment B<<1222.0,-286.0>-<1249.0,-311.0>-<1292.0,-311.0>> * Eogonek contains a short segment B<<1292.0,-311.0>-<1319.0,-311.0>-<1337.5,-304.5>> * Eogonek contains a short segment B<<1337.5,-304.5>-<1356.0,-298.0>-<1378.0,-285.0>> * Scedilla contains a short segment B<<870.0,-29.0>-<862.0,-29.0>-<855.0,-29.0>> and 64 more. [code: found-short-segments]
--- Rationale --- This test 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.* β **WARN** The following glyphs have jaggy segments: * B: B<<1305.5,890.5>-<1213.0,803.0>-<1054.0,779.0>>/B<<1054.0,779.0>-<1250.0,763.0>-<1361.0,673.5>> = 13.250479851552916 * R: L<<999.0,714.0>--<919.0,714.0>>/B<<919.0,714.0>-<1055.0,695.0>-<1120.5,611.5>> = 7.953081971438419 * Racute: L<<999.0,714.0>--<919.0,714.0>>/B<<919.0,714.0>-<1055.0,695.0>-<1120.5,611.5>> = 7.953081971438419 * Rcaron: L<<999.0,714.0>--<919.0,714.0>>/B<<919.0,714.0>-<1055.0,695.0>-<1120.5,611.5>> = 7.953081971438419 * a: L<<809.0,269.0>--<809.0,270.0>>/B<<809.0,270.0>-<772.0,118.0>-<674.0,47.5>> = 13.680925359319371 * aacute: L<<809.0,269.0>--<809.0,270.0>>/B<<809.0,270.0>-<772.0,118.0>-<674.0,47.5>> = 13.680925359319371 * abreve: L<<809.0,269.0>--<809.0,270.0>>/B<<809.0,270.0>-<772.0,118.0>-<674.0,47.5>> = 13.680925359319371 * acircumflex: L<<809.0,269.0>--<809.0,270.0>>/B<<809.0,270.0>-<772.0,118.0>-<674.0,47.5>> = 13.680925359319371 * adieresis: L<<809.0,269.0>--<809.0,270.0>>/B<<809.0,270.0>-<772.0,118.0>-<674.0,47.5>> = 13.680925359319371 * agrave: L<<809.0,269.0>--<809.0,270.0>>/B<<809.0,270.0>-<772.0,118.0>-<674.0,47.5>> = 13.680925359319371 and 60 more. [code: found-jaggy-segments]
--- Rationale --- This test detects line segments which are nearly, but not quite, exactly horizontal or vertical. Sometimes such lines are created by design, but often they are indicative of a design error. This test is disabled for italic styles, which often contain nearly-upright lines.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * k: L<<221.0,138.0>--<222.0,1362.0>> and uni0137: L<<221.0,138.0>--<222.0,1362.0>> [code: found-semi-vertical]
--- 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: 3 Expected: 5 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: multiply Contours detected: 2 Expected: 1 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: perthousand Contours detected: 4 Expected: 6 or 7 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: multiply Contours detected: 2 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: percent Contours detected: 3 Expected: 5 Glyph name: perthousand Contours detected: 4 Expected: 6 or 7 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- Rationale --- This test heuristically looks for on-curve points which are close to, but do not sit on, significant boundary coordinates. For example, a point which has a Y-coordinate of 1 or -1 might be a misplaced baseline point. As well as the baseline, the test also checks for points near the x-height (but only for lower case Latin letters), cap-height, ascender and descender Y coordinates. Not all such misaligned curve points are a mistake, and sometimes the design may call for points in locations near the boundaries. As this test is liable to generate significant numbers of false positives, the test will pass if there are more than 100 reported misalignments.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni1EA2: X=898.0,Y=1798.0 (should be at ascender 1800?) * Aring: X=631.0,Y=1802.0 (should be at ascender 1800?) * Aring: X=1093.0,Y=1802.0 (should be at ascender 1800?) * Aring: X=977.0,Y=1802.0 (should be at ascender 1800?) * Aring: X=748.0,Y=1802.0 (should be at ascender 1800?) * Aringacute: X=631.0,Y=1802.0 (should be at ascender 1800?) * Aringacute: X=1093.0,Y=1802.0 (should be at ascender 1800?) * Aringacute: X=977.0,Y=1802.0 (should be at ascender 1800?) * Aringacute: X=748.0,Y=1802.0 (should be at ascender 1800?) * uni1EBA: X=812.0,Y=1798.0 (should be at ascender 1800?) and 29 more. [code: found-misalignments]
--- Rationale --- This test looks for outline segments which seem particularly short (less than 0.006%% of the overall path length). This test is not run for variable fonts, as they may legitimately have short segments. As this test is liable to generate significant numbers of false positives, the test will pass if there are more than 100 reported short segments.* β **WARN** The following glyphs have segments which seem very short: * Ccedilla contains a short segment B<<914.0,-262.0>-<914.0,-228.0>-<890.5,-212.0>> * Ccedilla contains a short segment B<<890.5,-212.0>-<867.0,-196.0>-<832.0,-196.0>> * Ccedilla contains a short segment L<<840.0,-117.0>--<862.0,-117.0>> * Eogonek contains a short segment B<<1269.0,-325.0>-<1299.0,-325.0>-<1320.0,-316.5>> * Eogonek contains a short segment B<<1320.0,-316.5>-<1341.0,-308.0>-<1366.0,-292.0>> * Eogonek contains a short segment B<<1402.0,-363.0>-<1376.0,-383.0>-<1333.5,-399.5>> * Eng contains a short segment B<<1094.5,-104.5>-<1128.0,-127.0>-<1128.0,-171.0>> * Scedilla contains a short segment B<<865.0,-28.0>-<854.0,-28.0>-<843.0,-27.0>> * Scedilla contains a short segment L<<831.0,-117.0>--<854.0,-117.0>> * Scedilla contains a short segment B<<880.0,-320.0>-<905.0,-299.0>-<905.0,-262.0>> and 82 more. [code: found-short-segments]
--- Rationale --- This test 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.* β **WARN** The following glyphs have jaggy segments: * B: B<<1280.5,887.0>-<1190.0,799.0>-<1033.0,775.0>>/B<<1033.0,775.0>-<1223.0,760.0>-<1331.5,669.0>> = 13.205295993886088 * R: L<<976.0,718.0>--<895.0,718.0>>/B<<895.0,718.0>-<1027.0,694.0>-<1089.0,609.0>> = 10.304846468766009 * Racute: L<<976.0,718.0>--<895.0,718.0>>/B<<895.0,718.0>-<1027.0,694.0>-<1089.0,609.0>> = 10.304846468766009 * Rcaron: L<<976.0,718.0>--<895.0,718.0>>/B<<895.0,718.0>-<1027.0,694.0>-<1089.0,609.0>> = 10.304846468766009 * a: L<<828.0,239.0>--<828.0,284.0>>/B<<828.0,284.0>-<790.0,124.0>-<687.0,51.5>> = 13.360218444764461 * aacute: L<<828.0,239.0>--<828.0,284.0>>/B<<828.0,284.0>-<790.0,124.0>-<687.0,51.5>> = 13.360218444764461 * abreve: L<<828.0,239.0>--<828.0,284.0>>/B<<828.0,284.0>-<790.0,124.0>-<687.0,51.5>> = 13.360218444764461 * acircumflex: L<<828.0,239.0>--<828.0,284.0>>/B<<828.0,284.0>-<790.0,124.0>-<687.0,51.5>> = 13.360218444764461 * adieresis: L<<828.0,239.0>--<828.0,284.0>>/B<<828.0,284.0>-<790.0,124.0>-<687.0,51.5>> = 13.360218444764461 * agrave: L<<828.0,239.0>--<828.0,284.0>>/B<<828.0,284.0>-<790.0,124.0>-<687.0,51.5>> = 13.360218444764461 and 64 more. [code: found-jaggy-segments]
--- 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: 3 Expected: 5 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: multiply Contours detected: 2 Expected: 1 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: perthousand Contours detected: 5 Expected: 6 or 7 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: multiply Contours detected: 2 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: percent Contours detected: 3 Expected: 5 Glyph name: perthousand Contours detected: 5 Expected: 6 or 7 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 144pt SemiBold' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- Rationale --- This test heuristically looks for on-curve points which are close to, but do not sit on, significant boundary coordinates. For example, a point which has a Y-coordinate of 1 or -1 might be a misplaced baseline point. As well as the baseline, the test also checks for points near the x-height (but only for lower case Latin letters), cap-height, ascender and descender Y coordinates. Not all such misaligned curve points are a mistake, and sometimes the design may call for points in locations near the boundaries. As this test is liable to generate significant numbers of false positives, the test will pass if there are more than 100 reported misalignments.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * atilde: X=341.0,Y=1501.0 (should be at cap-height 1500?) * uni1EBD: X=328.0,Y=1501.0 (should be at cap-height 1500?) * itilde: X=76.5,Y=1501.0 (should be at cap-height 1500?) * ntilde: X=404.5,Y=1501.0 (should be at cap-height 1500?) * uni1EE1: X=381.0,Y=1501.0 (should be at cap-height 1500?) * otilde: X=381.0,Y=1501.0 (should be at cap-height 1500?) * uni022D: X=381.0,Y=1501.0 (should be at cap-height 1500?) * uni1EEF: X=370.0,Y=1501.0 (should be at cap-height 1500?) * utilde: X=370.0,Y=1501.0 (should be at cap-height 1500?) * uni1EF9: X=420.5,Y=1501.0 (should be at cap-height 1500?) and 4 more. [code: found-misalignments]
--- Rationale --- This test looks for outline segments which seem particularly short (less than 0.006%% of the overall path length). This test is not run for variable fonts, as they may legitimately have short segments. As this test is liable to generate significant numbers of false positives, the test will pass if there are more than 100 reported short segments.* β **WARN** The following glyphs have segments which seem very short: * Aogonek contains a short segment B<<1505.0,-300.0>-<1528.0,-300.0>-<1545.0,-294.5>> * Aogonek contains a short segment B<<1545.0,-294.5>-<1562.0,-289.0>-<1581.0,-278.0>> * AE contains a short segment L<<1432.0,862.0>--<1508.0,862.0>> * AEacute contains a short segment L<<1432.0,862.0>--<1508.0,862.0>> * Ccedilla contains a short segment B<<894.0,-255.0>-<894.0,-229.0>-<876.0,-216.5>> * Ccedilla contains a short segment B<<876.0,-216.5>-<858.0,-204.0>-<831.0,-204.0>> * Ccedilla contains a short segment L<<867.0,-96.0>--<881.0,-96.0>> * Eogonek contains a short segment B<<1243.0,-276.0>-<1270.0,-300.0>-<1311.0,-300.0>> * Eogonek contains a short segment B<<1311.0,-300.0>-<1335.0,-300.0>-<1352.0,-294.5>> * Eogonek contains a short segment B<<1352.0,-294.5>-<1369.0,-289.0>-<1387.0,-278.0>> and 64 more. [code: found-short-segments]
--- Rationale --- This test 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.* β **WARN** The following glyphs have jaggy segments: * B: B<<1326.5,893.0>-<1233.0,806.0>-<1073.0,782.0>>/B<<1073.0,782.0>-<1272.0,766.0>-<1385.5,677.5>> = 13.127573139657596 * R: L<<1019.0,711.0>--<936.0,711.0>>/B<<936.0,711.0>-<1078.0,695.0>-<1147.5,614.0>> = 6.4287477488297915 * Racute: L<<1019.0,711.0>--<936.0,711.0>>/B<<936.0,711.0>-<1078.0,695.0>-<1147.5,614.0>> = 6.4287477488297915 * Rcaron: L<<1019.0,711.0>--<936.0,711.0>>/B<<936.0,711.0>-<1078.0,695.0>-<1147.5,614.0>> = 6.4287477488297915 * braceleft: B<<439.5,635.5>-<354.0,596.0>-<232.0,586.0>>/B<<232.0,586.0>-<354.0,576.0>-<439.5,537.0>> = 9.37179967900539 * braceright: B<<470.0,537.0>-<555.0,576.0>-<677.0,586.0>>/B<<677.0,586.0>-<555.0,596.0>-<470.0,635.5>> = 9.37179967900539 * eng: L<<511.0,1129.0>--<511.0,878.0>>/B<<511.0,878.0>-<539.0,1010.0>-<625.5,1081.5>> = 11.976132444203333 * m: L<<502.0,1129.0>--<502.0,897.0>>/B<<502.0,897.0>-<527.0,1019.0>-<606.5,1086.0>> = 11.5806191822281 * n: L<<511.0,1129.0>--<511.0,878.0>>/B<<511.0,878.0>-<539.0,1010.0>-<625.5,1081.5>> = 11.976132444203333 * nacute: L<<511.0,1129.0>--<511.0,878.0>>/B<<511.0,878.0>-<539.0,1010.0>-<625.5,1081.5>> = 11.976132444203333 and 35 more. [code: found-jaggy-segments]
--- Rationale --- This test detects line segments which are nearly, but not quite, exactly horizontal or vertical. Sometimes such lines are created by design, but often they are indicative of a design error. This test is disabled for italic styles, which often contain nearly-upright lines.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * k: L<<213.0,163.0>--<214.0,1337.0>> * k: L<<32.0,0.0>--<33.0,163.0>> * uni0137: L<<213.0,163.0>--<214.0,1337.0>> and uni0137: L<<32.0,0.0>--<33.0,163.0>> [code: found-semi-vertical]
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: multiply Contours detected: 2 Expected: 1 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: multiply Contours detected: 2 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 144pt Thin' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- Rationale --- This test heuristically looks for on-curve points which are close to, but do not sit on, significant boundary coordinates. For example, a point which has a Y-coordinate of 1 or -1 might be a misplaced baseline point. As well as the baseline, the test also checks for points near the x-height (but only for lower case Latin letters), cap-height, ascender and descender Y coordinates. Not all such misaligned curve points are a mistake, and sometimes the design may call for points in locations near the boundaries. As this test is liable to generate significant numbers of false positives, the test will pass if there are more than 100 reported misalignments.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni01EA: X=1057.0,Y=-1.0 (should be at baseline 0?) * Q: X=1060.0,Y=-1.0 (should be at baseline 0?) * Uogonek: X=1046.0,Y=-2.0 (should be at baseline 0?) * uni1EA9: X=866.0,Y=1802.0 (should be at ascender 1800?) * uni1EA9: X=732.0,Y=1801.0 (should be at ascender 1800?) * aring: X=438.5,Y=1501.0 (should be at cap-height 1500?) * aring: X=693.5,Y=1501.0 (should be at cap-height 1500?) * aringacute: X=438.5,Y=1501.0 (should be at cap-height 1500?) * aringacute: X=693.5,Y=1501.0 (should be at cap-height 1500?) * uni1EC3: X=879.0,Y=1802.0 (should be at ascender 1800?) and 39 more. [code: found-misalignments]
--- Rationale --- This test 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.* β **WARN** The following glyphs have jaggy segments: * B: B<<1219.0,878.5>-<1133.0,789.0>-<980.0,766.0>>/B<<980.0,766.0>-<1159.0,751.0>-<1260.0,657.5>> = 13.339207542781917 * R: L<<919.0,726.0>--<829.0,726.0>>/B<<829.0,726.0>-<952.0,696.0>-<1007.5,606.0>> = 13.70696100407981 * Racute: L<<919.0,726.0>--<829.0,726.0>>/B<<829.0,726.0>-<952.0,696.0>-<1007.5,606.0>> = 13.70696100407981 * Rcaron: L<<919.0,726.0>--<829.0,726.0>>/B<<829.0,726.0>-<952.0,696.0>-<1007.5,606.0>> = 13.70696100407981 * a: L<<876.0,166.0>--<876.0,318.0>>/B<<876.0,318.0>-<833.0,141.0>-<718.0,62.5>> = 13.654785858284322 * aacute: L<<876.0,166.0>--<876.0,318.0>>/B<<876.0,318.0>-<833.0,141.0>-<718.0,62.5>> = 13.654785858284322 * abreve: L<<876.0,166.0>--<876.0,318.0>>/B<<876.0,318.0>-<833.0,141.0>-<718.0,62.5>> = 13.654785858284322 * acircumflex: L<<876.0,166.0>--<876.0,318.0>>/B<<876.0,318.0>-<833.0,141.0>-<718.0,62.5>> = 13.654785858284322 * adieresis: L<<876.0,166.0>--<876.0,318.0>>/B<<876.0,318.0>-<833.0,141.0>-<718.0,62.5>> = 13.654785858284322 * agrave: L<<876.0,166.0>--<876.0,318.0>>/B<<876.0,318.0>-<833.0,141.0>-<718.0,62.5>> = 13.654785858284322 and 69 more. [code: found-jaggy-segments]
π ERROR | π₯ FAIL | β WARN | π€ SKIP | βΉ INFO | π PASS | π DEBUG |
---|---|---|---|---|---|---|
0 | 0 | 81 | 1261 | 85 | 1108 | 0 |
0% | 0% | 3% | 50% | 3% | 44% | 0% |
Note: The following loglevels were omitted in this report:
Not sure how to solve the 27 character limit.
According to the specs, the name table should be OK:
Full font name that reflects all family and relevant subfamily descriptors. The full font name is generally a combination of name IDs 1 and 2, or of name IDs 16 and 17, or a similar human-readable variant.
For fonts in extended typographic families (that is, families that include more than regular, italic, bold, and bold italic variants), values for name IDs 1 and 2 are normally chosen to provide compatibility with certain applications that assume a family has at most four style-linked fonts. In that case, some fonts may end up with a Subfamily name (name ID 2) of βRegularβ even though the font would not be considered, typographically, a regular font. For such non-regular fonts in which name ID 2 is specified as βRegularβ, the βRegularβ descriptor would generally be omitted from name ID 4. For example, the Arial Black font has a Font Family name (name ID 1) of βArial Blackβ and a Subfamily name (name ID 2) of βRegularβ, but has a full font name (name ID 4) of βArial Blackβ. Note that name IDs 16 and 17 should also be included in these fonts, and that name ID 4 would typically be a combination of name IDs 16 and 17, without needing any additional qualifications regarding βRegularβ.
For example MontaguSlab14pt-Medium.ttf ID 1: Montagu Slab 14pt Medium ID 2: Regular (I thought this is some error, but should be all right) ID 4: Montagu Slab 14pt Medium ID 6: MontaguSlab14pt-Medium ID 16: Montagu Slab 14pt ID 17: Medium
According to this thread googlefonts/fontbakery#2179 only ID 4 & 6 should be less than 27 char, but the test counts ID 2 as well. So, really need some help here, don't know what I'm missing :)
@mightybart That check has a Warn loglevel for now as we are waiting for a confirmation on the more recent status on this (we haven't received complaints about it so far). At the same time, I've followed the Glyphs app suggestions to change name ID 4 and 6 with some abbreviations, but FB complains about them. So, please ignore that Warn.
There is a new version of FontBakery, 0.7.35. Under it, there is a new fail reported for all the fonts (VF + statics). This is the new full Report for 16pt statics:
Fontbakery version: 0.7.35
--- Rationale --- Stylistic sets must 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.* π₯ **FAIL** The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]
--- 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.* β **WARN** Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- 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.* β **WARN** In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
--- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * Eng: X=1308.0,Y=-2.0 (should be at baseline 0?) * one.numr: X=301.0,Y=1498.0 (should be at cap-height 1500?) * uni00B9: X=301.0,Y=1498.0 (should be at cap-height 1500?) * onehalf: X=301.0,Y=1498.0 (should be at cap-height 1500?) * onequarter: X=301.0,Y=1498.0 (should be at cap-height 1500?) * questiondown: X=436.0,Y=-2.0 (should be at baseline 0?) * colonmonetary: X=607.0,Y=-1.0 (should be at baseline 0?) * dollar: X=902.0,Y=1499.0 (should be at cap-height 1500?) and uni20B2: X=1104.0,Y=-2.0 (should be at baseline 0?) [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * R: L<<1099.0,696.0>--<1065.0,696.0>>/B<<1065.0,696.0>-<1196.0,677.0>-<1250.5,591.5>> = 8.252529047136063 * Racute: L<<1099.0,696.0>--<1065.0,696.0>>/B<<1065.0,696.0>-<1196.0,677.0>-<1250.5,591.5>> = 8.252529047136063 * Rcaron: L<<1099.0,696.0>--<1065.0,696.0>>/B<<1065.0,696.0>-<1196.0,677.0>-<1250.5,591.5>> = 8.252529047136063 * braceleft.case: B<<544.0,826.0>-<479.0,755.0>-<330.0,750.0>>/B<<330.0,750.0>-<479.0,745.0>-<544.0,674.0>> = 3.843911917862876 * braceleft: B<<598.0,750.5>-<533.0,648.0>-<340.0,640.0>>/B<<340.0,640.0>-<533.0,633.0>-<598.0,530.0>> = 4.450770567399401 * braceright.case: B<<318.5,674.0>-<384.0,745.0>-<532.0,750.0>>/B<<532.0,750.0>-<384.0,755.0>-<318.5,826.0>> = 3.869864619105556 * braceright: B<<364.0,530.0>-<429.0,633.0>-<622.0,640.0>>/B<<622.0,640.0>-<429.0,648.0>-<364.0,750.5>> = 4.450770567399401 * eng: L<<591.0,1160.0>--<591.0,900.0>>/B<<591.0,900.0>-<620.0,1030.0>-<711.5,1104.5>> = 12.575465499744425 * eth: B<<813.5,1055.5>-<906.0,1005.0>-<956.0,886.0>>/B<<956.0,886.0>-<939.0,993.0>-<908.0,1083.0>> = 13.762977891069923 * m: L<<585.0,1160.0>--<585.0,891.0>>/B<<585.0,891.0>-<609.0,1025.0>-<692.5,1101.5>> = 10.154266580200266 and 36 more. [code: found-jaggy-segments]
--- 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.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * k: L<<222.0,210.0>--<223.0,1370.0>> * k: L<<623.0,1580.0>--<622.0,633.0>> * uni0137: L<<222.0,210.0>--<223.0,1370.0>> and uni0137: L<<623.0,1580.0>--<622.0,633.0>> [code: found-semi-vertical]
--- Rationale --- Stylistic sets must 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.* π₯ **FAIL** The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]
--- 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.* β **WARN** Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 16pt ExtraLight' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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.* β **WARN** In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
--- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni1EB4: X=602.0,Y=2159.0 (should be at ascender 2160?) * uni1EB4: X=954.5,Y=2160.5 (should be at ascender 2160?) * uni1EA4: X=1275.0,Y=2159.0 (should be at ascender 2160?) * uni1EA4: X=1369.0,Y=2159.0 (should be at ascender 2160?) * uni1EA6: X=1036.0,Y=2159.0 (should be at ascender 2160?) * uni1EA6: X=1130.0,Y=2159.0 (should be at ascender 2160?) * uni1EAA: X=602.0,Y=2159.0 (should be at ascender 2160?) * uni1EAA: X=954.5,Y=2160.5 (should be at ascender 2160?) * uni1EBE: X=1212.0,Y=2159.0 (should be at ascender 2160?) * uni1EBE: X=1305.0,Y=2159.0 (should be at ascender 2160?) and 80 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * braceleft.case: B<<398.0,819.5>-<336.0,756.0>-<226.0,750.0>>/B<<226.0,750.0>-<336.0,744.0>-<398.0,680.5>> = 6.244260924231415 * braceleft: B<<435.0,713.0>-<367.0,638.0>-<243.0,631.0>>/B<<243.0,631.0>-<367.0,624.0>-<435.0,549.5>> = 6.462019800736384 * braceright.case: B<<423.5,680.5>-<486.0,744.0>-<595.0,750.0>>/B<<595.0,750.0>-<486.0,756.0>-<423.5,819.5>> = 6.301432826535456 * braceright: B<<466.0,549.5>-<534.0,624.0>-<658.0,631.0>>/B<<658.0,631.0>-<534.0,638.0>-<466.0,713.0>> = 6.462019800736384 * eth: B<<897.5,1054.0>-<1008.0,993.0>-<1068.0,867.0>>/B<<1068.0,867.0>-<1035.0,1004.0>-<974.0,1116.0>> = 11.920168419426853 * nine.lf: B<<1106.5,548.0>-<1142.0,726.0>-<1123.0,979.0>>/B<<1123.0,979.0>-<1106.0,791.0>-<982.0,676.0>> = 9.461732176690402 * nine: B<<1106.5,548.0>-<1142.0,726.0>-<1123.0,979.0>>/B<<1123.0,979.0>-<1106.0,791.0>-<982.0,676.0>> = 9.461732176690402 * six.lf: B<<263.5,952.0>-<228.0,774.0>-<247.0,521.0>>/B<<247.0,521.0>-<264.0,709.0>-<388.0,824.0>> = 9.461732176690402 * six: B<<263.5,952.0>-<228.0,774.0>-<247.0,521.0>>/B<<247.0,521.0>-<264.0,709.0>-<388.0,824.0>> = 9.461732176690402 and yen: L<<803.0,592.0>--<668.0,780.0>>/L<<668.0,780.0>--<680.0,761.0>> = 3.405920114930088 [code: found-jaggy-segments]
--- 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.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * dotlessi.ss01: L<<265.0,222.0>--<268.0,1040.0>> * i.loclTRK.ss01: L<<265.0,222.0>--<268.0,1040.0>> * i.ss01: L<<265.0,222.0>--<268.0,1040.0>> * iacute.ss01: L<<265.0,222.0>--<268.0,1040.0>> * icircumflex.ss01: L<<265.0,222.0>--<268.0,1040.0>> * idieresis.ss01: L<<265.0,222.0>--<268.0,1040.0>> * igrave.ss01: L<<265.0,222.0>--<268.0,1040.0>> * imacron.ss01: L<<265.0,222.0>--<268.0,1040.0>> * l.ss01: L<<258.0,232.0>--<262.0,1494.0>> * lacute.ss01: L<<258.0,232.0>--<262.0,1494.0>> and 5 more. [code: found-semi-vertical]
--- Rationale --- Stylistic sets must 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.* π₯ **FAIL** The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]
--- 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.* β **WARN** Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20A6 Contours detected: 4 Expected: 1, 3 or 5 Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20A6 Contours detected: 4 Expected: 1, 3 or 5 Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 16pt Light' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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.* β **WARN** In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
--- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * Ohorn: X=1649.5,Y=1498.5 (should be at cap-height 1500?) * uni1EDA: X=1649.5,Y=1498.5 (should be at cap-height 1500?) * uni1EE2: X=1649.5,Y=1498.5 (should be at cap-height 1500?) * uni1EDC: X=1649.5,Y=1498.5 (should be at cap-height 1500?) * uni1EDE: X=1649.5,Y=1498.5 (should be at cap-height 1500?) * uni1EE0: X=1649.5,Y=1498.5 (should be at cap-height 1500?) * R: X=77.0,Y=1502.0 (should be at cap-height 1500?) * R: X=1005.0,Y=1502.0 (should be at cap-height 1500?) * Racute: X=77.0,Y=1502.0 (should be at cap-height 1500?) * Racute: X=1005.0,Y=1502.0 (should be at cap-height 1500?) and 27 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * R: L<<1006.0,700.0>--<932.0,700.0>>/B<<932.0,700.0>-<1050.0,670.0>-<1103.0,581.0>> = 14.264512298079882 * Racute: L<<1006.0,700.0>--<932.0,700.0>>/B<<932.0,700.0>-<1050.0,670.0>-<1103.0,581.0>> = 14.264512298079882 * Rcaron: L<<1006.0,700.0>--<932.0,700.0>>/B<<932.0,700.0>-<1050.0,670.0>-<1103.0,581.0>> = 14.264512298079882 * braceleft.case: B<<420.5,820.5>-<358.0,756.0>-<242.0,750.0>>/B<<242.0,750.0>-<358.0,744.0>-<420.5,679.5>> = 5.921872268327562 * braceleft: B<<460.0,719.0>-<392.0,640.0>-<258.0,633.0>>/B<<258.0,633.0>-<392.0,626.0>-<460.0,547.0>> = 5.980689950330773 * braceright.case: B<<407.5,679.5>-<470.0,744.0>-<586.0,750.0>>/B<<586.0,750.0>-<470.0,756.0>-<407.5,820.5>> = 5.921872268327562 * braceright: B<<450.0,547.0>-<518.0,626.0>-<652.0,633.0>>/B<<652.0,633.0>-<518.0,640.0>-<450.0,719.0>> = 5.980689950330773 * eth: B<<884.5,1054.0>-<992.0,995.0>-<1050.0,870.0>>/B<<1050.0,870.0>-<1020.0,1003.0>-<964.5,1111.5>> = 12.18016755933628 * nine.lf: B<<1085.0,542.5>-<1119.0,709.0>-<1102.0,945.0>>/B<<1102.0,945.0>-<1080.0,772.0>-<961.0,665.0>> = 11.367390806004797 * nine: B<<1085.0,542.5>-<1119.0,709.0>-<1102.0,945.0>>/B<<1102.0,945.0>-<1080.0,772.0>-<961.0,665.0>> = 11.367390806004797 and 7 more. [code: found-jaggy-segments]
--- 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.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * dotlessi.ss01: L<<262.0,241.0>--<268.0,1026.0>> * i.loclTRK.ss01: L<<262.0,241.0>--<268.0,1026.0>> * i.ss01: L<<262.0,241.0>--<268.0,1026.0>> * iacute.ss01: L<<262.0,241.0>--<268.0,1026.0>> * icircumflex.ss01: L<<262.0,241.0>--<268.0,1026.0>> * idieresis.ss01: L<<262.0,241.0>--<268.0,1026.0>> * igrave.ss01: L<<262.0,241.0>--<268.0,1026.0>> * imacron.ss01: L<<262.0,241.0>--<268.0,1026.0>> * l.ss01: L<<248.0,258.0>--<256.0,1475.0>> * lacute.ss01: L<<248.0,258.0>--<256.0,1475.0>> and 4 more. [code: found-semi-vertical]
--- Rationale --- Stylistic sets must 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.* π₯ **FAIL** The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]
--- 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.* β **WARN** Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 16pt Medium' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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.* β **WARN** In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
--- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni1EA8: X=1075.0,Y=2159.0 (should be at ascender 2160?) * uni1EC2: X=993.0,Y=2159.0 (should be at ascender 2160?) * uni1ED4: X=1112.0,Y=2159.0 (should be at ascender 2160?) * uni1EA3: X=550.0,Y=1501.0 (should be at cap-height 1500?) * uni1EBB: X=525.0,Y=1501.0 (should be at cap-height 1500?) * g: X=932.0,Y=-1.0 (should be at baseline 0?) * g: X=454.0,Y=-1.0 (should be at baseline 0?) * gbreve: X=932.0,Y=-1.0 (should be at baseline 0?) * gbreve: X=454.0,Y=-1.0 (should be at baseline 0?) * gcaron: X=932.0,Y=-1.0 (should be at baseline 0?) and 21 more. [code: found-misalignments]
--- Rationale --- This check looks for outline segments which seem particularly short (less than 0.006%% 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.* β **WARN** The following glyphs have segments which seem very short: * Aogonek contains a short segment B<<1541.0,-297.0>-<1568.0,-297.0>-<1586.5,-290.5>> * Aogonek contains a short segment B<<1586.5,-290.5>-<1605.0,-284.0>-<1626.0,-271.0>> * Ccedilla contains a short segment B<<944.0,-259.0>-<944.0,-232.0>-<925.0,-219.0>> * Ccedilla contains a short segment B<<925.0,-219.0>-<906.0,-206.0>-<876.0,-206.0>> * Ccedilla contains a short segment L<<903.0,-104.0>--<918.0,-104.0>> * Eogonek contains a short segment B<<1281.0,-207.0>-<1281.0,-250.0>-<1308.0,-273.5>> * Eogonek contains a short segment B<<1308.0,-273.5>-<1335.0,-297.0>-<1378.0,-297.0>> * Eogonek contains a short segment B<<1378.0,-297.0>-<1404.0,-297.0>-<1422.5,-290.5>> * Eogonek contains a short segment B<<1422.5,-290.5>-<1441.0,-284.0>-<1463.0,-271.0>> * Scedilla contains a short segment B<<929.0,-25.0>-<914.0,-25.0>-<900.0,-25.0>> and 68 more. [code: found-short-segments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * R: L<<1055.0,698.0>--<1005.0,698.0>>/B<<1005.0,698.0>-<1128.0,673.0>-<1181.5,586.0>> = 11.488981202159193 * Racute: L<<1055.0,698.0>--<1005.0,698.0>>/B<<1005.0,698.0>-<1128.0,673.0>-<1181.5,586.0>> = 11.488981202159193 * Rcaron: L<<1055.0,698.0>--<1005.0,698.0>>/B<<1005.0,698.0>-<1128.0,673.0>-<1181.5,586.0>> = 11.488981202159193 * braceleft.case: B<<485.0,823.5>-<421.0,756.0>-<288.0,750.0>>/B<<288.0,750.0>-<421.0,744.0>-<485.0,676.5>> = 5.166041337270114 * braceleft: B<<532.5,735.5>-<466.0,644.0>-<301.0,637.0>>/B<<301.0,637.0>-<466.0,629.0>-<532.5,537.5>> = 5.205076772283028 * braceright.case: B<<360.0,676.5>-<424.0,744.0>-<557.0,750.0>>/B<<557.0,750.0>-<424.0,756.0>-<360.0,823.5>> = 5.166041337270114 * braceright: B<<404.5,537.5>-<471.0,629.0>-<636.0,637.0>>/B<<636.0,637.0>-<471.0,644.0>-<404.5,735.5>> = 5.205076772283028 * eng: L<<513.0,1140.0>--<513.0,862.0>>/B<<513.0,862.0>-<549.0,1007.0>-<649.5,1082.5>> = 13.943230920553672 * eth: B<<846.5,1055.0>-<946.0,1001.0>-<1000.0,879.0>>/B<<1000.0,879.0>-<977.0,998.0>-<935.5,1096.5>> = 12.936189670735347 * m: L<<509.0,1139.0>--<509.0,891.0>>/B<<509.0,891.0>-<540.0,1019.0>-<626.0,1088.0>> = 13.614182744829332 and 36 more. [code: found-jaggy-segments]
--- Rationale --- Stylistic sets must 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.* π₯ **FAIL** The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]
--- 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.* β **WARN** Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- 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.* β **WARN** In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
--- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * adieresis: X=804.5,Y=1498.5 (should be at cap-height 1500?) * adieresis: X=985.0,Y=1498.5 (should be at cap-height 1500?) * adieresis: X=351.5,Y=1498.5 (should be at cap-height 1500?) * adieresis: X=532.5,Y=1498.5 (should be at cap-height 1500?) * edieresis: X=788.0,Y=1498.5 (should be at cap-height 1500?) * edieresis: X=968.0,Y=1498.5 (should be at cap-height 1500?) * edieresis: X=335.0,Y=1498.5 (should be at cap-height 1500?) * edieresis: X=515.5,Y=1498.5 (should be at cap-height 1500?) * eogonek: X=848.0,Y=2.0 (should be at baseline 0?) * uni0123: X=670.0,Y=1499.0 (should be at cap-height 1500?) and 32 more. [code: found-misalignments]
--- Rationale --- This check looks for outline segments which seem particularly short (less than 0.006%% 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.* β **WARN** The following glyphs have segments which seem very short: * Ccedilla contains a short segment B<<959.0,-262.0>-<959.0,-231.0>-<936.5,-215.5>> * Ccedilla contains a short segment B<<936.5,-215.5>-<914.0,-200.0>-<880.0,-200.0>> * Ccedilla contains a short segment L<<892.0,-115.0>--<911.0,-115.0>> * Eogonek contains a short segment B<<1352.0,-314.0>-<1382.0,-314.0>-<1402.5,-306.0>> * Eogonek contains a short segment B<<1402.5,-306.0>-<1423.0,-298.0>-<1448.0,-282.0>> * Scedilla contains a short segment B<<918.0,-25.0>-<901.0,-25.0>-<885.0,-24.0>> * Scedilla contains a short segment L<<873.0,-115.0>--<893.0,-115.0>> * Scedilla contains a short segment B<<940.0,-262.0>-<940.0,-231.0>-<917.5,-215.5>> * Scedilla contains a short segment B<<917.5,-215.5>-<895.0,-200.0>-<861.0,-200.0>> * uni0162 contains a short segment L<<902.0,-115.0>--<922.0,-115.0>> and 71 more. [code: found-short-segments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * R: L<<1031.0,699.0>--<970.0,699.0>>/B<<970.0,699.0>-<1090.0,671.0>-<1143.0,583.0>> = 13.134022306396327 * Racute: L<<1031.0,699.0>--<970.0,699.0>>/B<<970.0,699.0>-<1090.0,671.0>-<1143.0,583.0>> = 13.134022306396327 * Rcaron: L<<1031.0,699.0>--<970.0,699.0>>/B<<970.0,699.0>-<1090.0,671.0>-<1143.0,583.0>> = 13.134022306396327 * braceleft.case: B<<453.5,822.0>-<390.0,756.0>-<266.0,750.0>>/B<<266.0,750.0>-<390.0,744.0>-<453.5,678.0>> = 5.540431594400349 * braceleft: B<<497.0,727.5>-<430.0,642.0>-<280.0,635.0>>/B<<280.0,635.0>-<430.0,628.0>-<497.0,542.5>> = 5.343729186545131 * braceright.case: B<<383.5,678.0>-<447.0,744.0>-<571.0,750.0>>/B<<571.0,750.0>-<447.0,756.0>-<383.5,822.0>> = 5.540431594400349 * braceright: B<<427.0,542.5>-<494.0,628.0>-<644.0,635.0>>/B<<644.0,635.0>-<494.0,642.0>-<427.0,727.5>> = 5.343729186545131 * eth: B<<865.0,1054.5>-<968.0,998.0>-<1025.0,875.0>>/B<<1025.0,875.0>-<998.0,1000.0>-<950.0,1103.5>> = 12.675063369819934 * uni0156: L<<1031.0,699.0>--<970.0,699.0>>/B<<970.0,699.0>-<1090.0,671.0>-<1143.0,583.0>> = 13.134022306396327 * uni0210: L<<1031.0,699.0>--<970.0,699.0>>/B<<970.0,699.0>-<1090.0,671.0>-<1143.0,583.0>> = 13.134022306396327 and 3 more. [code: found-jaggy-segments]
--- 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.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * k: L<<258.0,123.0>--<259.0,1446.0>> and uni0137: L<<258.0,123.0>--<259.0,1446.0>> [code: found-semi-vertical]
--- Rationale --- Stylistic sets must 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.* π₯ **FAIL** The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]
--- 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.* β **WARN** Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20A6 Contours detected: 4 Expected: 1, 3 or 5 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20A6 Contours detected: 4 Expected: 1, 3 or 5 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 16pt SemiBold' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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.* β **WARN** In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
--- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * Eng: X=1335.0,Y=-2.0 (should be at baseline 0?) * eth: X=624.5,Y=1498.0 (should be at cap-height 1500?) * v: X=559.0,Y=-2.0 (should be at baseline 0?) * v: X=841.0,Y=-2.0 (should be at baseline 0?) * w: X=520.0,Y=-2.0 (should be at baseline 0?) * w: X=1507.0,Y=-2.0 (should be at baseline 0?) * w: X=1236.0,Y=-2.0 (should be at baseline 0?) * w: X=793.0,Y=-2.0 (should be at baseline 0?) * wacute: X=520.0,Y=-2.0 (should be at baseline 0?) * wacute: X=1507.0,Y=-2.0 (should be at baseline 0?) and 27 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have colinear vectors: * uhorn: L<<813.0,1149.0>--<1253.0,1149.0>> -> L<<1253.0,1149.0>--<1253.0,1149.0>> * uni1EE9: L<<813.0,1149.0>--<1253.0,1149.0>> -> L<<1253.0,1149.0>--<1253.0,1149.0>> * uni1EEB: L<<813.0,1149.0>--<1253.0,1149.0>> -> L<<1253.0,1149.0>--<1253.0,1149.0>> * uni1EED: L<<813.0,1149.0>--<1253.0,1149.0>> -> L<<1253.0,1149.0>--<1253.0,1149.0>> * uni1EEF: L<<813.0,1149.0>--<1253.0,1149.0>> -> L<<1253.0,1149.0>--<1253.0,1149.0>> and uni1EF1: L<<813.0,1149.0>--<1253.0,1149.0>> -> L<<1253.0,1149.0>--<1253.0,1149.0>> [code: found-colinear-vectors]
--- 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.* β **WARN** The following glyphs have jaggy segments: * R: L<<1075.0,697.0>--<1034.0,697.0>>/B<<1034.0,697.0>-<1160.0,675.0>-<1213.5,588.5>> = 9.904183212973862 * Racute: L<<1075.0,697.0>--<1034.0,697.0>>/B<<1034.0,697.0>-<1160.0,675.0>-<1213.5,588.5>> = 9.904183212973862 * Rcaron: L<<1075.0,697.0>--<1034.0,697.0>>/B<<1034.0,697.0>-<1160.0,675.0>-<1213.5,588.5>> = 9.904183212973862 * braceleft.case: B<<512.5,824.5>-<448.0,755.0>-<308.0,750.0>>/B<<308.0,750.0>-<448.0,745.0>-<512.5,675.5>> = 4.0908169777744545 * braceleft: B<<563.0,742.0>-<497.0,645.0>-<319.0,638.0>>/B<<319.0,638.0>-<497.0,631.0>-<563.0,534.5>> = 4.504088690805056 * braceright.case: B<<341.0,675.5>-<406.0,745.0>-<546.0,750.0>>/B<<546.0,750.0>-<406.0,755.0>-<341.0,824.5>> = 4.0908169777744545 * braceright: B<<386.0,534.5>-<452.0,631.0>-<630.0,638.0>>/B<<630.0,638.0>-<452.0,645.0>-<386.0,742.0>> = 4.504088690805056 * eng: L<<549.0,1149.0>--<549.0,880.0>>/B<<549.0,880.0>-<582.0,1018.0>-<678.0,1093.0>> = 13.448615051686525 * eth: B<<831.0,1055.5>-<927.0,1003.0>-<980.0,882.0>>/B<<980.0,882.0>-<960.0,996.0>-<923.5,1090.5>> = 13.703586662958596 * m: L<<544.0,1149.0>--<544.0,892.0>>/B<<544.0,892.0>-<572.0,1022.0>-<657.0,1094.0>> = 12.154941697222226 and 36 more. [code: found-jaggy-segments]
--- 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.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * k: L<<235.0,180.0>--<236.0,1397.0>> * k: L<<572.0,1576.0>--<571.0,601.0>> * uni0137: L<<235.0,180.0>--<236.0,1397.0>> and uni0137: L<<572.0,1576.0>--<571.0,601.0>> [code: found-semi-vertical]
--- Rationale --- Stylistic sets must 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.* π₯ **FAIL** The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]
--- 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.* β **WARN** Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 16pt Thin' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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.* β **WARN** In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
--- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni1EB4: X=650.0,Y=2158.0 (should be at ascender 2160?) * uni1EAA: X=650.0,Y=2158.0 (should be at ascender 2160?) * uni1EC4: X=591.0,Y=2158.0 (should be at ascender 2160?) * uni1ED6: X=691.0,Y=2158.0 (should be at ascender 2160?) * Q: X=1154.0,Y=-2.0 (should be at baseline 0?) * Uogonek: X=1124.0,Y=-1.0 (should be at baseline 0?) * uni1EA3: X=774.0,Y=1498.0 (should be at cap-height 1500?) * uni1EA3: X=554.0,Y=1498.0 (should be at cap-height 1500?) * uni1EBB: X=778.0,Y=1498.0 (should be at cap-height 1500?) * uni1EBB: X=558.0,Y=1498.0 (should be at cap-height 1500?) and 39 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * braceleft.case: B<<375.5,818.5>-<314.0,756.0>-<210.0,750.0>>/B<<210.0,750.0>-<314.0,744.0>-<375.5,681.5>> = 6.603731348869935 * braceleft: B<<409.5,707.5>-<341.0,637.0>-<228.0,630.0>>/B<<228.0,630.0>-<341.0,623.0>-<409.5,553.0>> = 7.089532911189703 * braceright.case: B<<440.0,681.5>-<502.0,744.0>-<605.0,750.0>>/B<<605.0,750.0>-<502.0,756.0>-<440.0,818.5>> = 6.667701323073103 * braceright: B<<481.5,553.0>-<550.0,623.0>-<663.0,630.0>>/B<<663.0,630.0>-<550.0,637.0>-<481.5,707.5>> = 7.089532911189703 * eth: B<<910.5,1053.5>-<1024.0,991.0>-<1085.0,864.0>>/B<<1085.0,864.0>-<1049.0,1006.0>-<982.5,1121.5>> = 11.42970682912706 * nine.dnom: B<<582.0,204.5>-<618.0,295.0>-<610.0,439.0>>/B<<610.0,439.0>-<600.0,369.0>-<536.0,315.5>> = 11.309932474020162 * nine.lf: B<<1128.5,553.5>-<1166.0,742.0>-<1145.0,1014.0>>/B<<1145.0,1014.0>-<1132.0,811.0>-<1003.0,687.0>> = 8.078997569467882 * nine.numr: B<<582.0,981.5>-<618.0,1072.0>-<610.0,1216.0>>/B<<610.0,1216.0>-<600.0,1146.0>-<536.0,1092.5>> = 11.309932474020162 * nine: B<<1128.5,553.5>-<1166.0,742.0>-<1145.0,1014.0>>/B<<1145.0,1014.0>-<1132.0,811.0>-<1003.0,687.0>> = 8.078997569467882 * six.dnom: B<<167.5,518.5>-<132.0,428.0>-<140.0,284.0>>/B<<140.0,284.0>-<151.0,354.0>-<214.5,407.5>> = 12.110420220283205 and 8 more. [code: found-jaggy-segments]
--- 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.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * dotlessi.ss01: L<<268.0,203.0>--<269.0,1054.0>> * i.loclTRK.ss01: L<<268.0,203.0>--<269.0,1054.0>> * i.ss01: L<<268.0,203.0>--<269.0,1054.0>> * iacute.ss01: L<<268.0,203.0>--<269.0,1054.0>> * icircumflex.ss01: L<<268.0,203.0>--<269.0,1054.0>> * idieresis.ss01: L<<268.0,203.0>--<269.0,1054.0>> * igrave.ss01: L<<268.0,203.0>--<269.0,1054.0>> * imacron.ss01: L<<268.0,203.0>--<269.0,1054.0>> * l.ss01: L<<268.0,205.0>--<269.0,1513.0>> * lacute.ss01: L<<268.0,205.0>--<269.0,1513.0>> and 12 more. [code: found-semi-vertical]
π ERROR | π₯ FAIL | β WARN | π€ SKIP | βΉ INFO | π PASS | π DEBUG |
---|---|---|---|---|---|---|
0 | 7 | 56 | 673 | 43 | 559 | 0 |
0% | 1% | 4% | 50% | 3% | 42% | 0% |
Note: The following loglevels were omitted in this report:
Fixed the last FAIL
Fontbakery version: 0.7.36
--- 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* β **WARN** Could not find ftxvalidator. [code: ftxvalidator-available]
--- 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.* β **WARN** Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- 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.* β **WARN** In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
--- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * Eng: X=1308.0,Y=-2.0 (should be at baseline 0?) * one.numr: X=301.0,Y=1498.0 (should be at cap-height 1500?) * uni00B9: X=301.0,Y=1498.0 (should be at cap-height 1500?) * onehalf: X=301.0,Y=1498.0 (should be at cap-height 1500?) * onequarter: X=301.0,Y=1498.0 (should be at cap-height 1500?) * questiondown: X=436.0,Y=-2.0 (should be at baseline 0?) * colonmonetary: X=607.0,Y=-1.0 (should be at baseline 0?) * dollar: X=902.0,Y=1499.0 (should be at cap-height 1500?) and uni20B2: X=1104.0,Y=-2.0 (should be at baseline 0?) [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * R: L<<1099.0,696.0>--<1065.0,696.0>>/B<<1065.0,696.0>-<1196.0,677.0>-<1250.5,591.5>> = 8.252529047136063 * Racute: L<<1099.0,696.0>--<1065.0,696.0>>/B<<1065.0,696.0>-<1196.0,677.0>-<1250.5,591.5>> = 8.252529047136063 * Rcaron: L<<1099.0,696.0>--<1065.0,696.0>>/B<<1065.0,696.0>-<1196.0,677.0>-<1250.5,591.5>> = 8.252529047136063 * braceleft.case: B<<544.0,826.0>-<479.0,755.0>-<330.0,750.0>>/B<<330.0,750.0>-<479.0,745.0>-<544.0,674.0>> = 3.843911917862876 * braceleft: B<<598.0,750.5>-<533.0,648.0>-<340.0,640.0>>/B<<340.0,640.0>-<533.0,633.0>-<598.0,530.0>> = 4.450770567399401 * braceright.case: B<<318.5,674.0>-<384.0,745.0>-<532.0,750.0>>/B<<532.0,750.0>-<384.0,755.0>-<318.5,826.0>> = 3.869864619105556 * braceright: B<<364.0,530.0>-<429.0,633.0>-<622.0,640.0>>/B<<622.0,640.0>-<429.0,648.0>-<364.0,750.5>> = 4.450770567399401 * eng: L<<591.0,1160.0>--<591.0,900.0>>/B<<591.0,900.0>-<620.0,1030.0>-<711.5,1104.5>> = 12.575465499744425 * eth: B<<813.5,1055.5>-<906.0,1005.0>-<956.0,886.0>>/B<<956.0,886.0>-<939.0,993.0>-<908.0,1083.0>> = 13.762977891069923 * m: L<<585.0,1160.0>--<585.0,891.0>>/B<<585.0,891.0>-<609.0,1025.0>-<692.5,1101.5>> = 10.154266580200266 and 36 more. [code: found-jaggy-segments]
--- 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.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * k: L<<222.0,210.0>--<223.0,1370.0>> * k: L<<623.0,1580.0>--<622.0,633.0>> * uni0137: L<<222.0,210.0>--<223.0,1370.0>> and uni0137: L<<623.0,1580.0>--<622.0,633.0>> [code: found-semi-vertical]
--- 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.* β **WARN** Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 16pt ExtraLight' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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.* β **WARN** In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
--- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni1EB4: X=602.0,Y=2159.0 (should be at ascender 2160?) * uni1EB4: X=954.5,Y=2160.5 (should be at ascender 2160?) * uni1EA4: X=1276.0,Y=2159.0 (should be at ascender 2160?) * uni1EA4: X=1369.0,Y=2159.0 (should be at ascender 2160?) * uni1EA6: X=1036.0,Y=2159.0 (should be at ascender 2160?) * uni1EA6: X=1130.0,Y=2159.0 (should be at ascender 2160?) * uni1EAA: X=602.0,Y=2159.0 (should be at ascender 2160?) * uni1EAA: X=954.5,Y=2160.5 (should be at ascender 2160?) * uni1EBE: X=1212.0,Y=2159.0 (should be at ascender 2160?) * uni1EBE: X=1305.0,Y=2159.0 (should be at ascender 2160?) and 79 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * braceleft.case: B<<397.5,819.5>-<335.0,756.0>-<226.0,750.0>>/B<<226.0,750.0>-<335.0,744.0>-<397.5,680.5>> = 6.301432826535456 * braceleft: B<<435.0,713.0>-<367.0,638.0>-<243.0,631.0>>/B<<243.0,631.0>-<367.0,624.0>-<435.0,549.5>> = 6.462019800736384 * braceright.case: B<<423.5,680.5>-<486.0,744.0>-<595.0,750.0>>/B<<595.0,750.0>-<486.0,756.0>-<423.5,819.5>> = 6.301432826535456 * braceright: B<<465.5,549.5>-<534.0,624.0>-<658.0,631.0>>/B<<658.0,631.0>-<534.0,638.0>-<465.5,713.0>> = 6.462019800736384 * eth: B<<897.5,1054.0>-<1008.0,993.0>-<1067.0,867.0>>/B<<1067.0,867.0>-<1034.0,1004.0>-<973.5,1116.5>> = 11.548353067229039 * nine.lf: B<<1106.5,548.0>-<1142.0,726.0>-<1123.0,979.0>>/B<<1123.0,979.0>-<1106.0,791.0>-<982.0,676.0>> = 9.461732176690402 * nine: B<<1106.5,548.0>-<1142.0,726.0>-<1123.0,979.0>>/B<<1123.0,979.0>-<1106.0,791.0>-<982.0,676.0>> = 9.461732176690402 * six.lf: B<<263.5,952.0>-<228.0,774.0>-<247.0,521.0>>/B<<247.0,521.0>-<264.0,709.0>-<388.0,824.0>> = 9.461732176690402 * six: B<<263.5,952.0>-<228.0,774.0>-<247.0,521.0>>/B<<247.0,521.0>-<264.0,709.0>-<388.0,824.0>> = 9.461732176690402 and yen: L<<803.0,593.0>--<668.0,780.0>>/L<<668.0,780.0>--<680.0,761.0>> = 3.5508202431404676 [code: found-jaggy-segments]
--- 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.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * dotlessi.ss01: L<<265.0,222.0>--<269.0,1042.0>> * i.loclTRK.ss01: L<<265.0,222.0>--<269.0,1042.0>> * i.ss01: L<<265.0,222.0>--<269.0,1042.0>> * iacute.ss01: L<<265.0,222.0>--<269.0,1042.0>> * icircumflex.ss01: L<<265.0,222.0>--<269.0,1042.0>> * idieresis.ss01: L<<265.0,222.0>--<269.0,1042.0>> * igrave.ss01: L<<265.0,222.0>--<269.0,1042.0>> * imacron.ss01: L<<265.0,222.0>--<269.0,1042.0>> * l.ss01: L<<258.0,231.0>--<263.0,1496.0>> * lacute.ss01: L<<258.0,231.0>--<263.0,1496.0>> and 5 more. [code: found-semi-vertical]
--- 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.* β **WARN** Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20A6 Contours detected: 4 Expected: 1, 3 or 5 Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20A6 Contours detected: 4 Expected: 1, 3 or 5 Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 16pt Light' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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.* β **WARN** In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
--- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * Ohorn: X=1649.5,Y=1498.5 (should be at cap-height 1500?) * uni1EDA: X=1649.5,Y=1498.5 (should be at cap-height 1500?) * uni1EE2: X=1649.5,Y=1498.5 (should be at cap-height 1500?) * uni1EDC: X=1649.5,Y=1498.5 (should be at cap-height 1500?) * uni1EDE: X=1649.5,Y=1498.5 (should be at cap-height 1500?) * uni1EE0: X=1649.5,Y=1498.5 (should be at cap-height 1500?) * R: X=74.0,Y=1502.0 (should be at cap-height 1500?) * R: X=1006.0,Y=1502.0 (should be at cap-height 1500?) * Racute: X=74.0,Y=1502.0 (should be at cap-height 1500?) * Racute: X=1006.0,Y=1502.0 (should be at cap-height 1500?) and 28 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * R: L<<1006.0,700.0>--<932.0,700.0>>/B<<932.0,700.0>-<1050.0,670.0>-<1103.0,581.0>> = 14.264512298079882 * Racute: L<<1006.0,700.0>--<932.0,700.0>>/B<<932.0,700.0>-<1050.0,670.0>-<1103.0,581.0>> = 14.264512298079882 * Rcaron: L<<1006.0,700.0>--<932.0,700.0>>/B<<932.0,700.0>-<1050.0,670.0>-<1103.0,581.0>> = 14.264512298079882 * braceleft.case: B<<420.0,821.0>-<357.0,756.0>-<242.0,750.0>>/B<<242.0,750.0>-<357.0,744.0>-<420.0,679.0>> = 5.973273980950297 * braceleft: B<<460.0,719.0>-<392.0,640.0>-<258.0,633.0>>/B<<258.0,633.0>-<392.0,626.0>-<460.0,547.0>> = 5.980689950330773 * braceright.case: B<<407.5,679.0>-<470.0,744.0>-<585.0,750.0>>/B<<585.0,750.0>-<470.0,756.0>-<407.5,821.0>> = 5.973273980950297 * braceright: B<<450.0,547.0>-<518.0,626.0>-<652.0,633.0>>/B<<652.0,633.0>-<518.0,640.0>-<450.0,719.0>> = 5.980689950330773 * eth: B<<883.5,1054.5>-<991.0,996.0>-<1050.0,871.0>>/B<<1050.0,871.0>-<1020.0,1003.0>-<964.5,1111.5>> = 12.463044435052213 * nine.lf: B<<1085.0,542.0>-<1119.0,709.0>-<1102.0,945.0>>/B<<1102.0,945.0>-<1080.0,772.0>-<961.0,665.0>> = 11.367390806004797 * nine: B<<1085.0,542.0>-<1119.0,709.0>-<1102.0,945.0>>/B<<1102.0,945.0>-<1080.0,772.0>-<961.0,665.0>> = 11.367390806004797 and 7 more. [code: found-jaggy-segments]
--- 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.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * dotlessi.ss01: L<<262.0,240.0>--<268.0,1030.0>> * i.loclTRK.ss01: L<<262.0,240.0>--<268.0,1030.0>> * i.ss01: L<<262.0,240.0>--<268.0,1030.0>> * iacute.ss01: L<<262.0,240.0>--<268.0,1030.0>> * icircumflex.ss01: L<<262.0,240.0>--<268.0,1030.0>> * idieresis.ss01: L<<262.0,240.0>--<268.0,1030.0>> * igrave.ss01: L<<262.0,240.0>--<268.0,1030.0>> * imacron.ss01: L<<262.0,240.0>--<268.0,1030.0>> * l.ss01: L<<248.0,258.0>--<257.0,1479.0>> * lacute.ss01: L<<248.0,258.0>--<257.0,1479.0>> and 4 more. [code: found-semi-vertical]
--- 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.* β **WARN** Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 16pt Medium' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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.* β **WARN** In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
--- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni1EA8: X=1075.0,Y=2159.0 (should be at ascender 2160?) * uni1EC2: X=992.0,Y=2159.0 (should be at ascender 2160?) * uni1ED4: X=1112.0,Y=2159.0 (should be at ascender 2160?) * uni1EA3: X=550.0,Y=1502.0 (should be at cap-height 1500?) * uni1EBB: X=525.0,Y=1502.0 (should be at cap-height 1500?) * g: X=932.0,Y=-1.0 (should be at baseline 0?) * g: X=454.0,Y=-1.0 (should be at baseline 0?) * gbreve: X=932.0,Y=-1.0 (should be at baseline 0?) * gbreve: X=454.0,Y=-1.0 (should be at baseline 0?) * gcaron: X=932.0,Y=-1.0 (should be at baseline 0?) and 24 more. [code: found-misalignments]
--- Rationale --- This check looks for outline segments which seem particularly short (less than 0.006%% 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.* β **WARN** The following glyphs have segments which seem very short: * Aogonek contains a short segment B<<1541.0,-297.0>-<1568.0,-297.0>-<1586.5,-290.5>> * Aogonek contains a short segment B<<1586.5,-290.5>-<1605.0,-284.0>-<1626.0,-271.0>> * Ccedilla contains a short segment B<<944.0,-259.0>-<944.0,-232.0>-<925.0,-219.0>> * Ccedilla contains a short segment B<<925.0,-219.0>-<906.0,-206.0>-<876.0,-206.0>> * Ccedilla contains a short segment L<<903.0,-104.0>--<918.0,-104.0>> * Eogonek contains a short segment B<<1281.0,-207.0>-<1281.0,-250.0>-<1308.0,-273.5>> * Eogonek contains a short segment B<<1308.0,-273.5>-<1335.0,-297.0>-<1378.0,-297.0>> * Eogonek contains a short segment B<<1378.0,-297.0>-<1404.0,-297.0>-<1422.5,-290.5>> * Eogonek contains a short segment B<<1422.5,-290.5>-<1441.0,-284.0>-<1462.0,-271.0>> * Eng contains a short segment B<<1123.0,-322.0>-<1146.0,-326.0>-<1172.0,-326.0>> and 76 more. [code: found-short-segments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * R: L<<1055.0,698.0>--<1005.0,698.0>>/B<<1005.0,698.0>-<1128.0,673.0>-<1181.5,586.0>> = 11.488981202159193 * Racute: L<<1055.0,698.0>--<1005.0,698.0>>/B<<1005.0,698.0>-<1128.0,673.0>-<1181.5,586.0>> = 11.488981202159193 * Rcaron: L<<1055.0,698.0>--<1005.0,698.0>>/B<<1005.0,698.0>-<1128.0,673.0>-<1181.5,586.0>> = 11.488981202159193 * braceleft.case: B<<485.5,824.0>-<421.0,756.0>-<289.0,750.0>>/B<<289.0,750.0>-<421.0,744.0>-<485.5,676.0>> = 5.205124404999463 * braceleft: B<<532.5,735.5>-<466.0,644.0>-<301.0,637.0>>/B<<301.0,637.0>-<466.0,629.0>-<532.5,537.5>> = 5.205076772283028 * braceright.case: B<<360.5,676.0>-<425.0,744.0>-<557.0,750.0>>/B<<557.0,750.0>-<425.0,756.0>-<360.5,824.0>> = 5.205124404999463 * braceright: B<<404.5,537.5>-<471.0,629.0>-<636.0,637.0>>/B<<636.0,637.0>-<471.0,644.0>-<404.5,735.5>> = 5.205076772283028 * eng: L<<513.0,1140.0>--<513.0,861.0>>/B<<513.0,861.0>-<549.0,1006.0>-<649.0,1082.0>> = 13.943230920553672 * eth: B<<846.5,1055.0>-<946.0,1001.0>-<1000.0,879.0>>/B<<1000.0,879.0>-<977.0,998.0>-<935.5,1096.5>> = 12.936189670735347 * m: L<<509.0,1139.0>--<509.0,889.0>>/B<<509.0,889.0>-<540.0,1018.0>-<626.0,1087.5>> = 13.512530635785994 and 36 more. [code: found-jaggy-segments]
--- 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.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * k: L<<245.0,149.0>--<246.0,1424.0>> and uni0137: L<<245.0,149.0>--<246.0,1424.0>> [code: found-semi-vertical]
--- 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.* β **WARN** Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- 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.* β **WARN** In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
--- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * adieresis: X=804.0,Y=1499.0 (should be at cap-height 1500?) * adieresis: X=984.5,Y=1499.0 (should be at cap-height 1500?) * adieresis: X=351.5,Y=1499.0 (should be at cap-height 1500?) * adieresis: X=532.0,Y=1499.0 (should be at cap-height 1500?) * uni0203: X=433.0,Y=1500.5 (should be at cap-height 1500?) * uni0203: X=905.5,Y=1500.5 (should be at cap-height 1500?) * edieresis: X=788.0,Y=1499.0 (should be at cap-height 1500?) * edieresis: X=968.5,Y=1499.0 (should be at cap-height 1500?) * edieresis: X=335.5,Y=1499.0 (should be at cap-height 1500?) * edieresis: X=516.0,Y=1499.0 (should be at cap-height 1500?) and 44 more. [code: found-misalignments]
--- Rationale --- This check looks for outline segments which seem particularly short (less than 0.006%% 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.* β **WARN** The following glyphs have segments which seem very short: * Ccedilla contains a short segment B<<959.0,-262.0>-<959.0,-230.0>-<937.0,-215.0>> * Ccedilla contains a short segment B<<937.0,-215.0>-<915.0,-200.0>-<880.0,-200.0>> * Ccedilla contains a short segment L<<892.0,-115.0>--<912.0,-115.0>> * Eogonek contains a short segment B<<1352.0,-314.0>-<1382.0,-314.0>-<1402.5,-306.0>> * Eogonek contains a short segment B<<1402.5,-306.0>-<1423.0,-298.0>-<1447.0,-282.0>> * Eng contains a short segment B<<1127.5,-190.5>-<1160.0,-212.0>-<1160.0,-253.0>> * Eng contains a short segment B<<1160.0,-253.0>-<1160.0,-286.0>-<1144.0,-306.5>> * Eng contains a short segment B<<1144.0,-306.5>-<1128.0,-327.0>-<1102.0,-337.0>> * Scedilla contains a short segment B<<918.0,-25.0>-<901.0,-25.0>-<885.0,-24.0>> * Scedilla contains a short segment L<<873.0,-115.0>--<893.0,-115.0>> and 67 more. [code: found-short-segments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * R: L<<1031.0,699.0>--<969.0,699.0>>/B<<969.0,699.0>-<1090.0,672.0>-<1143.0,584.0>> = 12.578935237493035 * Racute: L<<1031.0,699.0>--<969.0,699.0>>/B<<969.0,699.0>-<1090.0,672.0>-<1143.0,584.0>> = 12.578935237493035 * Rcaron: L<<1031.0,699.0>--<969.0,699.0>>/B<<969.0,699.0>-<1090.0,672.0>-<1143.0,584.0>> = 12.578935237493035 * braceleft.case: B<<453.5,822.5>-<390.0,756.0>-<266.0,750.0>>/B<<266.0,750.0>-<390.0,744.0>-<453.5,677.5>> = 5.540431594400349 * braceleft: B<<497.0,727.5>-<430.0,642.0>-<280.0,635.0>>/B<<280.0,635.0>-<430.0,628.0>-<497.0,542.5>> = 5.343729186545131 * braceright.case: B<<383.5,677.5>-<447.0,744.0>-<571.0,750.0>>/B<<571.0,750.0>-<447.0,756.0>-<383.5,822.5>> = 5.540431594400349 * braceright: B<<427.0,542.5>-<494.0,628.0>-<644.0,635.0>>/B<<644.0,635.0>-<494.0,642.0>-<427.0,727.5>> = 5.343729186545131 * eth: B<<864.5,1055.0>-<968.0,999.0>-<1024.0,876.0>>/B<<1024.0,876.0>-<998.0,1001.0>-<950.0,1104.0>> = 12.72905741338642 * uni0156: L<<1031.0,699.0>--<969.0,699.0>>/B<<969.0,699.0>-<1090.0,672.0>-<1143.0,584.0>> = 12.578935237493035 * uni0210: L<<1031.0,699.0>--<969.0,699.0>>/B<<969.0,699.0>-<1090.0,672.0>-<1143.0,584.0>> = 12.578935237493035 and 3 more. [code: found-jaggy-segments]
--- 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.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * k: L<<258.0,116.0>--<259.0,1453.0>> and uni0137: L<<258.0,116.0>--<259.0,1453.0>> [code: found-semi-vertical]
--- 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.* β **WARN** Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20A6 Contours detected: 4 Expected: 1, 3 or 5 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20A6 Contours detected: 4 Expected: 1, 3 or 5 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 16pt SemiBold' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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.* β **WARN** In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
--- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * eth: X=624.5,Y=1498.0 (should be at cap-height 1500?) * v: X=559.0,Y=-2.0 (should be at baseline 0?) * v: X=842.0,Y=-2.0 (should be at baseline 0?) * w: X=520.0,Y=-2.0 (should be at baseline 0?) * w: X=1507.0,Y=-2.0 (should be at baseline 0?) * w: X=1236.0,Y=-2.0 (should be at baseline 0?) * w: X=793.0,Y=-2.0 (should be at baseline 0?) * wacute: X=520.0,Y=-2.0 (should be at baseline 0?) * wacute: X=1507.0,Y=-2.0 (should be at baseline 0?) * wacute: X=1236.0,Y=-2.0 (should be at baseline 0?) and 26 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have colinear vectors: * uhorn: L<<811.0,1149.0>--<1253.0,1149.0>> -> L<<1253.0,1149.0>--<1253.0,1149.0>> * uni1EE9: L<<811.0,1149.0>--<1253.0,1149.0>> -> L<<1253.0,1149.0>--<1253.0,1149.0>> * uni1EEB: L<<811.0,1149.0>--<1253.0,1149.0>> -> L<<1253.0,1149.0>--<1253.0,1149.0>> * uni1EED: L<<811.0,1149.0>--<1253.0,1149.0>> -> L<<1253.0,1149.0>--<1253.0,1149.0>> * uni1EEF: L<<811.0,1149.0>--<1253.0,1149.0>> -> L<<1253.0,1149.0>--<1253.0,1149.0>> and uni1EF1: L<<811.0,1149.0>--<1253.0,1149.0>> -> L<<1253.0,1149.0>--<1253.0,1149.0>> [code: found-colinear-vectors]
--- 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.* β **WARN** The following glyphs have jaggy segments: * R: L<<1075.0,697.0>--<1033.0,697.0>>/B<<1033.0,697.0>-<1160.0,675.0>-<1213.5,588.5>> = 9.827724011163108 * Racute: L<<1075.0,697.0>--<1033.0,697.0>>/B<<1033.0,697.0>-<1160.0,675.0>-<1213.5,588.5>> = 9.827724011163108 * Rcaron: L<<1075.0,697.0>--<1033.0,697.0>>/B<<1033.0,697.0>-<1160.0,675.0>-<1213.5,588.5>> = 9.827724011163108 * braceleft.case: B<<512.5,825.0>-<448.0,756.0>-<308.0,750.0>>/B<<308.0,750.0>-<448.0,744.0>-<512.5,675.0>> = 4.908063349054138 * braceleft: B<<563.0,742.5>-<497.0,646.0>-<319.0,638.0>>/B<<319.0,638.0>-<497.0,631.0>-<563.0,534.5>> = 4.825403808579327 * braceright.case: B<<341.0,675.0>-<406.0,744.0>-<546.0,750.0>>/B<<546.0,750.0>-<406.0,756.0>-<341.0,825.0>> = 4.908063349054138 * braceright: B<<386.0,534.5>-<452.0,631.0>-<630.0,638.0>>/B<<630.0,638.0>-<452.0,646.0>-<386.0,742.5>> = 4.825403808579327 * eng: L<<549.0,1149.0>--<549.0,879.0>>/B<<549.0,879.0>-<582.0,1017.0>-<678.0,1092.5>> = 13.448615051686525 * eth: B<<831.0,1055.5>-<927.0,1003.0>-<979.0,882.0>>/B<<979.0,882.0>-<960.0,996.0>-<923.5,1090.5>> = 13.79339269298903 * m: L<<544.0,1149.0>--<544.0,891.0>>/B<<544.0,891.0>-<572.0,1022.0>-<657.0,1094.5>> = 12.06488441052542 and 36 more. [code: found-jaggy-segments]
--- 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.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * k: L<<235.0,177.0>--<236.0,1399.0>> * k: L<<572.0,1576.0>--<571.0,602.0>> * uni0137: L<<235.0,177.0>--<236.0,1399.0>> and uni0137: L<<572.0,1576.0>--<571.0,602.0>> [code: found-semi-vertical]
--- 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.* β **WARN** Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 16pt Thin' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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.* β **WARN** In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
--- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni1EB4: X=650.0,Y=2158.0 (should be at ascender 2160?) * uni1EAA: X=650.0,Y=2158.0 (should be at ascender 2160?) * uni1EC4: X=591.0,Y=2158.0 (should be at ascender 2160?) * uni1ED6: X=691.0,Y=2158.0 (should be at ascender 2160?) * Q: X=1154.0,Y=-2.0 (should be at baseline 0?) * Uogonek: X=1124.0,Y=-1.0 (should be at baseline 0?) * uni1EA3: X=774.0,Y=1498.0 (should be at cap-height 1500?) * uni1EA3: X=554.0,Y=1498.0 (should be at cap-height 1500?) * uni1EBB: X=778.0,Y=1498.0 (should be at cap-height 1500?) * uni1EBB: X=558.0,Y=1498.0 (should be at cap-height 1500?) and 37 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * braceleft.case: B<<375.5,818.5>-<314.0,756.0>-<210.0,750.0>>/B<<210.0,750.0>-<314.0,744.0>-<375.5,681.5>> = 6.603731348869935 * braceleft: B<<409.5,707.5>-<341.0,637.0>-<228.0,630.0>>/B<<228.0,630.0>-<341.0,623.0>-<409.5,553.0>> = 7.089532911189703 * braceright.case: B<<440.0,681.5>-<502.0,744.0>-<605.0,750.0>>/B<<605.0,750.0>-<502.0,756.0>-<440.0,818.5>> = 6.667701323073103 * braceright: B<<481.5,553.0>-<550.0,623.0>-<663.0,630.0>>/B<<663.0,630.0>-<550.0,637.0>-<481.5,707.5>> = 7.089532911189703 * eth: B<<910.5,1053.5>-<1024.0,991.0>-<1085.0,864.0>>/B<<1085.0,864.0>-<1049.0,1006.0>-<982.5,1121.5>> = 11.42970682912706 * nine.dnom: B<<582.0,204.5>-<618.0,295.0>-<610.0,439.0>>/B<<610.0,439.0>-<600.0,369.0>-<536.0,315.5>> = 11.309932474020162 * nine.lf: B<<1128.5,553.5>-<1166.0,742.0>-<1145.0,1014.0>>/B<<1145.0,1014.0>-<1132.0,811.0>-<1003.0,687.0>> = 8.078997569467882 * nine.numr: B<<582.0,981.5>-<618.0,1072.0>-<610.0,1216.0>>/B<<610.0,1216.0>-<600.0,1146.0>-<536.0,1092.5>> = 11.309932474020162 * nine: B<<1128.5,553.5>-<1166.0,742.0>-<1145.0,1014.0>>/B<<1145.0,1014.0>-<1132.0,811.0>-<1003.0,687.0>> = 8.078997569467882 * six.dnom: B<<167.5,518.5>-<132.0,428.0>-<140.0,284.0>>/B<<140.0,284.0>-<151.0,354.0>-<214.5,407.5>> = 12.110420220283205 and 8 more. [code: found-jaggy-segments]
--- 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.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * dotlessi.ss01: L<<268.0,203.0>--<269.0,1054.0>> * i.loclTRK.ss01: L<<268.0,203.0>--<269.0,1054.0>> * i.ss01: L<<268.0,203.0>--<269.0,1054.0>> * iacute.ss01: L<<268.0,203.0>--<269.0,1054.0>> * icircumflex.ss01: L<<268.0,203.0>--<269.0,1054.0>> * idieresis.ss01: L<<268.0,203.0>--<269.0,1054.0>> * igrave.ss01: L<<268.0,203.0>--<269.0,1054.0>> * imacron.ss01: L<<268.0,203.0>--<269.0,1054.0>> * l.ss01: L<<268.0,205.0>--<269.0,1513.0>> * lacute.ss01: L<<268.0,205.0>--<269.0,1513.0>> and 12 more. [code: found-semi-vertical]
--- 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.* β **WARN** Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: c Contours detected: 2 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: cacute Contours detected: 3 Expected: 2 Glyph name: ccircumflex Contours detected: 3 Expected: 2 Glyph name: cdotaccent Contours detected: 3 Expected: 2 Glyph name: ccaron Contours detected: 3 Expected: 2 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: c Contours detected: 2 Expected: 1 Glyph name: cacute Contours detected: 3 Expected: 2 Glyph name: ccaron Contours detected: 3 Expected: 2 Glyph name: ccircumflex Contours detected: 3 Expected: 2 Glyph name: cdotaccent Contours detected: 3 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- 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.* β **WARN** In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
--- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni1EA9: X=1219.0,Y=1501.0 (should be at cap-height 1500?) * uni1EA3: X=608.0,Y=1499.5 (should be at cap-height 1500?) * uni1EC3: X=1190.0,Y=1501.0 (should be at cap-height 1500?) * uni1EBB: X=579.0,Y=1499.5 (should be at cap-height 1500?) * uni1EC9: X=341.0,Y=1499.5 (should be at cap-height 1500?) * uni1ED5: X=1249.0,Y=1501.0 (should be at cap-height 1500?) * uni1ECF: X=638.0,Y=1499.5 (should be at cap-height 1500?) * uni1EDF: X=638.0,Y=1499.5 (should be at cap-height 1500?) * scedilla: X=542.0,Y=2.0 (should be at baseline 0?) * uni1EE7: X=626.0,Y=1499.5 (should be at cap-height 1500?) and 7 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * B: B<<1392.5,896.5>-<1298.0,810.0>-<1139.0,786.0>>/B<<1139.0,786.0>-<1341.0,769.0>-<1456.0,681.5>> = 13.394207674479551 * braceleft.case: B<<545.0,837.5>-<479.0,755.0>-<312.0,750.0>>/B<<312.0,750.0>-<479.0,745.0>-<545.0,662.5>> = 3.4298603910528938 * braceleft: B<<503.0,654.0>-<418.0,605.0>-<262.0,600.0>>/B<<262.0,600.0>-<418.0,595.0>-<503.0,546.0>> = 3.6715494810911826 * braceright.case: B<<335.5,662.5>-<402.0,745.0>-<568.0,750.0>>/B<<568.0,750.0>-<402.0,755.0>-<335.5,837.5>> = 3.4505097509451392 * braceright: B<<457.0,546.0>-<542.0,595.0>-<698.0,600.0>>/B<<698.0,600.0>-<542.0,605.0>-<457.0,654.0>> = 3.6715494810911826 * eng: L<<558.0,1140.0>--<558.0,870.0>>/B<<558.0,870.0>-<578.0,1005.0>-<657.0,1082.5>> = 8.426969021480678 * eth: B<<730.0,1075.5>-<811.0,1035.0>-<853.0,935.0>>/B<<853.0,935.0>-<814.0,1112.0>-<722.0,1257.0>> = 10.356462865054173 * m: L<<546.0,1140.0>--<546.0,869.0>>/B<<546.0,869.0>-<565.0,1004.0>-<641.5,1082.0>> = 8.01123161285598 * n: L<<558.0,1140.0>--<558.0,870.0>>/B<<558.0,870.0>-<578.0,1005.0>-<657.0,1082.5>> = 8.426969021480678 * nacute: L<<558.0,1140.0>--<558.0,870.0>>/B<<558.0,870.0>-<578.0,1005.0>-<657.0,1082.5>> = 8.426969021480678 and 30 more. [code: found-jaggy-segments]
--- 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.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * k: L<<204.0,192.0>--<205.0,1308.0>> * k: L<<34.0,0.0>--<35.0,192.0>> * k: L<<605.0,1500.0>--<604.0,647.0>> * uni0137: L<<204.0,192.0>--<205.0,1308.0>> * uni0137: L<<34.0,0.0>--<35.0,192.0>> and uni0137: L<<605.0,1500.0>--<604.0,647.0>> [code: found-semi-vertical]
--- 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.* β **WARN** Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 144pt ExtraLight' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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.* β **WARN** In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
--- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni1EB4: X=626.0,Y=2162.0 (should be at ascender 2160?) * uni1EA4: X=1239.0,Y=2158.0 (should be at ascender 2160?) * uni1EA4: X=1320.0,Y=2158.0 (should be at ascender 2160?) * uni1EA6: X=1003.0,Y=2158.0 (should be at ascender 2160?) * uni1EA6: X=1084.0,Y=2158.0 (should be at ascender 2160?) * uni1EAA: X=626.0,Y=2162.0 (should be at ascender 2160?) * uni1EBE: X=1163.0,Y=2158.0 (should be at ascender 2160?) * uni1EBE: X=1244.0,Y=2158.0 (should be at ascender 2160?) * uni1EC0: X=927.0,Y=2158.0 (should be at ascender 2160?) * uni1EC0: X=1009.0,Y=2158.0 (should be at ascender 2160?) and 23 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * B: B<<1244.0,881.0>-<1157.0,792.0>-<1003.0,769.0>>/B<<1003.0,769.0>-<1185.0,753.0>-<1288.0,660.0>> = 13.518451048348528 * R: L<<936.0,725.0>--<846.0,725.0>>/B<<846.0,725.0>-<973.0,697.0>-<1031.0,608.0>> = 12.433235188095638 * Racute: L<<936.0,725.0>--<846.0,725.0>>/B<<846.0,725.0>-<973.0,697.0>-<1031.0,608.0>> = 12.433235188095638 * Rcaron: L<<936.0,725.0>--<846.0,725.0>>/B<<846.0,725.0>-<973.0,697.0>-<1031.0,608.0>> = 12.433235188095638 * a: L<<870.0,190.0>--<870.0,317.0>>/B<<870.0,317.0>-<830.0,140.0>-<719.0,61.5>> = 12.734290795347581 * aacute: L<<870.0,190.0>--<870.0,317.0>>/B<<870.0,317.0>-<830.0,140.0>-<719.0,61.5>> = 12.734290795347581 * abreve: L<<870.0,190.0>--<870.0,317.0>>/B<<870.0,317.0>-<830.0,140.0>-<719.0,61.5>> = 12.734290795347581 * acircumflex: L<<870.0,190.0>--<870.0,317.0>>/B<<870.0,317.0>-<830.0,140.0>-<719.0,61.5>> = 12.734290795347581 * adieresis: L<<870.0,190.0>--<870.0,317.0>>/B<<870.0,317.0>-<830.0,140.0>-<719.0,61.5>> = 12.734290795347581 * agrave: L<<870.0,190.0>--<870.0,317.0>>/B<<870.0,317.0>-<830.0,140.0>-<719.0,61.5>> = 12.734290795347581 and 77 more. [code: found-jaggy-segments]
--- 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.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * dotlessi.ss01: L<<243.0,215.0>--<246.0,1032.0>> * i.loclTRK.ss01: L<<243.0,215.0>--<246.0,1032.0>> * i.ss01: L<<243.0,215.0>--<246.0,1032.0>> * iacute.ss01: L<<243.0,215.0>--<246.0,1032.0>> * icircumflex.ss01: L<<243.0,215.0>--<246.0,1032.0>> * idieresis.ss01: L<<243.0,215.0>--<246.0,1032.0>> * igrave.ss01: L<<243.0,215.0>--<246.0,1032.0>> * imacron.ss01: L<<243.0,215.0>--<246.0,1032.0>> * l.ss01: L<<219.0,223.0>--<223.0,1444.0>> * lacute.ss01: L<<219.0,223.0>--<223.0,1444.0>> and 13 more. [code: found-semi-vertical]
--- 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.* β **WARN** Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20A6 Contours detected: 4 Expected: 1, 3 or 5 Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20A6 Contours detected: 4 Expected: 1, 3 or 5 Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 144pt Light' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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.* β **WARN** In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
--- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni1EB4: X=568.0,Y=2161.0 (should be at ascender 2160?) * uni1EAA: X=568.0,Y=2161.0 (should be at ascender 2160?) * uni1EC4: X=486.0,Y=2161.0 (should be at ascender 2160?) * uni1ED6: X=578.0,Y=2161.0 (should be at ascender 2160?) * Ohorn: X=1557.5,Y=1501.5 (should be at cap-height 1500?) * uni1EDA: X=1557.5,Y=1501.5 (should be at cap-height 1500?) * uni1EE2: X=1557.5,Y=1501.5 (should be at cap-height 1500?) * uni1EDC: X=1557.5,Y=1501.5 (should be at cap-height 1500?) * uni1EDE: X=1557.5,Y=1501.5 (should be at cap-height 1500?) * uni1EE0: X=1557.5,Y=1501.5 (should be at cap-height 1500?) and 47 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * B: B<<1267.0,883.5>-<1179.0,795.0>-<1025.0,771.0>>/B<<1025.0,771.0>-<1209.0,755.0>-<1313.5,663.0>> = 13.827699491738633 * R: L<<950.0,724.0>--<860.0,724.0>>/B<<860.0,724.0>-<992.0,698.0>-<1052.5,610.0>> = 11.142889858339293 * Racute: L<<950.0,724.0>--<860.0,724.0>>/B<<860.0,724.0>-<992.0,698.0>-<1052.5,610.0>> = 11.142889858339293 * Rcaron: L<<950.0,724.0>--<860.0,724.0>>/B<<860.0,724.0>-<992.0,698.0>-<1052.5,610.0>> = 11.142889858339293 * a: L<<858.0,211.0>--<858.0,307.0>>/B<<858.0,307.0>-<820.0,135.0>-<711.0,58.0>> = 12.458246440004897 * aacute: L<<858.0,211.0>--<858.0,307.0>>/B<<858.0,307.0>-<820.0,135.0>-<711.0,58.0>> = 12.458246440004897 * abreve: L<<858.0,211.0>--<858.0,307.0>>/B<<858.0,307.0>-<820.0,135.0>-<711.0,58.0>> = 12.458246440004897 * acircumflex: L<<858.0,211.0>--<858.0,307.0>>/B<<858.0,307.0>-<820.0,135.0>-<711.0,58.0>> = 12.458246440004897 * adieresis: L<<858.0,211.0>--<858.0,307.0>>/B<<858.0,307.0>-<820.0,135.0>-<711.0,58.0>> = 12.458246440004897 * agrave: L<<858.0,211.0>--<858.0,307.0>>/B<<858.0,307.0>-<820.0,135.0>-<711.0,58.0>> = 12.458246440004897 and 71 more. [code: found-jaggy-segments]
--- 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.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * l.ss01: L<<211.0,247.0>--<219.0,1425.0>> * lacute.ss01: L<<211.0,247.0>--<219.0,1425.0>> * lcaron.ss01: L<<211.0,247.0>--<219.0,1425.0>> and uni013C.ss01: L<<211.0,247.0>--<219.0,1425.0>> [code: found-semi-vertical]
--- 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.* β **WARN** Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: c Contours detected: 2 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: cacute Contours detected: 3 Expected: 2 Glyph name: ccircumflex Contours detected: 3 Expected: 2 Glyph name: cdotaccent Contours detected: 3 Expected: 2 Glyph name: ccaron Contours detected: 3 Expected: 2 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: c Contours detected: 2 Expected: 1 Glyph name: cacute Contours detected: 3 Expected: 2 Glyph name: ccaron Contours detected: 3 Expected: 2 Glyph name: ccircumflex Contours detected: 3 Expected: 2 Glyph name: cdotaccent Contours detected: 3 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 144pt Medium' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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.* β **WARN** In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
--- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * Eng: X=1308.0,Y=-1.0 (should be at baseline 0?) * eogonek: X=811.0,Y=2.0 (should be at baseline 0?) * uni01EB: X=856.0,Y=-1.0 (should be at baseline 0?) * uni2082: X=376.0,Y=2.0 (should be at baseline 0?) * dollar: X=843.0,Y=1499.0 (should be at cap-height 1500?) and florin: X=627.0,Y=-2.0 (should be at baseline 0?) [code: found-misalignments]
--- Rationale --- This check looks for outline segments which seem particularly short (less than 0.006%% 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.* β **WARN** The following glyphs have segments which seem very short: * Aogonek contains a short segment B<<1491.0,-312.0>-<1518.0,-312.0>-<1536.5,-305.0>> * Aogonek contains a short segment B<<1536.5,-305.0>-<1555.0,-298.0>-<1577.0,-285.0>> * Ccedilla contains a short segment B<<898.0,-258.0>-<898.0,-229.0>-<877.5,-214.5>> * Ccedilla contains a short segment B<<877.5,-214.5>-<857.0,-200.0>-<826.0,-200.0>> * Ccedilla contains a short segment L<<849.0,-105.0>--<867.0,-105.0>> * Eogonek contains a short segment B<<1293.0,-312.0>-<1319.0,-312.0>-<1338.0,-305.0>> * Eogonek contains a short segment B<<1338.0,-305.0>-<1357.0,-298.0>-<1378.0,-285.0>> * Eng contains a short segment B<<1112.0,-234.0>-<1112.0,-272.0>-<1091.5,-295.5>> * Eng contains a short segment B<<1091.5,-295.5>-<1071.0,-319.0>-<1036.0,-329.0>> * Scedilla contains a short segment B<<871.0,-29.0>-<864.0,-29.0>-<857.0,-29.0>> and 61 more. [code: found-short-segments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * B: B<<1333.0,890.5>-<1242.0,803.0>-<1086.0,779.0>>/B<<1086.0,779.0>-<1279.0,762.0>-<1389.0,672.5>> = 13.779949218755245 * R: L<<993.0,722.0>--<891.0,722.0>>/B<<891.0,722.0>-<1040.0,704.0>-<1111.5,618.5>> = 6.888258276994703 * Racute: L<<993.0,722.0>--<891.0,722.0>>/B<<891.0,722.0>-<1040.0,704.0>-<1111.5,618.5>> = 6.888258276994703 * Rcaron: L<<993.0,722.0>--<891.0,722.0>>/B<<891.0,722.0>-<1040.0,704.0>-<1111.5,618.5>> = 6.888258276994703 * a: L<<824.0,270.0>--<824.0,276.0>>/B<<824.0,276.0>-<788.0,121.0>-<686.5,49.0>> = 13.075581099089868 * aacute: L<<824.0,270.0>--<824.0,276.0>>/B<<824.0,276.0>-<788.0,121.0>-<686.5,49.0>> = 13.075581099089868 * abreve: L<<824.0,270.0>--<824.0,276.0>>/B<<824.0,276.0>-<788.0,121.0>-<686.5,49.0>> = 13.075581099089868 * acircumflex: L<<824.0,270.0>--<824.0,276.0>>/B<<824.0,276.0>-<788.0,121.0>-<686.5,49.0>> = 13.075581099089868 * adieresis: L<<824.0,270.0>--<824.0,276.0>>/B<<824.0,276.0>-<788.0,121.0>-<686.5,49.0>> = 13.075581099089868 * agrave: L<<824.0,270.0>--<824.0,276.0>>/B<<824.0,276.0>-<788.0,121.0>-<686.5,49.0>> = 13.075581099089868 and 75 more. [code: found-jaggy-segments]
--- 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.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * k: L<<225.0,135.0>--<226.0,1365.0>> * k: L<<31.0,0.0>--<32.0,135.0>> * k: L<<504.0,1500.0>--<503.0,580.0>> * uni0137: L<<225.0,135.0>--<226.0,1365.0>> * uni0137: L<<31.0,0.0>--<32.0,135.0>> and uni0137: L<<504.0,1500.0>--<503.0,580.0>> [code: found-semi-vertical]
--- 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.* β **WARN** Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: c Contours detected: 2 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: cacute Contours detected: 3 Expected: 2 Glyph name: ccircumflex Contours detected: 3 Expected: 2 Glyph name: cdotaccent Contours detected: 3 Expected: 2 Glyph name: ccaron Contours detected: 3 Expected: 2 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: c Contours detected: 2 Expected: 1 Glyph name: cacute Contours detected: 3 Expected: 2 Glyph name: ccaron Contours detected: 3 Expected: 2 Glyph name: ccircumflex Contours detected: 3 Expected: 2 Glyph name: cdotaccent Contours detected: 3 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- 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.* β **WARN** In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
--- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni1EB4: X=824.0,Y=2158.0 (should be at ascender 2160?) * uni1EAA: X=824.0,Y=2158.0 (should be at ascender 2160?) * uni1EC4: X=734.0,Y=2158.0 (should be at ascender 2160?) * Eng: X=1329.0,Y=-2.0 (should be at baseline 0?) * uni1ED6: X=836.0,Y=2158.0 (should be at ascender 2160?) * uni1EBD: X=555.0,Y=1501.5 (should be at cap-height 1500?) * itilde: X=274.0,Y=1501.5 (should be at cap-height 1500?) * ntilde: X=613.0,Y=1501.5 (should be at cap-height 1500?) * uni1EE1: X=597.0,Y=1501.5 (should be at cap-height 1500?) * otilde: X=597.0,Y=1501.5 (should be at cap-height 1500?) and 8 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * B: B<<1301.0,887.0>-<1212.0,799.0>-<1057.0,775.0>>/B<<1057.0,775.0>-<1245.0,759.0>-<1352.0,668.0>> = 13.666222760968326 * R: L<<972.0,723.0>--<878.0,723.0>>/B<<878.0,723.0>-<1017.0,701.0>-<1083.0,614.0>> = 8.993792398755563 * Racute: L<<972.0,723.0>--<878.0,723.0>>/B<<878.0,723.0>-<1017.0,701.0>-<1083.0,614.0>> = 8.993792398755563 * Rcaron: L<<972.0,723.0>--<878.0,723.0>>/B<<878.0,723.0>-<1017.0,701.0>-<1083.0,614.0>> = 8.993792398755563 * a: L<<841.0,241.0>--<841.0,292.0>>/B<<841.0,292.0>-<803.0,128.0>-<698.0,53.5>> = 13.04563706294857 * aacute: L<<841.0,241.0>--<841.0,292.0>>/B<<841.0,292.0>-<803.0,128.0>-<698.0,53.5>> = 13.04563706294857 * abreve: L<<841.0,241.0>--<841.0,292.0>>/B<<841.0,292.0>-<803.0,128.0>-<698.0,53.5>> = 13.04563706294857 * acircumflex: L<<841.0,241.0>--<841.0,292.0>>/B<<841.0,292.0>-<803.0,128.0>-<698.0,53.5>> = 13.04563706294857 * adieresis: L<<841.0,241.0>--<841.0,292.0>>/B<<841.0,292.0>-<803.0,128.0>-<698.0,53.5>> = 13.04563706294857 * agrave: L<<841.0,241.0>--<841.0,292.0>>/B<<841.0,292.0>-<803.0,128.0>-<698.0,53.5>> = 13.04563706294857 and 79 more. [code: found-jaggy-segments]
--- 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.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * k: L<<236.0,104.0>--<237.0,1396.0>> * k: L<<448.0,1500.0>--<447.0,544.0>> * uni0137: L<<236.0,104.0>--<237.0,1396.0>> and uni0137: L<<448.0,1500.0>--<447.0,544.0>> [code: found-semi-vertical]
--- 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.* β **WARN** Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: c Contours detected: 2 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: cacute Contours detected: 3 Expected: 2 Glyph name: ccircumflex Contours detected: 3 Expected: 2 Glyph name: cdotaccent Contours detected: 3 Expected: 2 Glyph name: ccaron Contours detected: 3 Expected: 2 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20A6 Contours detected: 4 Expected: 1, 3 or 5 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: c Contours detected: 2 Expected: 1 Glyph name: cacute Contours detected: 3 Expected: 2 Glyph name: ccaron Contours detected: 3 Expected: 2 Glyph name: ccircumflex Contours detected: 3 Expected: 2 Glyph name: cdotaccent Contours detected: 3 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20A6 Contours detected: 4 Expected: 1, 3 or 5 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 144pt SemiBold' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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.* β **WARN** In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
--- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * Q: X=1175.0,Y=2.0 (should be at baseline 0?) * atilde: X=351.0,Y=1498.0 (should be at cap-height 1500?) * uni1EBD: X=331.0,Y=1501.0 (should be at cap-height 1500?) * itilde: X=78.0,Y=1501.0 (should be at cap-height 1500?) * ntilde: X=406.0,Y=1501.0 (should be at cap-height 1500?) * uni1EE1: X=384.0,Y=1501.0 (should be at cap-height 1500?) * uni01EB: X=884.0,Y=1.0 (should be at baseline 0?) * otilde: X=384.0,Y=1501.0 (should be at cap-height 1500?) * uni022D: X=384.0,Y=1501.0 (should be at cap-height 1500?) * scedilla: X=548.0,Y=-1.0 (should be at baseline 0?) and 28 more. [code: found-misalignments]
--- Rationale --- This check looks for outline segments which seem particularly short (less than 0.006%% 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.* β **WARN** The following glyphs have segments which seem very short: * Aogonek contains a short segment B<<1505.0,-300.0>-<1529.0,-300.0>-<1545.5,-294.5>> * Aogonek contains a short segment B<<1545.5,-294.5>-<1562.0,-289.0>-<1581.0,-278.0>> * AE contains a short segment L<<1405.0,857.0>--<1482.0,857.0>> * AEacute contains a short segment L<<1405.0,857.0>--<1482.0,857.0>> * Ccedilla contains a short segment B<<891.0,-255.0>-<891.0,-229.0>-<873.0,-216.5>> * Ccedilla contains a short segment B<<873.0,-216.5>-<855.0,-204.0>-<828.0,-204.0>> * Ccedilla contains a short segment L<<864.0,-95.0>--<878.0,-95.0>> * Eogonek contains a short segment B<<1243.5,-276.0>-<1270.0,-300.0>-<1312.0,-300.0>> * Eogonek contains a short segment B<<1312.0,-300.0>-<1335.0,-300.0>-<1352.0,-294.5>> * Eogonek contains a short segment B<<1352.0,-294.5>-<1369.0,-289.0>-<1388.0,-278.0>> and 71 more. [code: found-short-segments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * B: B<<1360.5,893.0>-<1268.0,806.0>-<1111.0,782.0>>/B<<1111.0,782.0>-<1308.0,765.0>-<1420.0,676.5>> = 13.623394964149693 * R: L<<1011.0,721.0>--<895.0,721.0>>/B<<895.0,721.0>-<1055.0,708.0>-<1133.5,624.5>> = 4.645078425891569 * Racute: L<<1011.0,721.0>--<895.0,721.0>>/B<<895.0,721.0>-<1055.0,708.0>-<1133.5,624.5>> = 4.645078425891569 * Rcaron: L<<1011.0,721.0>--<895.0,721.0>>/B<<895.0,721.0>-<1055.0,708.0>-<1133.5,624.5>> = 4.645078425891569 * braceleft.case: B<<505.5,834.5>-<440.0,756.0>-<286.0,750.0>>/B<<286.0,750.0>-<440.0,744.0>-<505.5,665.5>> = 4.462349216062345 * braceleft: B<<535.0,706.0>-<457.0,607.0>-<245.0,600.0>>/B<<245.0,600.0>-<457.0,593.0>-<535.0,494.0>> = 3.782309403370746 * braceright.case: B<<357.5,665.5>-<423.0,744.0>-<577.0,750.0>>/B<<577.0,750.0>-<423.0,756.0>-<357.5,834.5>> = 4.462349216062345 * braceright: B<<403.0,494.0>-<481.0,593.0>-<693.0,600.0>>/B<<693.0,600.0>-<481.0,607.0>-<403.0,706.0>> = 3.782309403370746 * c: B<<989.0,836.0>-<982.0,860.0>-<971.0,881.0>>/L<<971.0,881.0>--<989.0,836.0>> = 5.844565877386801 * c: L<<971.0,881.0>--<989.0,836.0>>/B<<989.0,836.0>-<982.0,860.0>-<971.0,881.0>> = 5.541204778039893 and 50 more. [code: found-jaggy-segments]
--- 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.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * k: L<<215.0,161.0>--<216.0,1339.0>> * k: L<<33.0,0.0>--<34.0,161.0>> * k: L<<550.0,388.0>--<549.0,161.0>> * uni0137: L<<215.0,161.0>--<216.0,1339.0>> * uni0137: L<<33.0,0.0>--<34.0,161.0>> and uni0137: L<<550.0,388.0>--<549.0,161.0>> [code: found-semi-vertical]
--- 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.* β **WARN** Font em size (unitsPerEm) is 2200 which may be too large (causing filesize bloat), unless you are sure that the detail level in this font requires that much precision. [code: large-value]
--- 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: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ampersand Contours detected: 0 Expected: 1, 2 or 3 Glyph name: approxequal Contours detected: 0 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: asciitilde Contours detected: 0 Expected: 1 Glyph name: at Contours detected: 0 Expected: 2 Glyph name: copyright Contours detected: 0 Expected: 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: greater Contours detected: 0 Expected: 1 Glyph name: greaterequal Contours detected: 0 Expected: 2 Glyph name: less Contours detected: 0 Expected: 1 Glyph name: lessequal Contours detected: 0 Expected: 2 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: logicalnot Contours detected: 0 Expected: 1 Glyph name: notequal Contours detected: 0 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: paragraph Contours detected: 0 Expected: 1, 2 or 3 Glyph name: registered Contours detected: 0 Expected: 3 or 4 Glyph name: section Contours detected: 0 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni00B5 Contours detected: 0 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uni27E8 Contours detected: 0 Expected: 1 Glyph name: uni27E9 Contours detected: 0 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 144pt Thin' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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.* β **WARN** In order to optimize performance on some legacy renderers, the value of unitsPerEm at the head table should idealy be a power of between 16 to 16384. And values of 1000 and 2000 are also common and may be just fine as well. But we got 2200 instead. [code: suboptimal]
--- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * Q: X=1046.0,Y=-1.0 (should be at baseline 0?) * Uogonek: X=1052.0,Y=-2.0 (should be at baseline 0?) * eogonek: X=736.0,Y=-2.0 (should be at baseline 0?) * g: X=199.5,Y=2.0 (should be at baseline 0?) * gbreve: X=199.5,Y=2.0 (should be at baseline 0?) * gcaron: X=199.5,Y=2.0 (should be at baseline 0?) * gcircumflex: X=199.5,Y=2.0 (should be at baseline 0?) * uni0123: X=199.5,Y=2.0 (should be at baseline 0?) * gdotaccent: X=199.5,Y=2.0 (should be at baseline 0?) * uni1E21: X=199.5,Y=2.0 (should be at baseline 0?) and 28 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have colinear vectors: * Ccedilla: L<<770.0,10.0>--<770.0,10.0>> -> L<<770.0,10.0>--<814.0,10.0>> * b: L<<271.0,325.0>--<271.0,324.0>> -> L<<271.0,324.0>--<271.0,0.0>> * d: L<<1022.0,0.0>--<1022.0,324.0>> -> L<<1022.0,324.0>--<1022.0,325.0>> * dcaron: L<<1030.0,0.0>--<1030.0,324.0>> -> L<<1030.0,324.0>--<1030.0,325.0>> * uni01C6: L<<1022.0,0.0>--<1022.0,324.0>> -> L<<1022.0,324.0>--<1022.0,325.0>> * uni1E0D: L<<1022.0,0.0>--<1022.0,324.0>> -> L<<1022.0,324.0>--<1022.0,325.0>> and uni1E0F: L<<1022.0,0.0>--<1022.0,324.0>> -> L<<1022.0,324.0>--<1022.0,325.0>> [code: found-colinear-vectors]
--- 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.* β **WARN** The following glyphs have jaggy segments: * B: B<<1221.0,878.5>-<1135.0,789.0>-<982.0,766.0>>/B<<982.0,766.0>-<1161.0,751.0>-<1262.0,657.5>> = 13.339207542781917 * C: B<<1196.0,1411.0>-<1347.0,1296.0>-<1396.0,1104.0>>/L<<1396.0,1104.0>--<1396.0,1500.0>> = 14.316759118933225 * Cacute: B<<1196.0,1411.0>-<1347.0,1296.0>-<1396.0,1104.0>>/L<<1396.0,1104.0>--<1396.0,1500.0>> = 14.316759118933225 * Ccaron: B<<1196.0,1411.0>-<1347.0,1296.0>-<1396.0,1104.0>>/L<<1396.0,1104.0>--<1396.0,1500.0>> = 14.316759118933225 * Ccedilla: B<<1196.0,1411.0>-<1347.0,1296.0>-<1396.0,1104.0>>/L<<1396.0,1104.0>--<1396.0,1500.0>> = 14.316759118933225 * Ccircumflex: B<<1196.0,1411.0>-<1347.0,1296.0>-<1396.0,1104.0>>/L<<1396.0,1104.0>--<1396.0,1500.0>> = 14.316759118933225 * Cdotaccent: B<<1196.0,1411.0>-<1347.0,1296.0>-<1396.0,1104.0>>/L<<1396.0,1104.0>--<1396.0,1500.0>> = 14.316759118933225 * Euro: B<<1392.0,1411.0>-<1543.0,1296.0>-<1592.0,1104.0>>/L<<1592.0,1104.0>--<1592.0,1500.0>> = 14.316759118933225 * G: L<<1408.0,0.0>--<1408.0,418.0>>/B<<1408.0,418.0>-<1357.0,218.0>-<1213.0,95.0>> = 14.305551846621958 * Gbreve: L<<1408.0,0.0>--<1408.0,418.0>>/B<<1408.0,418.0>-<1357.0,218.0>-<1213.0,95.0>> = 14.305551846621958 and 106 more. [code: found-jaggy-segments]
π ERROR | π₯ FAIL | β WARN | π€ SKIP | βΉ INFO | π PASS | π DEBUG |
---|---|---|---|---|---|---|
0 | 0 | 114 | 1359 | 85 | 1103 | 0 |
0% | 0% | 4% | 51% | 3% | 41% | 0% |
Note: The following loglevels were omitted in this report:
unitsPerEm warning noted, will fix as soon as I finish all visual checks.
New FB - VF report under v0.7.38
after pulling latest files at commit 67844456da8d91cc3c62a79f6c64b7ee1666bf40
Fontbakery version: 0.7.38
--- Rationale --- A font's winAscent and winDescent values should be greater than the head table's yMax, abs(yMin) values. If they are less than these values, clipping can occur on Windows platforms (https://github.com/RedHatBrand/Overpass/issues/33). If the font includes tall/deep writing systems such as Arabic or Devanagari, the winAscent and winDescent can be greater than the yMax and abs(yMin) to accommodate vowel marks. When the win Metrics are significantly greater than the upm, the linespacing can appear too loose. To counteract this, enabling the OS/2 fsSelection bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 typo values instead. This means the font developer can control the linespacing with the typo values, whilst avoiding clipping by setting the win values to values greater than the yMax and abs(yMin).* π₯ **FAIL** OS/2.usWinAscent value should be equal or greater than 1137, but got 1136 instead [code: ascent]
--- 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: two Contours detected: 2 Expected: 1 [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** This font lacks caret positioning values for these ligature glyphs: - f_b.liga - f_h.liga - f_k.liga - f_t.liga - t_t.liga [code: incomplete-caret-pos-data]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + b - b + f - f + h - h + f - f + i - i + f - f + k - k + f - f + l - l + b - h + i - i + k - k + l - l + t - t + t [code: lacks-kern-info]
--- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * Eng: X=595.0,Y=-1.0 (should be at baseline 0?) * uni1E9E: X=543.5,Y=680.0 (should be at cap-height 682?) * uni1EA3: X=326.0,Y=680.0 (should be at cap-height 682?) * atilde: X=487.0,Y=684.0 (should be at cap-height 682?) * eth: X=280.0,Y=684.0 (should be at cap-height 682?) * uni1EBB: X=307.0,Y=680.0 (should be at cap-height 682?) * uni1EBD: X=468.0,Y=684.0 (should be at cap-height 682?) * f: X=17.0,Y=527.0 (should be at x-height 528?) * f: X=121.0,Y=527.0 (should be at x-height 528?) * f: X=302.0,Y=527.0 (should be at x-height 528?) and 75 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * R: L<<500.0,316.0>--<488.0,316.0>>/B<<488.0,316.0>-<545.0,306.0>-<569.0,267.5>> = 9.950626687951587 * Racute: L<<500.0,316.0>--<488.0,316.0>>/B<<488.0,316.0>-<545.0,306.0>-<569.0,267.5>> = 9.950626687951587 * Rcaron: L<<500.0,316.0>--<488.0,316.0>>/B<<488.0,316.0>-<545.0,306.0>-<569.0,267.5>> = 9.950626687951587 * braceleft.case: B<<262.5,375.5>-<233.0,343.0>-<165.0,341.0>>/B<<165.0,341.0>-<233.0,339.0>-<262.5,306.5>> = 3.3693686357926036 * braceleft: B<<286.5,341.0>-<257.0,294.0>-<169.0,291.0>>/B<<169.0,291.0>-<257.0,287.0>-<286.5,241.0>> = 4.555071251899331 * braceright.case: B<<184.5,306.5>-<214.0,339.0>-<281.0,341.0>>/B<<281.0,341.0>-<214.0,343.0>-<184.5,375.5>> = 3.419628088282934 * braceright: B<<193.5,241.0>-<223.0,287.0>-<311.0,291.0>>/B<<311.0,291.0>-<223.0,294.0>-<193.5,341.0>> = 4.555071251899331 * eng: L<<269.0,527.0>--<269.0,410.0>>/B<<269.0,410.0>-<282.0,469.0>-<323.5,502.5>> = 12.425942865427485 * eth: B<<370.0,480.0>-<412.0,457.0>-<435.0,402.0>>/B<<435.0,402.0>-<427.0,451.0>-<413.0,492.0>> = 13.421193167892039 * m: L<<266.0,527.0>--<266.0,406.0>>/B<<266.0,406.0>-<277.0,466.0>-<315.0,500.5>> = 10.388857815469619 and 38 more. [code: found-jaggy-segments]
--- Rationale --- A font's winAscent and winDescent values should be greater than the head table's yMax, abs(yMin) values. If they are less than these values, clipping can occur on Windows platforms (https://github.com/RedHatBrand/Overpass/issues/33). If the font includes tall/deep writing systems such as Arabic or Devanagari, the winAscent and winDescent can be greater than the yMax and abs(yMin) to accommodate vowel marks. When the win Metrics are significantly greater than the upm, the linespacing can appear too loose. To counteract this, enabling the OS/2 fsSelection bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 typo values instead. This means the font developer can control the linespacing with the typo values, whilst avoiding clipping by setting the win values to values greater than the yMax and abs(yMin).* π₯ **FAIL** OS/2.usWinAscent value should be equal or greater than 1137, but got 1136 instead [code: ascent]
--- 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: two Contours detected: 2 Expected: 1 [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** This font lacks caret positioning values for these ligature glyphs: - f_b.liga - f_h.liga - f_k.liga - f_t.liga - t_t.liga [code: incomplete-caret-pos-data]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + b - b + f - f + h - h + f - f + i - i + f - f + k - k + f - f + l - l + b - h + i - i + k - k + l - l + t - t + t [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 16pt ExtraLight' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni1EB4: X=434.0,Y=983.0 (should be at ascender 982?) * uni1EA4: X=579.0,Y=981.0 (should be at ascender 982?) * uni1EA4: X=622.0,Y=981.0 (should be at ascender 982?) * uni1EA6: X=470.0,Y=981.0 (should be at ascender 982?) * uni1EA6: X=513.0,Y=981.0 (should be at ascender 982?) * uni1EAA: X=434.0,Y=983.0 (should be at ascender 982?) * uni1EBE: X=550.0,Y=981.0 (should be at ascender 982?) * uni1EBE: X=593.0,Y=981.0 (should be at ascender 982?) * uni1EC0: X=441.0,Y=981.0 (should be at ascender 982?) * uni1EC0: X=484.0,Y=981.0 (should be at ascender 982?) and 89 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have colinear vectors: * uhorn: L<<385.0,504.0>--<508.0,504.0>> -> L<<508.0,504.0>--<508.0,504.0>> * uni1EE9: L<<385.0,504.0>--<508.0,504.0>> -> L<<508.0,504.0>--<508.0,504.0>> * uni1EEB: L<<385.0,504.0>--<508.0,504.0>> -> L<<508.0,504.0>--<508.0,504.0>> * uni1EED: L<<385.0,504.0>--<508.0,504.0>> -> L<<508.0,504.0>--<508.0,504.0>> * uni1EEF: L<<385.0,504.0>--<508.0,504.0>> -> L<<508.0,504.0>--<508.0,504.0>> and uni1EF1: L<<385.0,504.0>--<508.0,504.0>> -> L<<508.0,504.0>--<508.0,504.0>> [code: found-colinear-vectors]
--- 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.* β **WARN** The following glyphs have jaggy segments: * braceleft.case: B<<182.5,373.0>-<154.0,344.0>-<104.0,341.0>>/B<<104.0,341.0>-<154.0,338.0>-<182.5,309.0>> = 6.86726072490102 * braceleft: B<<199.5,324.0>-<169.0,290.0>-<113.0,287.0>>/B<<113.0,287.0>-<169.0,284.0>-<199.5,250.0>> = 6.13297100225171 * braceright.case: B<<205.5,309.0>-<234.0,338.0>-<284.0,341.0>>/B<<284.0,341.0>-<234.0,344.0>-<205.5,373.0>> = 6.86726072490102 * braceright: B<<223.0,250.0>-<254.0,284.0>-<310.0,287.0>>/B<<310.0,287.0>-<254.0,290.0>-<223.0,324.0>> = 6.13297100225171 * eth: B<<408.5,478.5>-<459.0,451.0>-<486.0,393.0>>/B<<486.0,393.0>-<471.0,455.0>-<443.0,506.5>> = 11.36224731414825 * nine.lf: B<<502.5,249.0>-<519.0,330.0>-<510.0,445.0>>/B<<510.0,445.0>-<503.0,360.0>-<446.5,307.5>> = 9.182748750618295 * nine: B<<502.5,249.0>-<519.0,330.0>-<510.0,445.0>>/B<<510.0,445.0>-<503.0,360.0>-<446.5,307.5>> = 9.182748750618295 * six.lf: B<<120.0,433.0>-<104.0,352.0>-<112.0,237.0>>/B<<112.0,237.0>-<120.0,322.0>-<176.5,374.5>> = 9.356087880728927 * six: B<<120.0,433.0>-<104.0,352.0>-<112.0,237.0>>/B<<112.0,237.0>-<120.0,322.0>-<176.5,374.5>> = 9.356087880728927 and yen: L<<365.0,270.0>--<300.0,359.0>>/L<<300.0,359.0>--<309.0,346.0>> = 1.4468877051371514 [code: found-jaggy-segments]
--- 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.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * dotlessi.ss01: L<<121.0,101.0>--<123.0,474.0>> * i.loclTRK.ss01: L<<121.0,101.0>--<123.0,474.0>> * i.ss01: L<<121.0,101.0>--<123.0,474.0>> * iacute.ss01: L<<121.0,101.0>--<123.0,474.0>> * icircumflex.ss01: L<<121.0,101.0>--<123.0,474.0>> * idieresis.ss01: L<<121.0,101.0>--<123.0,474.0>> * igrave.ss01: L<<121.0,101.0>--<123.0,474.0>> * imacron.ss01: L<<121.0,101.0>--<123.0,474.0>> * l.ss01: L<<118.0,105.0>--<120.0,681.0>> * lacute.ss01: L<<118.0,105.0>--<120.0,681.0>> and 6 more. [code: found-semi-vertical]
--- Rationale --- A font's winAscent and winDescent values should be greater than the head table's yMax, abs(yMin) values. If they are less than these values, clipping can occur on Windows platforms (https://github.com/RedHatBrand/Overpass/issues/33). If the font includes tall/deep writing systems such as Arabic or Devanagari, the winAscent and winDescent can be greater than the yMax and abs(yMin) to accommodate vowel marks. When the win Metrics are significantly greater than the upm, the linespacing can appear too loose. To counteract this, enabling the OS/2 fsSelection bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 typo values instead. This means the font developer can control the linespacing with the typo values, whilst avoiding clipping by setting the win values to values greater than the yMax and abs(yMin).* π₯ **FAIL** OS/2.usWinAscent value should be equal or greater than 1137, but got 1136 instead [code: ascent]
--- 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 [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** This font lacks caret positioning values for these ligature glyphs: - f_b.liga - f_h.liga - f_k.liga - f_t.liga - t_t.liga [code: incomplete-caret-pos-data]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + b - b + f - f + h - h + f - f + i - i + f - f + k - k + f - f + l - l + b - h + i - i + k - k + l - l + t - t + t [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 16pt Light' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni1EB4: X=397.0,Y=980.0 (should be at ascender 982?) * uni1EAA: X=397.0,Y=980.0 (should be at ascender 982?) * uni1EC4: X=365.0,Y=980.0 (should be at ascender 982?) * uni01C8: X=852.0,Y=680.0 (should be at cap-height 682?) * Eng: X=643.0,Y=-1.0 (should be at baseline 0?) * uni01CB: X=980.0,Y=680.0 (should be at cap-height 682?) * uni1ED6: X=415.0,Y=980.0 (should be at ascender 982?) * Ohorn: X=749.5,Y=681.0 (should be at cap-height 682?) * uni1EDA: X=749.5,Y=681.0 (should be at cap-height 682?) * uni1EE2: X=749.5,Y=681.0 (should be at cap-height 682?) and 70 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * R: L<<458.0,318.0>--<422.0,318.0>>/B<<422.0,318.0>-<477.0,305.0>-<501.5,264.5>> = 13.298570330494275 * Racute: L<<458.0,318.0>--<422.0,318.0>>/B<<422.0,318.0>-<477.0,305.0>-<501.5,264.5>> = 13.298570330494275 * Rcaron: L<<458.0,318.0>--<422.0,318.0>>/B<<422.0,318.0>-<477.0,305.0>-<501.5,264.5>> = 13.298570330494275 * braceleft.case: B<<194.5,373.5>-<166.0,344.0>-<113.0,341.0>>/B<<113.0,341.0>-<166.0,338.0>-<194.5,308.5>> = 6.479400592204234 * braceleft: B<<213.0,326.5>-<182.0,290.0>-<121.0,287.0>>/B<<121.0,287.0>-<182.0,284.0>-<213.0,248.5>> = 5.631113368422407 * braceright.case: B<<202.5,308.5>-<231.0,338.0>-<283.0,341.0>>/B<<283.0,341.0>-<231.0,344.0>-<202.5,373.5>> = 6.603731348869935 * braceright: B<<219.0,248.5>-<250.0,284.0>-<311.0,287.0>>/B<<311.0,287.0>-<250.0,290.0>-<219.0,326.5>> = 5.631113368422407 * eth: B<<402.5,478.5>-<451.0,451.0>-<478.0,394.0>>/B<<478.0,394.0>-<464.0,455.0>-<438.5,504.5>> = 12.420176817240739 * nine.lf: B<<492.5,247.0>-<508.0,323.0>-<500.0,429.0>>/B<<500.0,429.0>-<491.0,351.0>-<437.0,302.5>> = 10.89797217504365 * nine: B<<492.5,247.0>-<508.0,323.0>-<500.0,429.0>>/B<<500.0,429.0>-<491.0,351.0>-<437.0,302.5>> = 10.89797217504365 and 7 more. [code: found-jaggy-segments]
--- 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.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * dotlessi.ss01: L<<120.0,109.0>--<122.0,469.0>> * i.loclTRK.ss01: L<<120.0,109.0>--<122.0,469.0>> * i.ss01: L<<120.0,109.0>--<122.0,469.0>> * iacute.ss01: L<<120.0,109.0>--<122.0,469.0>> * icircumflex.ss01: L<<120.0,109.0>--<122.0,469.0>> * idieresis.ss01: L<<120.0,109.0>--<122.0,469.0>> * igrave.ss01: L<<120.0,109.0>--<122.0,469.0>> * imacron.ss01: L<<120.0,109.0>--<122.0,469.0>> * l.ss01: L<<113.0,117.0>--<117.0,673.0>> * lacute.ss01: L<<113.0,117.0>--<117.0,673.0>> and 4 more. [code: found-semi-vertical]
--- Rationale --- A font's winAscent and winDescent values should be greater than the head table's yMax, abs(yMin) values. If they are less than these values, clipping can occur on Windows platforms (https://github.com/RedHatBrand/Overpass/issues/33). If the font includes tall/deep writing systems such as Arabic or Devanagari, the winAscent and winDescent can be greater than the yMax and abs(yMin) to accommodate vowel marks. When the win Metrics are significantly greater than the upm, the linespacing can appear too loose. To counteract this, enabling the OS/2 fsSelection bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 typo values instead. This means the font developer can control the linespacing with the typo values, whilst avoiding clipping by setting the win values to values greater than the yMax and abs(yMin).* π₯ **FAIL** OS/2.usWinAscent value should be equal or greater than 1137, but got 1136 instead [code: ascent]
--- 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 [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** This font lacks caret positioning values for these ligature glyphs: - f_b.liga - f_h.liga - f_k.liga - f_t.liga - t_t.liga [code: incomplete-caret-pos-data]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + b - b + f - f + h - h + f - f + i - i + f - f + k - k + f - f + l - l + b - h + i - i + k - k + l - l + t - t + t [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 16pt Medium' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni1EA8: X=488.0,Y=981.0 (should be at ascender 982?) * uni1EC2: X=450.0,Y=981.0 (should be at ascender 982?) * Eng: X=618.0,Y=-1.0 (should be at baseline 0?) * uni1ED4: X=504.0,Y=981.0 (should be at ascender 982?) * Q: X=551.0,Y=-2.0 (should be at baseline 0?) * R: X=33.0,Y=684.0 (should be at cap-height 682?) * R: X=477.0,Y=684.0 (should be at cap-height 682?) * Racute: X=33.0,Y=684.0 (should be at cap-height 682?) * Racute: X=477.0,Y=684.0 (should be at cap-height 682?) * Rcaron: X=33.0,Y=684.0 (should be at cap-height 682?) and 71 more. [code: found-misalignments]
--- Rationale --- This check looks for outline segments which seem particularly short (less than 0.006%% 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.* β **WARN** The following glyphs have segments which seem very short: * Aogonek contains a short segment B<<700.0,-135.0>-<712.0,-135.0>-<720.5,-132.0>> * Aogonek contains a short segment B<<720.5,-132.0>-<729.0,-129.0>-<739.0,-123.0>> * Ccedilla contains a short segment B<<420.5,-139.0>-<430.0,-131.0>-<430.0,-118.0>> * Ccedilla contains a short segment B<<430.0,-118.0>-<430.0,-105.0>-<421.0,-99.0>> * Ccedilla contains a short segment B<<421.0,-99.0>-<412.0,-93.0>-<398.0,-93.0>> * Ccedilla contains a short segment L<<410.0,-47.0>--<417.0,-47.0>> * Eogonek contains a short segment B<<582.0,-93.0>-<582.0,-113.0>-<594.5,-124.0>> * Eogonek contains a short segment B<<594.5,-124.0>-<607.0,-135.0>-<626.0,-135.0>> * Eogonek contains a short segment B<<626.0,-135.0>-<638.0,-135.0>-<646.5,-132.0>> * Eogonek contains a short segment B<<646.5,-132.0>-<655.0,-129.0>-<665.0,-123.0>> and 88 more. [code: found-short-segments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * R: L<<480.0,317.0>--<456.0,317.0>>/B<<456.0,317.0>-<513.0,306.0>-<537.0,266.5>> = 10.922804719869257 * Racute: L<<480.0,317.0>--<456.0,317.0>>/B<<456.0,317.0>-<513.0,306.0>-<537.0,266.5>> = 10.922804719869257 * Rcaron: L<<480.0,317.0>--<456.0,317.0>>/B<<456.0,317.0>-<513.0,306.0>-<537.0,266.5>> = 10.922804719869257 * braceleft.case: B<<230.0,375.0>-<201.0,344.0>-<140.0,341.0>>/B<<140.0,341.0>-<201.0,338.0>-<230.0,307.0>> = 5.631113368422407 * braceleft: B<<252.0,334.0>-<222.0,292.0>-<146.0,289.0>>/B<<146.0,289.0>-<222.0,286.0>-<252.0,244.5>> = 4.521003822282459 * braceright.case: B<<193.0,307.0>-<222.0,338.0>-<282.0,341.0>>/B<<282.0,341.0>-<222.0,344.0>-<193.0,375.0>> = 5.72481045222338 * braceright: B<<205.5,244.5>-<236.0,286.0>-<311.0,289.0>>/B<<311.0,289.0>-<236.0,292.0>-<205.5,334.0>> = 4.58122008527693 * eth: B<<385.5,479.0>-<431.0,454.0>-<455.0,398.0>>/B<<455.0,398.0>-<445.0,453.0>-<426.0,498.0>> = 12.89374404488216 * m: L<<231.0,518.0>--<231.0,405.0>>/B<<231.0,405.0>-<245.0,463.0>-<284.0,494.0>> = 13.570434385161475 * u: L<<462.0,0.0>--<462.0,126.0>>/B<<462.0,126.0>-<446.0,59.0>-<400.0,24.5>> = 13.431028870681681 and 27 more. [code: found-jaggy-segments]
--- Rationale --- A font's winAscent and winDescent values should be greater than the head table's yMax, abs(yMin) values. If they are less than these values, clipping can occur on Windows platforms (https://github.com/RedHatBrand/Overpass/issues/33). If the font includes tall/deep writing systems such as Arabic or Devanagari, the winAscent and winDescent can be greater than the yMax and abs(yMin) to accommodate vowel marks. When the win Metrics are significantly greater than the upm, the linespacing can appear too loose. To counteract this, enabling the OS/2 fsSelection bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 typo values instead. This means the font developer can control the linespacing with the typo values, whilst avoiding clipping by setting the win values to values greater than the yMax and abs(yMin).* π₯ **FAIL** OS/2.usWinAscent value should be equal or greater than 1137, but got 1136 instead [code: ascent]
--- 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 [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** This font lacks caret positioning values for these ligature glyphs: - f_b.liga - f_h.liga - f_k.liga - f_t.liga - t_t.liga [code: incomplete-caret-pos-data]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + b - b + f - f + h - h + f - f + i - i + f - f + k - k + f - f + l - l + b - h + i - i + k - k + l - l + t - t + t [code: lacks-kern-info]
--- 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.* β **WARN** The following glyphs have jaggy segments: * R: L<<469.0,318.0>--<439.0,318.0>>/B<<439.0,318.0>-<495.0,306.0>-<519.5,266.0>> = 12.094757077012089 * Racute: L<<469.0,318.0>--<439.0,318.0>>/B<<439.0,318.0>-<495.0,306.0>-<519.5,266.0>> = 12.094757077012089 * Rcaron: L<<469.0,318.0>--<439.0,318.0>>/B<<439.0,318.0>-<495.0,306.0>-<519.5,266.0>> = 12.094757077012089 * braceleft.case: B<<213.0,374.0>-<184.0,344.0>-<127.0,341.0>>/B<<127.0,341.0>-<184.0,338.0>-<213.0,308.0>> = 6.025575008366673 * braceleft: B<<232.5,330.0>-<202.0,291.0>-<134.0,288.0>>/B<<134.0,288.0>-<202.0,285.0>-<232.5,246.5>> = 5.052233823239003 * braceright.case: B<<197.5,308.0>-<226.0,338.0>-<283.0,341.0>>/B<<283.0,341.0>-<226.0,344.0>-<197.5,374.0>> = 6.025575008366673 * braceright: B<<212.5,246.5>-<243.0,285.0>-<311.0,288.0>>/B<<311.0,288.0>-<243.0,291.0>-<212.5,330.0>> = 5.052233823239003 * eth: B<<394.0,479.0>-<441.0,453.0>-<466.0,396.0>>/B<<466.0,396.0>-<454.0,453.0>-<432.0,500.5>> = 11.79342968491043 * uni0156: L<<469.0,318.0>--<439.0,318.0>>/B<<439.0,318.0>-<495.0,306.0>-<519.5,266.0>> = 12.094757077012089 * uni0210: L<<469.0,318.0>--<439.0,318.0>>/B<<439.0,318.0>-<495.0,306.0>-<519.5,266.0>> = 12.094757077012089 and 3 more. [code: found-jaggy-segments]
--- Rationale --- A font's winAscent and winDescent values should be greater than the head table's yMax, abs(yMin) values. If they are less than these values, clipping can occur on Windows platforms (https://github.com/RedHatBrand/Overpass/issues/33). If the font includes tall/deep writing systems such as Arabic or Devanagari, the winAscent and winDescent can be greater than the yMax and abs(yMin) to accommodate vowel marks. When the win Metrics are significantly greater than the upm, the linespacing can appear too loose. To counteract this, enabling the OS/2 fsSelection bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 typo values instead. This means the font developer can control the linespacing with the typo values, whilst avoiding clipping by setting the win values to values greater than the yMax and abs(yMin).* π₯ **FAIL** OS/2.usWinAscent value should be equal or greater than 1137, but got 1136 instead [code: ascent]
--- 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: two Contours detected: 2 Expected: 1 [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** This font lacks caret positioning values for these ligature glyphs: - f_b.liga - f_h.liga - f_k.liga - f_t.liga - t_t.liga [code: incomplete-caret-pos-data]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + b - b + f - f + h - h + f - f + i - i + f - f + k - k + f - f + l - l + b - h + i - i + k - k + l - l + t - t + t [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 16pt SemiBold' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- Rationale --- This check looks for outline segments which seem particularly short (less than 0.006%% 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.* β **WARN** The following glyphs have segments which seem very short: * AE contains a short segment L<<686.0,395.0>--<720.0,395.0>> * AEacute contains a short segment L<<686.0,395.0>--<720.0,395.0>> * Ccedilla contains a short segment B<<424.0,-116.0>-<424.0,-106.0>-<416.5,-101.0>> * Ccedilla contains a short segment B<<416.5,-101.0>-<409.0,-96.0>-<397.0,-96.0>> * Ccedilla contains a short segment L<<415.0,-43.0>--<420.0,-43.0>> * Eogonek contains a short segment B<<592.0,-90.0>-<592.0,-109.0>-<604.5,-118.5>> * Eogonek contains a short segment B<<604.5,-118.5>-<617.0,-128.0>-<636.0,-128.0>> * Eng contains a short segment B<<519.0,-139.0>-<523.0,-139.0>-<527.0,-139.0>> * Q contains a short segment B<<451.0,-15.0>-<443.0,-16.0>-<434.0,-16.0>> * Scedilla contains a short segment B<<426.0,-12.0>-<421.0,-12.0>-<416.0,-12.0>> and 86 more. [code: found-short-segments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * R: L<<489.0,317.0>--<471.0,317.0>>/B<<471.0,317.0>-<528.0,306.0>-<552.0,267.0>> = 10.922804719869257 * Racute: L<<489.0,317.0>--<471.0,317.0>>/B<<471.0,317.0>-<528.0,306.0>-<552.0,267.0>> = 10.922804719869257 * Rcaron: L<<489.0,317.0>--<471.0,317.0>>/B<<471.0,317.0>-<528.0,306.0>-<552.0,267.0>> = 10.922804719869257 * braceleft.case: B<<245.0,375.5>-<216.0,344.0>-<152.0,341.0>>/B<<152.0,341.0>-<216.0,338.0>-<245.0,306.5>> = 5.36755031893786 * braceleft: B<<268.0,337.0>-<238.0,293.0>-<157.0,290.0>>/B<<157.0,290.0>-<238.0,286.0>-<268.0,242.5>> = 4.948220974822635 * braceright.case: B<<188.5,306.5>-<218.0,338.0>-<282.0,341.0>>/B<<282.0,341.0>-<218.0,344.0>-<188.5,375.5>> = 5.36755031893786 * braceright: B<<200.0,242.5>-<230.0,286.0>-<311.0,290.0>>/B<<311.0,290.0>-<230.0,293.0>-<200.0,337.0>> = 4.948220974822635 * dollar: B<<465.5,246.5>-<436.0,256.0>-<402.0,261.0>>/L<<402.0,261.0>--<402.0,261.0>> = 8.365886124032546 * eng: L<<250.0,522.0>--<250.0,400.0>>/B<<250.0,400.0>-<265.0,463.0>-<308.5,497.0>> = 13.392497753751098 * eth: B<<378.5,479.5>-<422.0,455.0>-<446.0,400.0>>/B<<446.0,400.0>-<437.0,452.0>-<420.0,495.0>> = 13.755405563154715 and 38 more. [code: found-jaggy-segments]
--- Rationale --- A font's winAscent and winDescent values should be greater than the head table's yMax, abs(yMin) values. If they are less than these values, clipping can occur on Windows platforms (https://github.com/RedHatBrand/Overpass/issues/33). If the font includes tall/deep writing systems such as Arabic or Devanagari, the winAscent and winDescent can be greater than the yMax and abs(yMin) to accommodate vowel marks. When the win Metrics are significantly greater than the upm, the linespacing can appear too loose. To counteract this, enabling the OS/2 fsSelection bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 typo values instead. This means the font developer can control the linespacing with the typo values, whilst avoiding clipping by setting the win values to values greater than the yMax and abs(yMin).* π₯ **FAIL** OS/2.usWinAscent value should be equal or greater than 1137, but got 1136 instead [code: ascent]
--- 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: two Contours detected: 2 Expected: 1 [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** This font lacks caret positioning values for these ligature glyphs: - f_b.liga - f_h.liga - f_k.liga - f_t.liga - t_t.liga [code: incomplete-caret-pos-data]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + b - b + f - f + h - h + f - f + i - i + f - f + k - k + f - f + l - l + b - h + i - i + k - k + l - l + t - t + t [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 16pt Thin' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni1EB4: X=275.0,Y=984.0 (should be at ascender 982?) * uni1EB4: X=295.0,Y=981.0 (should be at ascender 982?) * uni1EAA: X=275.0,Y=984.0 (should be at ascender 982?) * uni1EAA: X=295.0,Y=981.0 (should be at ascender 982?) * uni1EC4: X=248.0,Y=984.0 (should be at ascender 982?) * uni1EC4: X=268.0,Y=981.0 (should be at ascender 982?) * Eng: X=660.0,Y=-2.0 (should be at baseline 0?) * uni1ED6: X=294.0,Y=984.0 (should be at ascender 982?) * uni1ED6: X=314.0,Y=981.0 (should be at ascender 982?) * Uogonek: X=509.0,Y=-1.0 (should be at baseline 0?) and 47 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * braceleft.case: B<<170.5,372.5>-<142.0,344.0>-<95.0,341.0>>/B<<95.0,341.0>-<142.0,338.0>-<170.5,310.0>> = 7.304445560612643 * braceleft: B<<186.0,321.5>-<155.0,289.0>-<104.0,286.0>>/B<<104.0,286.0>-<155.0,283.0>-<186.0,251.0>> = 6.732921326859609 * braceright.case: B<<209.0,310.0>-<237.0,338.0>-<284.0,341.0>>/B<<284.0,341.0>-<237.0,344.0>-<209.0,372.5>> = 7.304445560612643 * braceright: B<<228.0,251.0>-<259.0,283.0>-<310.0,286.0>>/B<<310.0,286.0>-<259.0,289.0>-<228.0,321.5>> = 6.732921326859609 * eogonek: B<<438.5,36.5>-<408.0,11.0>-<359.0,0.0>>/L<<359.0,0.0>--<359.0,0.0>> = 12.652556500557967 * eth: B<<414.5,478.5>-<466.0,450.0>-<493.0,391.0>>/B<<493.0,391.0>-<477.0,456.0>-<446.5,509.0>> = 10.761466193915874 * nine.dnom: B<<264.5,93.5>-<281.0,135.0>-<277.0,200.0>>/B<<277.0,200.0>-<273.0,168.0>-<244.0,143.5>> = 10.646469725824005 * nine.lf: B<<512.0,252.0>-<529.0,338.0>-<520.0,461.0>>/B<<520.0,461.0>-<515.0,369.0>-<456.0,312.5>> = 7.29575677860915 * nine.numr: B<<264.5,446.5>-<281.0,488.0>-<277.0,553.0>>/B<<277.0,553.0>-<273.0,521.0>-<244.0,496.5>> = 10.646469725824005 * nine: B<<512.0,252.0>-<529.0,338.0>-<520.0,461.0>>/B<<520.0,461.0>-<515.0,369.0>-<456.0,312.5>> = 7.29575677860915 and 9 more. [code: found-jaggy-segments]
--- 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.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * f_t.liga: L<<546.0,158.0>--<547.0,477.0>> * t: L<<156.0,158.0>--<157.0,477.0>> * t_t.liga: L<<156.0,155.0>--<157.0,477.0>> * t_t.liga: L<<571.0,158.0>--<572.0,477.0>> * tcaron: L<<156.0,158.0>--<157.0,477.0>> * uni0163: L<<156.0,158.0>--<157.0,477.0>> * uni021B: L<<156.0,158.0>--<157.0,477.0>> * uni1E6D: L<<156.0,158.0>--<157.0,477.0>> and uni1E6F: L<<156.0,158.0>--<157.0,477.0>> [code: found-semi-vertical]
π ERROR | π₯ FAIL | β WARN | π€ SKIP | βΉ INFO | π PASS | π DEBUG |
---|---|---|---|---|---|---|
0 | 7 | 44 | 680 | 43 | 585 | 0 |
0% | 1% | 3% | 50% | 3% | 43% | 0% |
Note: The following loglevels were omitted in this report:
Fontbakery version: 0.7.38
--- 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: two Contours detected: 2 Expected: 1 [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** This font lacks caret positioning values for these ligature glyphs: - f_b.liga - f_h.liga - f_k.liga - f_t.liga - t_t.liga [code: incomplete-caret-pos-data]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + b - b + f - f + h - h + f - f + i - i + f - f + k - k + f - f + l - l + b - h + i - i + k - k + l - l + t - t + t [code: lacks-kern-info]
--- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni1EB2: X=535.0,Y=981.5 (should be at ascender 982?) * uni1EA8: X=643.5,Y=981.0 (should be at ascender 982?) * uni1EA8: X=587.0,Y=984.0 (should be at ascender 982?) * uni1EC2: X=591.5,Y=981.0 (should be at ascender 982?) * uni1EC2: X=535.0,Y=984.0 (should be at ascender 982?) * uni1ED4: X=650.5,Y=981.0 (should be at ascender 982?) * uni1ED4: X=594.0,Y=984.0 (should be at ascender 982?) * uni1EA3: X=275.5,Y=681.5 (should be at cap-height 682?) * atilde: X=311.0,Y=680.0 (should be at cap-height 682?) * uni1EBB: X=262.5,Y=681.5 (should be at cap-height 682?) and 34 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * B: B<<632.5,407.0>-<589.0,368.0>-<517.0,357.0>>/B<<517.0,357.0>-<609.0,350.0>-<661.5,310.0>> = 13.03743253281051 * at: L<<535.0,166.0>--<535.0,168.0>>/B<<535.0,168.0>-<522.0,100.0>-<479.0,67.5>> = 10.823011226207075 * braceleft.case: B<<256.0,380.5>-<226.0,343.0>-<150.0,341.0>>/B<<150.0,341.0>-<226.0,339.0>-<256.0,301.5>> = 3.014871517549838 * braceleft: B<<236.5,297.5>-<198.0,275.0>-<127.0,273.0>>/B<<127.0,273.0>-<198.0,271.0>-<236.5,248.5>> = 3.2270778657622397 * braceright.case: B<<162.0,301.5>-<192.0,339.0>-<268.0,341.0>>/B<<268.0,341.0>-<192.0,343.0>-<162.0,380.5>> = 3.014871517549838 * braceright: B<<206.5,248.5>-<245.0,271.0>-<316.0,273.0>>/B<<316.0,273.0>-<245.0,275.0>-<206.5,297.5>> = 3.2270778657622397 * eng: L<<254.0,518.0>--<254.0,397.0>>/B<<254.0,397.0>-<263.0,458.0>-<299.0,492.5>> = 8.392925187392485 * eth: B<<332.0,488.5>-<369.0,470.0>-<388.0,424.0>>/B<<388.0,424.0>-<370.0,505.0>-<328.0,572.0>> = 9.913945656142763 * m: L<<248.0,518.0>--<248.0,390.0>>/B<<248.0,390.0>-<256.0,454.0>-<290.5,490.5>> = 7.125016348901757 * n: L<<254.0,518.0>--<254.0,397.0>>/B<<254.0,397.0>-<263.0,458.0>-<299.0,492.5>> = 8.392925187392485 and 33 more. [code: found-jaggy-segments]
--- 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: two Contours detected: 2 Expected: 1 [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** This font lacks caret positioning values for these ligature glyphs: - f_b.liga - f_h.liga - f_k.liga - f_t.liga - t_t.liga [code: incomplete-caret-pos-data]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + b - b + f - f + h - h + f - f + i - i + f - f + k - k + f - f + l - l + b - h + i - i + k - k + l - l + t - t + t [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 144pt ExtraLight' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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.* β **WARN** The following glyphs have colinear vectors: * ampersand: L<<261.0,382.0>--<262.0,381.0>> -> L<<262.0,381.0>--<498.0,116.0>> [code: found-colinear-vectors]
--- 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.* β **WARN** The following glyphs have jaggy segments: * B: B<<565.5,400.0>-<526.0,360.0>-<455.0,350.0>>/B<<455.0,350.0>-<538.0,343.0>-<585.5,300.5>> = 12.83785915174798 * R: L<<426.0,330.0>--<375.0,330.0>>/B<<375.0,330.0>-<430.0,317.0>-<456.0,276.5>> = 13.298570330494275 * Racute: L<<426.0,330.0>--<375.0,330.0>>/B<<375.0,330.0>-<430.0,317.0>-<456.0,276.5>> = 13.298570330494275 * Rcaron: L<<426.0,330.0>--<375.0,330.0>>/B<<375.0,330.0>-<430.0,317.0>-<456.0,276.5>> = 13.298570330494275 * a: L<<396.0,86.0>--<396.0,144.0>>/B<<396.0,144.0>-<377.0,64.0>-<326.5,28.0>> = 13.360218444764461 * aacute: L<<396.0,86.0>--<396.0,144.0>>/B<<396.0,144.0>-<377.0,64.0>-<326.5,28.0>> = 13.360218444764461 * abreve: L<<396.0,86.0>--<396.0,144.0>>/B<<396.0,144.0>-<377.0,64.0>-<326.5,28.0>> = 13.360218444764461 * acircumflex: L<<396.0,86.0>--<396.0,144.0>>/B<<396.0,144.0>-<377.0,64.0>-<326.5,28.0>> = 13.360218444764461 * adieresis: L<<396.0,86.0>--<396.0,144.0>>/B<<396.0,144.0>-<377.0,64.0>-<326.5,28.0>> = 13.360218444764461 * agrave: L<<396.0,86.0>--<396.0,144.0>>/B<<396.0,144.0>-<377.0,64.0>-<326.5,28.0>> = 13.360218444764461 and 88 more. [code: found-jaggy-segments]
--- 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.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * dotlessi.ss01: L<<110.0,97.0>--<112.0,470.0>> * f_t.liga: L<<490.0,138.0>--<492.0,468.0>> * i.loclTRK.ss01: L<<110.0,97.0>--<112.0,470.0>> * i.ss01: L<<110.0,97.0>--<112.0,470.0>> * iacute.ss01: L<<110.0,97.0>--<112.0,470.0>> * icircumflex.ss01: L<<110.0,97.0>--<112.0,470.0>> * idieresis.ss01: L<<110.0,97.0>--<112.0,470.0>> * igrave.ss01: L<<110.0,97.0>--<112.0,470.0>> * imacron.ss01: L<<110.0,97.0>--<112.0,470.0>> * l.ss01: L<<99.0,101.0>--<101.0,657.0>> and 15 more. [code: found-semi-vertical]
--- 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 [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** This font lacks caret positioning values for these ligature glyphs: - f_b.liga - f_h.liga - f_k.liga - f_t.liga - t_t.liga [code: incomplete-caret-pos-data]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + b - b + f - f + h - h + f - f + i - i + f - f + k - k + f - f + l - l + b - h + i - i + k - k + l - l + t - t + t [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 144pt Light' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni1EB4: X=384.0,Y=981.0 (should be at ascender 982?) * uni1EAA: X=383.0,Y=981.0 (should be at ascender 982?) * uni1EC4: X=346.0,Y=981.0 (should be at ascender 982?) * Eng: X=614.0,Y=-1.0 (should be at baseline 0?) * uni1ED6: X=388.0,Y=981.0 (should be at ascender 982?) * uni1EA3: X=177.0,Y=683.0 (should be at cap-height 682?) * atilde: X=206.0,Y=683.0 (should be at cap-height 682?) * uni1EC3: X=445.0,Y=680.0 (should be at cap-height 682?) * uni1EBB: X=247.0,Y=681.0 (should be at cap-height 682?) * eogonek: X=349.0,Y=1.0 (should be at baseline 0?) and 75 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * B: B<<575.5,401.0>-<535.0,361.0>-<464.0,351.0>>/B<<464.0,351.0>-<549.0,344.0>-<597.0,302.0>> = 12.724945318027565 * R: L<<432.0,329.0>--<382.0,329.0>>/B<<382.0,329.0>-<440.0,318.0>-<467.5,278.0>> = 10.738897100905428 * Racute: L<<432.0,329.0>--<382.0,329.0>>/B<<382.0,329.0>-<440.0,318.0>-<467.5,278.0>> = 10.738897100905428 * Rcaron: L<<432.0,329.0>--<382.0,329.0>>/B<<382.0,329.0>-<440.0,318.0>-<467.5,278.0>> = 10.738897100905428 * a: L<<390.0,95.0>--<390.0,139.0>>/B<<390.0,139.0>-<372.0,61.0>-<322.5,26.5>> = 12.994616791916512 * aacute: L<<390.0,95.0>--<390.0,139.0>>/B<<390.0,139.0>-<372.0,61.0>-<322.5,26.5>> = 12.994616791916512 * abreve: L<<390.0,95.0>--<390.0,139.0>>/B<<390.0,139.0>-<372.0,61.0>-<322.5,26.5>> = 12.994616791916512 * acircumflex: L<<390.0,95.0>--<390.0,139.0>>/B<<390.0,139.0>-<372.0,61.0>-<322.5,26.5>> = 12.994616791916512 * adieresis: L<<390.0,95.0>--<390.0,139.0>>/B<<390.0,139.0>-<372.0,61.0>-<322.5,26.5>> = 12.994616791916512 * agrave: L<<390.0,95.0>--<390.0,139.0>>/B<<390.0,139.0>-<372.0,61.0>-<322.5,26.5>> = 12.994616791916512 and 86 more. [code: found-jaggy-segments]
--- 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.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * dotlessi.ss01: L<<108.0,105.0>--<111.0,464.0>> * i.loclTRK.ss01: L<<108.0,105.0>--<111.0,464.0>> * i.ss01: L<<108.0,105.0>--<111.0,464.0>> * iacute.ss01: L<<108.0,105.0>--<111.0,464.0>> * icircumflex.ss01: L<<108.0,105.0>--<111.0,464.0>> * idieresis.ss01: L<<108.0,105.0>--<111.0,464.0>> * igrave.ss01: L<<108.0,105.0>--<111.0,464.0>> * imacron.ss01: L<<108.0,105.0>--<111.0,464.0>> * l.ss01: L<<96.0,112.0>--<99.0,648.0>> * lacute.ss01: L<<96.0,112.0>--<99.0,648.0>> and 4 more. [code: found-semi-vertical]
--- 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: c Contours detected: 2 Expected: 1 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: cacute Contours detected: 3 Expected: 2 Glyph name: ccircumflex Contours detected: 3 Expected: 2 Glyph name: cdotaccent Contours detected: 3 Expected: 2 Glyph name: ccaron Contours detected: 3 Expected: 2 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: c Contours detected: 2 Expected: 1 Glyph name: cacute Contours detected: 3 Expected: 2 Glyph name: ccaron Contours detected: 3 Expected: 2 Glyph name: ccircumflex Contours detected: 3 Expected: 2 Glyph name: cdotaccent Contours detected: 3 Expected: 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 [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** This font lacks caret positioning values for these ligature glyphs: - f_b.liga - f_h.liga - f_k.liga - f_t.liga - t_t.liga [code: incomplete-caret-pos-data]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + b - b + f - f + h - h + f - f + i - i + f - f + k - k + f - f + l - l + b - h + i - i + k - k + l - l + t - t + t [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 144pt Medium' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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.* β **WARN** The following glyphs have jaggy segments: * B: B<<605.5,404.0>-<563.0,364.0>-<491.0,354.0>>/B<<491.0,354.0>-<580.0,347.0>-<631.0,306.0>> = 12.404314317626188 * R: L<<452.0,328.0>--<398.0,328.0>>/B<<398.0,328.0>-<466.0,321.0>-<499.0,282.0>> = 5.8773926066431 * Racute: L<<452.0,328.0>--<398.0,328.0>>/B<<398.0,328.0>-<466.0,321.0>-<499.0,282.0>> = 5.8773926066431 * Rcaron: L<<452.0,328.0>--<398.0,328.0>>/B<<398.0,328.0>-<466.0,321.0>-<499.0,282.0>> = 5.8773926066431 * a: L<<374.0,122.0>--<374.0,123.0>>/B<<374.0,123.0>-<357.0,54.0>-<311.0,22.0>> = 13.840695491655588 * aacute: L<<374.0,122.0>--<374.0,123.0>>/B<<374.0,123.0>-<357.0,54.0>-<311.0,22.0>> = 13.840695491655588 * abreve: L<<374.0,122.0>--<374.0,123.0>>/B<<374.0,123.0>-<357.0,54.0>-<311.0,22.0>> = 13.840695491655588 * acircumflex: L<<374.0,122.0>--<374.0,123.0>>/B<<374.0,123.0>-<357.0,54.0>-<311.0,22.0>> = 13.840695491655588 * adieresis: L<<374.0,122.0>--<374.0,123.0>>/B<<374.0,123.0>-<357.0,54.0>-<311.0,22.0>> = 13.840695491655588 * agrave: L<<374.0,122.0>--<374.0,123.0>>/B<<374.0,123.0>-<357.0,54.0>-<311.0,22.0>> = 13.840695491655588 and 78 more. [code: found-jaggy-segments]
--- 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: c Contours detected: 2 Expected: 1 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: cacute Contours detected: 3 Expected: 2 Glyph name: ccircumflex Contours detected: 3 Expected: 2 Glyph name: cdotaccent Contours detected: 3 Expected: 2 Glyph name: ccaron Contours detected: 3 Expected: 2 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: c Contours detected: 2 Expected: 1 Glyph name: cacute Contours detected: 3 Expected: 2 Glyph name: ccaron Contours detected: 3 Expected: 2 Glyph name: ccircumflex Contours detected: 3 Expected: 2 Glyph name: cdotaccent Contours detected: 3 Expected: 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 [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** This font lacks caret positioning values for these ligature glyphs: - f_b.liga - f_h.liga - f_k.liga - f_t.liga - t_t.liga [code: incomplete-caret-pos-data]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + b - b + f - f + h - h + f - f + i - i + f - f + k - k + f - f + l - l + b - h + i - i + k - k + l - l + t - t + t [code: lacks-kern-info]
--- 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.* β **WARN** The following glyphs have jaggy segments: * B: B<<590.5,402.5>-<549.0,363.0>-<477.0,353.0>>/B<<477.0,353.0>-<564.0,346.0>-<614.0,304.5>> = 12.507258369221715 * R: L<<442.0,329.0>--<389.0,329.0>>/B<<389.0,329.0>-<453.0,320.0>-<483.5,280.5>> = 8.004728857292836 * Racute: L<<442.0,329.0>--<389.0,329.0>>/B<<389.0,329.0>-<453.0,320.0>-<483.5,280.5>> = 8.004728857292836 * Rcaron: L<<442.0,329.0>--<389.0,329.0>>/B<<389.0,329.0>-<453.0,320.0>-<483.5,280.5>> = 8.004728857292836 * a: L<<382.0,109.0>--<382.0,131.0>>/B<<382.0,131.0>-<365.0,58.0>-<317.0,24.5>> = 13.109208198154267 * aacute: L<<382.0,109.0>--<382.0,131.0>>/B<<382.0,131.0>-<365.0,58.0>-<317.0,24.5>> = 13.109208198154267 * abreve: L<<382.0,109.0>--<382.0,131.0>>/B<<382.0,131.0>-<365.0,58.0>-<317.0,24.5>> = 13.109208198154267 * acircumflex: L<<382.0,109.0>--<382.0,131.0>>/B<<382.0,131.0>-<365.0,58.0>-<317.0,24.5>> = 13.109208198154267 * adieresis: L<<382.0,109.0>--<382.0,131.0>>/B<<382.0,131.0>-<365.0,58.0>-<317.0,24.5>> = 13.109208198154267 * agrave: L<<382.0,109.0>--<382.0,131.0>>/B<<382.0,131.0>-<365.0,58.0>-<317.0,24.5>> = 13.109208198154267 and 81 more. [code: found-jaggy-segments]
--- 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: c Contours detected: 2 Expected: 1 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: cacute Contours detected: 3 Expected: 2 Glyph name: ccircumflex Contours detected: 3 Expected: 2 Glyph name: cdotaccent Contours detected: 3 Expected: 2 Glyph name: ccaron Contours detected: 3 Expected: 2 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: c Contours detected: 2 Expected: 1 Glyph name: cacute Contours detected: 3 Expected: 2 Glyph name: ccaron Contours detected: 3 Expected: 2 Glyph name: ccircumflex Contours detected: 3 Expected: 2 Glyph name: cdotaccent Contours detected: 3 Expected: 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: two Contours detected: 2 Expected: 1 [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** This font lacks caret positioning values for these ligature glyphs: - f_b.liga - f_h.liga - f_k.liga - f_t.liga - t_t.liga [code: incomplete-caret-pos-data]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + b - b + f - f + h - h + f - f + i - i + f - f + k - k + f - f + l - l + b - h + i - i + k - k + l - l + t - t + t [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 144pt SemiBold' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni1EA8: X=628.5,Y=984.0 (should be at ascender 982?) * uni1EC2: X=580.0,Y=984.0 (should be at ascender 982?) * uni1ED4: X=635.0,Y=984.0 (should be at ascender 982?) * Q: X=534.0,Y=1.0 (should be at baseline 0?) * W: X=292.0,Y=-1.0 (should be at baseline 0?) * W: X=792.0,Y=-1.0 (should be at baseline 0?) * W: X=670.0,Y=-1.0 (should be at baseline 0?) * W: X=412.0,Y=-1.0 (should be at baseline 0?) * Wacute: X=292.0,Y=-1.0 (should be at baseline 0?) * Wacute: X=792.0,Y=-1.0 (should be at baseline 0?) and 70 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * B: B<<618.0,405.5>-<575.0,366.0>-<503.0,356.0>>/B<<503.0,356.0>-<593.0,348.0>-<645.0,308.0>> = 12.98677056297302 * R: L<<460.0,328.0>--<402.0,328.0>>/B<<402.0,328.0>-<476.0,322.0>-<512.0,284.0>> = 4.635463426902618 * Racute: L<<460.0,328.0>--<402.0,328.0>>/B<<402.0,328.0>-<476.0,322.0>-<512.0,284.0>> = 4.635463426902618 * Rcaron: L<<460.0,328.0>--<402.0,328.0>>/B<<402.0,328.0>-<476.0,322.0>-<512.0,284.0>> = 4.635463426902618 * at: L<<542.0,162.0>--<542.0,170.0>>/B<<542.0,170.0>-<528.0,101.0>-<483.5,68.5>> = 11.469530332866904 * braceleft.case: B<<237.5,379.0>-<208.0,344.0>-<138.0,341.0>>/B<<138.0,341.0>-<208.0,338.0>-<237.5,302.5>> = 4.908063349054138 * braceleft: B<<251.5,321.0>-<216.0,276.0>-<119.0,273.0>>/B<<119.0,273.0>-<216.0,270.0>-<251.5,225.0>> = 3.542939480068082 * braceright.case: B<<172.5,302.5>-<202.0,338.0>-<272.0,341.0>>/B<<272.0,341.0>-<202.0,344.0>-<172.5,379.0>> = 4.908063349054138 * braceright: B<<181.5,225.0>-<217.0,270.0>-<314.0,273.0>>/B<<314.0,273.0>-<217.0,276.0>-<181.5,321.0>> = 3.542939480068082 * c: B<<450.0,380.0>-<447.0,389.0>-<443.0,397.0>>/L<<443.0,397.0>--<450.0,380.0>> = 4.184916125118319 and 53 more. [code: found-jaggy-segments]
--- 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: two Contours detected: 2 Expected: 1 [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** This font lacks caret positioning values for these ligature glyphs: - f_b.liga - f_h.liga - f_k.liga - f_t.liga - t_t.liga [code: incomplete-caret-pos-data]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + b - b + f - f + h - h + f - f + i - i + f - f + k - k + f - f + l - l + b - h + i - i + k - k + l - l + t - t + t [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 144pt Thin' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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.* β **WARN** The following glyphs have colinear vectors: * Ccedilla: L<<350.0,5.0>--<350.0,5.0>> -> L<<350.0,5.0>--<370.0,5.0>> [code: found-colinear-vectors]
--- 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.* β **WARN** The following glyphs have jaggy segments: * B: B<<555.0,399.5>-<516.0,359.0>-<446.0,349.0>>/B<<446.0,349.0>-<528.0,342.0>-<574.0,299.0>> = 13.009376137162674 * C: B<<544.0,641.0>-<613.0,588.0>-<635.0,500.0>>/L<<635.0,500.0>--<635.0,682.0>> = 14.036243467926484 * Cacute: B<<544.0,641.0>-<613.0,588.0>-<635.0,500.0>>/L<<635.0,500.0>--<635.0,682.0>> = 14.036243467926484 * Ccaron: B<<544.0,641.0>-<613.0,588.0>-<635.0,500.0>>/L<<635.0,500.0>--<635.0,682.0>> = 14.036243467926484 * Ccedilla: B<<544.0,641.0>-<613.0,588.0>-<635.0,500.0>>/L<<635.0,500.0>--<635.0,682.0>> = 14.036243467926484 * Ccircumflex: B<<544.0,641.0>-<613.0,588.0>-<635.0,500.0>>/L<<635.0,500.0>--<635.0,682.0>> = 14.036243467926484 * Cdotaccent: B<<544.0,641.0>-<613.0,588.0>-<635.0,500.0>>/L<<635.0,500.0>--<635.0,682.0>> = 14.036243467926484 * Euro: B<<632.0,641.0>-<701.0,588.0>-<723.0,500.0>>/L<<723.0,500.0>--<723.0,682.0>> = 14.036243467926484 * G: L<<640.0,0.0>--<640.0,190.0>>/B<<640.0,190.0>-<617.0,99.0>-<551.5,43.0>> = 14.184294248270799 * Gbreve: L<<640.0,0.0>--<640.0,190.0>>/B<<640.0,190.0>-<617.0,99.0>-<551.5,43.0>> = 14.184294248270799 and 115 more. [code: found-jaggy-segments]
π ERROR | π₯ FAIL | β WARN | π€ SKIP | βΉ INFO | π PASS | π DEBUG |
---|---|---|---|---|---|---|
0 | 0 | 40 | 680 | 43 | 596 | 0 |
0% | 0% | 3% | 50% | 3% | 44% | 0% |
Note: The following loglevels were omitted in this report:
New report for current files (26 July):
Fontbakery version: 0.8.0
--- 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* β **WARN** Could not find ftxvalidator. [code: ftxvalidator-available]
--- 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + b - b + f - f + h - h + f - f + i - i + f - f + k - k + f - f + l - l + b - h + i - i + k - k + l - l + t - t + t [code: lacks-kern-info]
--- 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 --- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni1EA8: X=508.0,Y=984.0 (should be at ascender 982?) * uni1EC2: X=468.0,Y=984.0 (should be at ascender 982?) * Eng: X=605.0,Y=-2.0 (should be at baseline 0?) * uni1ED4: X=525.0,Y=984.0 (should be at ascender 982?) * uni1E9E: X=554.5,Y=680.0 (should be at cap-height 682?) * uni1EB3: X=330.0,Y=981.0 (should be at ascender 982?) * uni1EA3: X=326.0,Y=680.0 (should be at cap-height 682?) * eth: X=278.0,Y=684.0 (should be at cap-height 682?) * uni1EBB: X=309.0,Y=680.0 (should be at cap-height 682?) * uni1EC9: X=193.0,Y=680.0 (should be at cap-height 682?) and 35 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * R: L<<506.0,316.0>--<490.0,316.0>>/B<<490.0,316.0>-<546.0,306.0>-<569.5,267.5>> = 10.124671655397806 * Racute: L<<506.0,316.0>--<490.0,316.0>>/B<<490.0,316.0>-<546.0,306.0>-<569.5,267.5>> = 10.124671655397806 * Rcaron: L<<506.0,316.0>--<490.0,316.0>>/B<<490.0,316.0>-<546.0,306.0>-<569.5,267.5>> = 10.124671655397806 * braceleft.case: B<<263.5,375.0>-<221.0,342.0>-<135.0,341.0>>/B<<135.0,341.0>-<221.0,340.0>-<263.5,307.0>> = 1.3323999403663624 * braceleft: B<<252.0,314.5>-<216.0,293.0>-<149.0,291.0>>/B<<149.0,291.0>-<216.0,289.0>-<252.0,267.5>> = 3.419628088282934 * braceright.case: B<<197.0,307.0>-<239.0,340.0>-<325.0,341.0>>/B<<325.0,341.0>-<239.0,342.0>-<197.0,375.0>> = 1.3323999403663624 * braceright: B<<228.5,267.5>-<265.0,289.0>-<331.0,291.0>>/B<<331.0,291.0>-<265.0,293.0>-<228.5,314.5>> = 3.4714091778567253 * eng: L<<268.0,528.0>--<268.0,410.0>>/B<<268.0,410.0>-<281.0,469.0>-<322.5,502.5>> = 12.425942865427485 * eth: B<<368.0,480.0>-<410.0,457.0>-<433.0,402.0>>/B<<433.0,402.0>-<425.0,454.0>-<409.0,497.5>> = 13.94763268253713 * lira: B<<365.5,193.5>-<345.0,161.0>-<291.0,150.0>>/L<<291.0,150.0>--<699.0,150.0>> = 11.513831184487014 and 41 more. [code: found-jaggy-segments]
--- 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: ellipsis Contours detected: 2 Expected: 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ellipsis Contours detected: 2 Expected: 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + b - b + f - f + h - h + f - f + i - i + f - f + k - k + f - f + l - l + b - h + i - i + k - k + l - l + t - t + t [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 16pt ExtraLight' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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 --- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni1EB4: X=508.5,Y=981.0 (should be at ascender 982?) * uni1EAA: X=508.5,Y=981.0 (should be at ascender 982?) * uni1EC4: X=481.5,Y=981.0 (should be at ascender 982?) * Eng: X=652.0,Y=-1.0 (should be at baseline 0?) * uni1ED6: X=527.5,Y=981.0 (should be at ascender 982?) * Q: X=530.0,Y=-1.0 (should be at baseline 0?) * uni1EA3: X=209.5,Y=681.0 (should be at cap-height 682?) * atilde: X=267.5,Y=681.5 (should be at cap-height 682?) * b: X=115.0,Y=681.0 (should be at cap-height 682?) * b: X=31.0,Y=681.0 (should be at cap-height 682?) and 80 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have colinear vectors: * uhorn: L<<384.0,504.0>--<508.0,504.0>> -> L<<508.0,504.0>--<508.0,504.0>> * uni1EE9: L<<384.0,504.0>--<508.0,504.0>> -> L<<508.0,504.0>--<508.0,504.0>> * uni1EEB: L<<384.0,504.0>--<508.0,504.0>> -> L<<508.0,504.0>--<508.0,504.0>> * uni1EED: L<<384.0,504.0>--<508.0,504.0>> -> L<<508.0,504.0>--<508.0,504.0>> * uni1EEF: L<<384.0,504.0>--<508.0,504.0>> -> L<<508.0,504.0>--<508.0,504.0>> and uni1EF1: L<<384.0,504.0>--<508.0,504.0>> -> L<<508.0,504.0>--<508.0,504.0>> [code: found-colinear-vectors]
--- 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.* β **WARN** The following glyphs have jaggy segments: * braceleft.case: B<<182.5,373.0>-<153.0,344.0>-<100.0,341.0>>/B<<100.0,341.0>-<153.0,338.0>-<182.5,309.0>> = 6.479400592204234 * braceleft: B<<199.0,324.0>-<168.0,290.0>-<110.0,287.0>>/B<<110.0,287.0>-<168.0,284.0>-<199.0,249.5>> = 5.921872268327562 * braceright.case: B<<207.5,309.0>-<237.0,338.0>-<289.0,341.0>>/B<<289.0,341.0>-<237.0,344.0>-<207.5,373.0>> = 6.603731348869935 * braceright: B<<223.5,249.5>-<255.0,284.0>-<313.0,287.0>>/B<<313.0,287.0>-<255.0,290.0>-<223.5,324.0>> = 5.921872268327562 * eth: B<<408.0,478.5>-<458.0,451.0>-<485.0,393.0>>/B<<485.0,393.0>-<470.0,456.0>-<442.0,507.0>> = 11.570292077055889 * nine.dnom: B<<249.5,60.5>-<285.0,103.0>-<281.0,194.0>>/B<<281.0,194.0>-<275.0,164.0>-<246.5,142.5>> = 13.826808130959718 * nine.lf: B<<512.0,197.5>-<542.0,288.0>-<532.0,437.0>>/B<<532.0,437.0>-<524.0,355.0>-<466.5,304.0>> = 9.41179414191719 * nine.numr: B<<249.5,408.5>-<285.0,451.0>-<281.0,542.0>>/B<<281.0,542.0>-<275.0,512.0>-<246.5,490.5>> = 13.826808130959718 * nine: B<<512.0,197.5>-<542.0,288.0>-<532.0,437.0>>/B<<532.0,437.0>-<524.0,355.0>-<466.5,304.0>> = 9.41179414191719 * six.dnom: B<<111.0,272.5>-<75.0,230.0>-<80.0,139.0>>/B<<80.0,139.0>-<85.0,169.0>-<114.0,190.5>> = 12.607279672723635 and 7 more. [code: found-jaggy-segments]
--- 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.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * tbar: L<<178.0,163.0>--<179.0,300.0>> and tbar: L<<180.0,330.0>--<181.0,470.0>> [code: found-semi-vertical]
--- 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: ellipsis Contours detected: 2 Expected: 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ellipsis Contours detected: 2 Expected: 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + b - b + f - f + h - h + f - f + i - i + f - f + k - k + f - f + l - l + b - h + i - i + k - k + l - l + t - t + t [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 16pt Light' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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 --- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni1EA8: X=463.0,Y=984.0 (should be at ascender 982?) * uni1EC2: X=434.0,Y=984.0 (should be at ascender 982?) * Eng: X=645.0,Y=-1.0 (should be at baseline 0?) * uni1ED4: X=482.0,Y=984.0 (should be at ascender 982?) * Ohorn: X=749.5,Y=680.5 (should be at cap-height 682?) * uni1EDA: X=749.5,Y=680.5 (should be at cap-height 682?) * uni1EE2: X=749.5,Y=680.5 (should be at cap-height 682?) * uni1EDC: X=749.5,Y=680.5 (should be at cap-height 682?) * uni1EDE: X=749.5,Y=680.5 (should be at cap-height 682?) * uni1EE0: X=749.5,Y=680.5 (should be at cap-height 682?) and 54 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * R: L<<459.0,318.0>--<423.0,318.0>>/B<<423.0,318.0>-<477.0,305.0>-<501.5,264.5>> = 13.535856369134248 * Racute: L<<459.0,318.0>--<423.0,318.0>>/B<<423.0,318.0>-<477.0,305.0>-<501.5,264.5>> = 13.535856369134248 * Rcaron: L<<459.0,318.0>--<423.0,318.0>>/B<<423.0,318.0>-<477.0,305.0>-<501.5,264.5>> = 13.535856369134248 * braceleft.case: B<<195.5,373.5>-<164.0,344.0>-<106.0,341.0>>/B<<106.0,341.0>-<164.0,338.0>-<195.5,308.5>> = 5.921872268327562 * braceleft: B<<212.0,326.5>-<180.0,290.0>-<116.0,287.0>>/B<<116.0,287.0>-<180.0,284.0>-<212.0,248.0>> = 5.36755031893786 * braceright.case: B<<205.5,308.5>-<237.0,338.0>-<295.0,341.0>>/B<<295.0,341.0>-<237.0,344.0>-<205.5,373.5>> = 5.921872268327562 * braceright: B<<220.0,248.0>-<252.0,284.0>-<316.0,287.0>>/B<<316.0,287.0>-<252.0,290.0>-<220.0,326.5>> = 5.36755031893786 * eth: B<<402.0,478.5>-<451.0,451.0>-<477.0,394.0>>/B<<477.0,394.0>-<463.0,455.0>-<437.5,505.5>> = 11.593643563484813 * nine.lf: B<<504.0,200.5>-<531.0,286.0>-<523.0,421.0>>/B<<523.0,421.0>-<513.0,346.0>-<457.0,299.0>> = 10.985982788387767 * nine: B<<504.0,200.5>-<531.0,286.0>-<523.0,421.0>>/B<<523.0,421.0>-<513.0,346.0>-<457.0,299.0>> = 10.985982788387767 and 7 more. [code: found-jaggy-segments]
--- 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.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * tbar: L<<175.0,167.0>--<176.0,296.0>> and tbar: L<<177.0,333.0>--<178.0,463.0>> [code: found-semi-vertical]
--- 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: ellipsis Contours detected: 2 Expected: 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ellipsis Contours detected: 2 Expected: 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + b - b + f - f + h - h + f - f + i - i + f - f + k - k + f - f + l - l + b - h + i - i + k - k + l - l + t - t + t [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 16pt Medium' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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 --- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni1EB4: X=389.0,Y=984.0 (should be at ascender 982?) * uni1EA8: X=487.0,Y=984.0 (should be at ascender 982?) * uni1EAA: X=389.0,Y=984.0 (should be at ascender 982?) * uni1EC2: X=452.0,Y=984.0 (should be at ascender 982?) * uni1EC4: X=355.0,Y=984.0 (should be at ascender 982?) * Eng: X=624.0,Y=-2.0 (should be at baseline 0?) * uni1ED4: X=504.0,Y=984.0 (should be at ascender 982?) * uni1ED6: X=407.0,Y=984.0 (should be at ascender 982?) * R: X=34.0,Y=684.0 (should be at cap-height 682?) * R: X=481.0,Y=684.0 (should be at cap-height 682?) and 62 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * R: L<<484.0,317.0>--<458.0,317.0>>/B<<458.0,317.0>-<513.0,306.0>-<537.0,266.0>> = 11.309932474020195 * Racute: L<<484.0,317.0>--<458.0,317.0>>/B<<458.0,317.0>-<513.0,306.0>-<537.0,266.0>> = 11.309932474020195 * Rcaron: L<<484.0,317.0>--<458.0,317.0>>/B<<458.0,317.0>-<513.0,306.0>-<537.0,266.0>> = 11.309932474020195 * braceleft.case: B<<231.0,374.5>-<194.0,343.0>-<121.0,341.0>>/B<<121.0,341.0>-<194.0,339.0>-<231.0,307.5>> = 3.138709609497799 * braceleft: B<<249.0,334.0>-<216.0,292.0>-<133.0,289.0>>/B<<133.0,289.0>-<216.0,286.0>-<249.0,244.5>> = 4.14006130608207 * braceright.case: B<<201.0,307.5>-<238.0,339.0>-<311.0,341.0>>/B<<311.0,341.0>-<238.0,343.0>-<201.0,374.5>> = 3.138709609497799 * braceright: B<<208.0,244.5>-<241.0,286.0>-<324.0,289.0>>/B<<324.0,289.0>-<241.0,292.0>-<208.0,334.0>> = 4.14006130608207 * eth: B<<384.0,479.0>-<429.0,454.0>-<454.0,398.0>>/B<<454.0,398.0>-<443.0,455.0>-<423.0,501.5>> = 13.134544730142482 * m: L<<231.0,518.0>--<231.0,406.0>>/B<<231.0,406.0>-<245.0,464.0>-<284.0,494.5>> = 13.570434385161475 * u: L<<461.0,0.0>--<461.0,124.0>>/B<<461.0,124.0>-<445.0,58.0>-<399.5,24.0>> = 13.62699485989153 and 28 more. [code: found-jaggy-segments]
--- 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: ellipsis Contours detected: 2 Expected: 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ellipsis Contours detected: 2 Expected: 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + b - b + f - f + h - h + f - f + i - i + f - f + k - k + f - f + l - l + b - h + i - i + k - k + l - l + t - t + t [code: lacks-kern-info]
--- 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 --- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni1EB4: X=400.0,Y=984.0 (should be at ascender 982?) * uni1EA8: X=475.0,Y=984.0 (should be at ascender 982?) * uni1EAA: X=400.0,Y=984.0 (should be at ascender 982?) * uni1EC2: X=443.0,Y=984.0 (should be at ascender 982?) * uni1EC4: X=368.0,Y=984.0 (should be at ascender 982?) * Eng: X=634.0,Y=-2.0 (should be at baseline 0?) * uni1ED4: X=493.0,Y=984.0 (should be at ascender 982?) * uni1ED6: X=418.0,Y=984.0 (should be at ascender 982?) * Q: X=541.0,Y=-2.0 (should be at baseline 0?) * R: X=33.0,Y=683.0 (should be at cap-height 682?) and 78 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * R: L<<472.0,318.0>--<440.0,318.0>>/B<<440.0,318.0>-<495.0,306.0>-<519.5,265.5>> = 12.308015817427924 * Racute: L<<472.0,318.0>--<440.0,318.0>>/B<<440.0,318.0>-<495.0,306.0>-<519.5,265.5>> = 12.308015817427924 * Rcaron: L<<472.0,318.0>--<440.0,318.0>>/B<<440.0,318.0>-<495.0,306.0>-<519.5,265.5>> = 12.308015817427924 * braceleft.case: B<<213.5,373.5>-<179.0,343.0>-<114.0,341.0>>/B<<114.0,341.0>-<179.0,339.0>-<213.5,308.5>> = 3.5247820473210187 * braceleft: B<<231.0,330.0>-<199.0,291.0>-<125.0,288.0>>/B<<125.0,288.0>-<199.0,285.0>-<231.0,246.0>> = 4.643061179665369 * braceright.case: B<<203.5,308.5>-<238.0,339.0>-<303.0,341.0>>/B<<303.0,341.0>-<238.0,343.0>-<203.5,373.5>> = 3.5247820473210187 * braceright: B<<214.5,246.0>-<247.0,285.0>-<320.0,288.0>>/B<<320.0,288.0>-<247.0,291.0>-<214.5,330.0>> = 4.706593732216495 * eth: B<<393.0,479.0>-<440.0,453.0>-<465.0,396.0>>/B<<465.0,396.0>-<453.0,455.0>-<430.0,503.5>> = 12.18552470695263 * uni0156: L<<472.0,318.0>--<440.0,318.0>>/B<<440.0,318.0>-<495.0,306.0>-<519.5,265.5>> = 12.308015817427924 * uni0210: L<<472.0,318.0>--<440.0,318.0>>/B<<440.0,318.0>-<495.0,306.0>-<519.5,265.5>> = 12.308015817427924 and 4 more. [code: found-jaggy-segments]
--- 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: ellipsis Contours detected: 2 Expected: 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: ellipsis Contours detected: 2 Expected: 3 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + b - b + f - f + h - h + f - f + i - i + f - f + k - k + f - f + l - l + b - h + i - i + k - k + l - l + t - t + t [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 16pt SemiBold' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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 --- 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.* β **WARN** The following glyphs have jaggy segments: * R: L<<494.0,317.0>--<473.0,317.0>>/B<<473.0,317.0>-<529.0,306.0>-<552.5,266.5>> = 11.113040535948294 * Racute: L<<494.0,317.0>--<473.0,317.0>>/B<<473.0,317.0>-<529.0,306.0>-<552.5,266.5>> = 11.113040535948294 * Rcaron: L<<494.0,317.0>--<473.0,317.0>>/B<<473.0,317.0>-<529.0,306.0>-<552.5,266.5>> = 11.113040535948294 * braceleft.case: B<<246.0,374.5>-<207.0,342.0>-<128.0,341.0>>/B<<128.0,341.0>-<207.0,340.0>-<246.0,307.5>> = 1.4504485981183235 * braceleft: B<<264.5,337.0>-<231.0,293.0>-<141.0,290.0>>/B<<141.0,290.0>-<231.0,287.0>-<264.5,243.0>> = 3.8183048659927747 * braceright.case: B<<199.0,307.5>-<238.0,340.0>-<317.0,341.0>>/B<<317.0,341.0>-<238.0,342.0>-<199.0,374.5>> = 1.4504485981183235 * braceright: B<<203.5,243.0>-<237.0,287.0>-<327.0,290.0>>/B<<327.0,290.0>-<237.0,293.0>-<203.5,337.0>> = 3.8183048659927747 * eng: L<<249.0,523.0>--<249.0,400.0>>/B<<249.0,400.0>-<264.0,463.0>-<307.5,497.0>> = 13.392497753751098 * eth: B<<376.5,479.5>-<420.0,455.0>-<444.0,400.0>>/B<<444.0,400.0>-<434.0,455.0>-<416.5,500.0>> = 13.269859733146578 * m: L<<247.0,522.0>--<247.0,408.0>>/B<<247.0,408.0>-<260.0,466.0>-<298.5,498.0>> = 12.633361935275003 and 39 more. [code: found-jaggy-segments]
--- 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: two Contours detected: 2 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + b - b + f - f + h - h + f - f + i - i + f - f + k - k + f - f + l - l + b - h + i - i + k - k + l - l + t - t + t [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 16pt Thin' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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 --- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni1EB4: X=418.0,Y=981.0 (should be at ascender 982?) * uni1EAA: X=418.0,Y=981.0 (should be at ascender 982?) * Aringacute: X=366.0,Y=980.0 (should be at ascender 982?) * Aringacute: X=394.0,Y=980.0 (should be at ascender 982?) * uni1EC4: X=393.0,Y=981.0 (should be at ascender 982?) * Eng: X=659.0,Y=-1.0 (should be at baseline 0?) * uni1ED6: X=437.0,Y=981.0 (should be at ascender 982?) * Uogonek: X=509.0,Y=-1.0 (should be at baseline 0?) * atilde: X=383.0,Y=684.0 (should be at cap-height 682?) * atilde: X=405.0,Y=684.0 (should be at cap-height 682?) and 38 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * braceleft.case: B<<170.0,372.5>-<142.0,344.0>-<95.0,341.0>>/B<<95.0,341.0>-<142.0,338.0>-<170.0,310.0>> = 7.304445560612643 * braceleft: B<<186.0,321.5>-<155.0,289.0>-<104.0,286.0>>/B<<104.0,286.0>-<155.0,283.0>-<186.0,250.5>> = 6.732921326859609 * braceright.case: B<<209.0,310.0>-<237.0,338.0>-<284.0,341.0>>/B<<284.0,341.0>-<237.0,344.0>-<209.0,372.5>> = 7.304445560612643 * braceright: B<<228.0,250.5>-<259.0,283.0>-<310.0,286.0>>/B<<310.0,286.0>-<259.0,289.0>-<228.0,321.5>> = 6.732921326859609 * eth: B<<414.5,478.5>-<466.0,450.0>-<493.0,391.0>>/B<<493.0,391.0>-<477.0,456.0>-<447.0,508.5>> = 10.761466193915874 * nine.dnom: B<<249.5,56.5>-<287.0,100.0>-<282.0,197.0>>/B<<282.0,197.0>-<278.0,166.0>-<248.5,142.5>> = 10.303158468898733 * nine.lf: B<<533.0,247.5>-<550.0,331.0>-<541.0,452.0>>/B<<541.0,452.0>-<536.0,364.0>-<476.0,309.0>> = 7.505782036483042 * nine.numr: B<<249.5,409.5>-<287.0,453.0>-<282.0,550.0>>/B<<282.0,550.0>-<278.0,519.0>-<248.5,495.5>> = 10.303158468898733 * nine: B<<533.0,247.5>-<550.0,331.0>-<541.0,452.0>>/B<<541.0,452.0>-<536.0,364.0>-<476.0,309.0>> = 7.505782036483042 * six.dnom: B<<100.5,271.5>-<63.0,228.0>-<67.0,131.0>>/B<<67.0,131.0>-<72.0,163.0>-<101.5,186.0>> = 11.24203380869584 and 8 more. [code: found-jaggy-segments]
--- 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.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * f_t.liga: L<<545.0,158.0>--<546.0,477.0>> * t: L<<156.0,158.0>--<157.0,477.0>> * t_t.liga: L<<156.0,155.0>--<157.0,477.0>> * t_t.liga: L<<571.0,158.0>--<572.0,477.0>> * tcaron: L<<156.0,158.0>--<157.0,477.0>> * uni0163: L<<156.0,158.0>--<157.0,477.0>> * uni021B: L<<156.0,158.0>--<157.0,477.0>> * uni1E6D: L<<156.0,158.0>--<157.0,477.0>> and uni1E6F: L<<156.0,158.0>--<157.0,477.0>> [code: found-semi-vertical]
--- 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + b - b + f - f + h - h + f - f + i - i + f - f + k - k + f - f + l - l + b - h + i - i + k - k + l - l + t - t + t [code: lacks-kern-info]
--- 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 --- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni1EB2: X=535.0,Y=981.5 (should be at ascender 982?) * uni1EA8: X=643.5,Y=981.0 (should be at ascender 982?) * uni1EA8: X=587.0,Y=984.0 (should be at ascender 982?) * uni1EC2: X=596.5,Y=981.0 (should be at ascender 982?) * uni1EC2: X=540.0,Y=984.0 (should be at ascender 982?) * uni1ED4: X=648.5,Y=981.0 (should be at ascender 982?) * uni1ED4: X=592.0,Y=984.0 (should be at ascender 982?) * uni1EA3: X=275.5,Y=681.5 (should be at cap-height 682?) * atilde: X=311.0,Y=680.0 (should be at cap-height 682?) * uni1EBB: X=268.5,Y=681.5 (should be at cap-height 682?) and 34 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * B: B<<633.5,407.0>-<590.0,368.0>-<517.0,357.0>>/B<<517.0,357.0>-<609.0,349.0>-<661.0,309.5>> = 13.538882607947905 * R: L<<468.0,327.0>--<427.0,327.0>>/B<<427.0,327.0>-<496.0,320.0>-<530.5,282.0>> = 5.79279649503215 * Racute: L<<468.0,327.0>--<427.0,327.0>>/B<<427.0,327.0>-<496.0,320.0>-<530.5,282.0>> = 5.79279649503215 * Rcaron: L<<468.0,327.0>--<427.0,327.0>>/B<<427.0,327.0>-<496.0,320.0>-<530.5,282.0>> = 5.79279649503215 * at: L<<535.0,166.0>--<535.0,168.0>>/B<<535.0,168.0>-<522.0,100.0>-<479.0,67.5>> = 10.823011226207075 * braceleft.case: B<<267.5,377.0>-<233.0,342.0>-<150.0,341.0>>/B<<150.0,341.0>-<233.0,340.0>-<267.5,305.0>> = 1.380554395730035 * braceleft: B<<241.0,294.5>-<204.0,274.0>-<137.0,273.0>>/B<<137.0,273.0>-<204.0,273.0>-<241.0,252.0>> = 0.8550973962666929 * braceright.case: B<<166.0,305.0>-<200.0,340.0>-<283.0,341.0>>/B<<283.0,341.0>-<200.0,342.0>-<166.0,377.0>> = 1.380554395730035 * braceright: B<<202.0,252.0>-<239.0,273.0>-<306.0,273.0>>/B<<306.0,273.0>-<239.0,274.0>-<202.0,294.5>> = 0.8550973962666929 * eng: L<<255.0,518.0>--<255.0,397.0>>/B<<255.0,397.0>-<264.0,458.0>-<300.0,492.5>> = 8.392925187392485 and 43 more. [code: found-jaggy-segments]
--- 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + b - b + f - f + h - h + f - f + i - i + f - f + k - k + f - f + l - l + b - h + i - i + k - k + l - l + t - t + t [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 144pt ExtraLight' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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 --- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni1EB4: X=285.0,Y=984.0 (should be at ascender 982?) * uni1EAA: X=285.0,Y=984.0 (should be at ascender 982?) * uni1EC4: X=257.0,Y=984.0 (should be at ascender 982?) * Eng: X=623.0,Y=-1.0 (should be at baseline 0?) * uni1ED6: X=289.0,Y=984.0 (should be at ascender 982?) * uni01EA: X=481.0,Y=-2.0 (should be at baseline 0?) * Q: X=626.0,Y=-2.0 (should be at baseline 0?) * Q: X=652.0,Y=-2.0 (should be at baseline 0?) * Uhorn: X=752.5,Y=682.5 (should be at cap-height 682?) * uni1EE8: X=752.5,Y=682.5 (should be at cap-height 682?) and 83 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have colinear vectors: * ampersand: L<<261.0,382.0>--<262.0,381.0>> -> L<<262.0,381.0>--<498.0,116.0>> [code: found-colinear-vectors]
--- 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.* β **WARN** The following glyphs have jaggy segments: * B: B<<565.5,400.0>-<526.0,360.0>-<455.0,350.0>>/B<<455.0,350.0>-<538.0,343.0>-<585.0,300.5>> = 12.83785915174798 * R: L<<426.0,330.0>--<376.0,330.0>>/B<<376.0,330.0>-<430.0,317.0>-<455.5,276.5>> = 13.535856369134248 * Racute: L<<426.0,330.0>--<376.0,330.0>>/B<<376.0,330.0>-<430.0,317.0>-<455.5,276.5>> = 13.535856369134248 * Rcaron: L<<426.0,330.0>--<376.0,330.0>>/B<<376.0,330.0>-<430.0,317.0>-<455.5,276.5>> = 13.535856369134248 * a: L<<396.0,86.0>--<396.0,144.0>>/B<<396.0,144.0>-<377.0,64.0>-<326.5,28.0>> = 13.360218444764461 * aacute: L<<396.0,86.0>--<396.0,144.0>>/B<<396.0,144.0>-<377.0,64.0>-<326.5,28.0>> = 13.360218444764461 * abreve: L<<396.0,86.0>--<396.0,144.0>>/B<<396.0,144.0>-<377.0,64.0>-<326.5,28.0>> = 13.360218444764461 * acircumflex: L<<396.0,86.0>--<396.0,144.0>>/B<<396.0,144.0>-<377.0,64.0>-<326.5,28.0>> = 13.360218444764461 * adieresis: L<<396.0,86.0>--<396.0,144.0>>/B<<396.0,144.0>-<377.0,64.0>-<326.5,28.0>> = 13.360218444764461 * agrave: L<<396.0,86.0>--<396.0,144.0>>/B<<396.0,144.0>-<377.0,64.0>-<326.5,28.0>> = 13.360218444764461 and 77 more. [code: found-jaggy-segments]
--- 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.* β **WARN** The following glyphs have semi-vertical/semi-horizontal lines: * t: L<<133.0,138.0>--<135.0,467.0>> * t_t.liga: L<<133.0,136.0>--<135.0,467.0>> * t_t.liga: L<<497.0,138.0>--<499.0,467.0>> * tbar: L<<153.0,311.0>--<154.0,467.0>> * tcaron: L<<133.0,138.0>--<135.0,467.0>> * uni0163: L<<133.0,138.0>--<135.0,467.0>> * uni021B: L<<133.0,138.0>--<135.0,467.0>> * uni1E6D: L<<133.0,138.0>--<135.0,467.0>> and uni1E6F: L<<133.0,138.0>--<135.0,467.0>> [code: found-semi-vertical]
--- 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + b - b + f - f + h - h + f - f + i - i + f - f + k - k + f - f + l - l + b - h + i - i + k - k + l - l + t - t + t [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 144pt Light' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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 --- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni1EB4: X=259.0,Y=984.0 (should be at ascender 982?) * uni1EB4: X=453.0,Y=980.0 (should be at ascender 982?) * uni1EB4: X=384.0,Y=984.0 (should be at ascender 982?) * uni1EAA: X=258.0,Y=984.0 (should be at ascender 982?) * uni1EAA: X=452.0,Y=980.0 (should be at ascender 982?) * uni1EAA: X=383.0,Y=984.0 (should be at ascender 982?) * uni1EC4: X=227.0,Y=984.0 (should be at ascender 982?) * uni1EC4: X=421.0,Y=980.0 (should be at ascender 982?) * uni1EC4: X=352.0,Y=984.0 (should be at ascender 982?) * uni1ED6: X=263.0,Y=984.0 (should be at ascender 982?) and 49 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * B: B<<575.5,401.0>-<535.0,361.0>-<464.0,351.0>>/B<<464.0,351.0>-<549.0,344.0>-<597.0,302.0>> = 12.724945318027565 * R: L<<432.0,329.0>--<384.0,329.0>>/B<<384.0,329.0>-<441.0,317.0>-<467.5,277.0>> = 11.888658039627968 * Racute: L<<432.0,329.0>--<384.0,329.0>>/B<<384.0,329.0>-<441.0,317.0>-<467.5,277.0>> = 11.888658039627968 * Rcaron: L<<432.0,329.0>--<384.0,329.0>>/B<<384.0,329.0>-<441.0,317.0>-<467.5,277.0>> = 11.888658039627968 * a: L<<390.0,95.0>--<390.0,138.0>>/B<<390.0,138.0>-<372.0,61.0>-<322.5,26.5>> = 13.157542740014811 * aacute: L<<390.0,95.0>--<390.0,138.0>>/B<<390.0,138.0>-<372.0,61.0>-<322.5,26.5>> = 13.157542740014811 * abreve: L<<390.0,95.0>--<390.0,138.0>>/B<<390.0,138.0>-<372.0,61.0>-<322.5,26.5>> = 13.157542740014811 * acircumflex: L<<390.0,95.0>--<390.0,138.0>>/B<<390.0,138.0>-<372.0,61.0>-<322.5,26.5>> = 13.157542740014811 * adieresis: L<<390.0,95.0>--<390.0,138.0>>/B<<390.0,138.0>-<372.0,61.0>-<322.5,26.5>> = 13.157542740014811 * agrave: L<<390.0,95.0>--<390.0,138.0>>/B<<390.0,138.0>-<372.0,61.0>-<322.5,26.5>> = 13.157542740014811 and 89 more. [code: found-jaggy-segments]
--- 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + b - b + f - f + h - h + f - f + i - i + f - f + k - k + f - f + l - l + b - h + i - i + k - k + l - l + t - t + t [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 144pt Medium' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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 --- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni01EA: X=511.0,Y=-2.0 (should be at baseline 0?) * Q: X=526.0,Y=1.0 (should be at baseline 0?) * Uogonek: X=493.0,Y=2.0 (should be at baseline 0?) * W: X=297.0,Y=-2.0 (should be at baseline 0?) * W: X=775.0,Y=-2.0 (should be at baseline 0?) * W: X=673.0,Y=-2.0 (should be at baseline 0?) * W: X=397.0,Y=-2.0 (should be at baseline 0?) * Wacute: X=297.0,Y=-2.0 (should be at baseline 0?) * Wacute: X=775.0,Y=-2.0 (should be at baseline 0?) * Wacute: X=673.0,Y=-2.0 (should be at baseline 0?) and 74 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * B: B<<606.0,403.5>-<564.0,364.0>-<491.0,354.0>>/B<<491.0,354.0>-<580.0,347.0>-<630.5,306.0>> = 12.297339498849466 * R: L<<451.0,328.0>--<407.0,328.0>>/B<<407.0,328.0>-<470.0,319.0>-<500.5,279.5>> = 8.13010235415596 * Racute: L<<451.0,328.0>--<407.0,328.0>>/B<<407.0,328.0>-<470.0,319.0>-<500.5,279.5>> = 8.13010235415596 * Rcaron: L<<451.0,328.0>--<407.0,328.0>>/B<<407.0,328.0>-<470.0,319.0>-<500.5,279.5>> = 8.13010235415596 * a: B<<404.5,24.5>-<375.0,59.0>-<375.0,122.0>>/B<<375.0,122.0>-<358.0,54.0>-<312.0,22.0>> = 14.036243467926457 * aacute: B<<404.5,24.5>-<375.0,59.0>-<375.0,122.0>>/B<<375.0,122.0>-<358.0,54.0>-<312.0,22.0>> = 14.036243467926457 * abreve: B<<404.5,24.5>-<375.0,59.0>-<375.0,122.0>>/B<<375.0,122.0>-<358.0,54.0>-<312.0,22.0>> = 14.036243467926457 * acircumflex: B<<404.5,24.5>-<375.0,59.0>-<375.0,122.0>>/B<<375.0,122.0>-<358.0,54.0>-<312.0,22.0>> = 14.036243467926457 * adieresis: B<<404.5,24.5>-<375.0,59.0>-<375.0,122.0>>/B<<375.0,122.0>-<358.0,54.0>-<312.0,22.0>> = 14.036243467926457 * agrave: B<<404.5,24.5>-<375.0,59.0>-<375.0,122.0>>/B<<375.0,122.0>-<358.0,54.0>-<312.0,22.0>> = 14.036243467926457 and 66 more. [code: found-jaggy-segments]
--- 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 6 Expected: 1, 3, 4 or 7 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + b - b + f - f + h - h + f - f + i - i + f - f + k - k + f - f + l - l + b - h + i - i + k - k + l - l + t - t + t [code: lacks-kern-info]
--- 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 --- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni1EB4: X=459.0,Y=984.0 (should be at ascender 982?) * uni1EB4: X=375.0,Y=983.0 (should be at ascender 982?) * uni1EAA: X=458.0,Y=984.0 (should be at ascender 982?) * uni1EAA: X=374.0,Y=983.0 (should be at ascender 982?) * uni1EC4: X=423.0,Y=984.0 (should be at ascender 982?) * uni1EC4: X=339.0,Y=983.0 (should be at ascender 982?) * uni1ED6: X=463.0,Y=984.0 (should be at ascender 982?) * uni1ED6: X=379.0,Y=983.0 (should be at ascender 982?) * uni01EA: X=501.0,Y=-2.0 (should be at baseline 0?) * uni022C: X=250.0,Y=984.0 (should be at ascender 982?) and 68 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have jaggy segments: * B: B<<590.5,402.5>-<549.0,363.0>-<477.0,353.0>>/B<<477.0,353.0>-<564.0,346.0>-<613.5,304.5>> = 12.507258369221715 * R: L<<442.0,329.0>--<395.0,329.0>>/B<<395.0,329.0>-<455.0,318.0>-<484.0,278.5>> = 10.388857815469619 * Racute: L<<442.0,329.0>--<395.0,329.0>>/B<<395.0,329.0>-<455.0,318.0>-<484.0,278.5>> = 10.388857815469619 * Rcaron: L<<442.0,329.0>--<395.0,329.0>>/B<<395.0,329.0>-<455.0,318.0>-<484.0,278.5>> = 10.388857815469619 * a: L<<382.0,109.0>--<382.0,129.0>>/B<<382.0,129.0>-<365.0,57.0>-<317.0,24.0>> = 13.284866484902187 * aacute: L<<382.0,109.0>--<382.0,129.0>>/B<<382.0,129.0>-<365.0,57.0>-<317.0,24.0>> = 13.284866484902187 * abreve: L<<382.0,109.0>--<382.0,129.0>>/B<<382.0,129.0>-<365.0,57.0>-<317.0,24.0>> = 13.284866484902187 * acircumflex: L<<382.0,109.0>--<382.0,129.0>>/B<<382.0,129.0>-<365.0,57.0>-<317.0,24.0>> = 13.284866484902187 * adieresis: L<<382.0,109.0>--<382.0,129.0>>/B<<382.0,129.0>-<365.0,57.0>-<317.0,24.0>> = 13.284866484902187 * agrave: L<<382.0,109.0>--<382.0,129.0>>/B<<382.0,129.0>-<365.0,57.0>-<317.0,24.0>> = 13.284866484902187 and 69 more. [code: found-jaggy-segments]
--- 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uni20A9 Contours detected: 5 Expected: 1, 3, 4 or 7 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + b - b + f - f + h - h + f - f + i - i + f - f + k - k + f - f + l - l + b - h + i - i + k - k + l - l + t - t + t [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 144pt SemiBold' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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 --- 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.* β **WARN** The following glyphs have on-curve points which have potentially incorrect y coordinates: * uni1EA8: X=628.5,Y=984.0 (should be at ascender 982?) * uni1EC2: X=585.5,Y=984.0 (should be at ascender 982?) * uni1ED4: X=633.5,Y=984.0 (should be at ascender 982?) * uni01EA: X=520.0,Y=-2.0 (should be at baseline 0?) * Q: X=534.0,Y=1.0 (should be at baseline 0?) * uni1E9E: X=512.5,Y=683.5 (should be at cap-height 682?) * W: X=292.0,Y=-1.0 (should be at baseline 0?) * W: X=792.0,Y=-1.0 (should be at baseline 0?) * W: X=670.0,Y=-1.0 (should be at baseline 0?) * W: X=412.0,Y=-1.0 (should be at baseline 0?) and 68 more. [code: found-misalignments]
--- 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.* β **WARN** The following glyphs have colinear vectors: * uhorn: L<<319.0,513.0>--<525.0,513.0>> -> L<<525.0,513.0>--<525.0,513.0>> * uni1EE9: L<<319.0,513.0>--<525.0,513.0>> -> L<<525.0,513.0>--<525.0,513.0>> * uni1EEB: L<<319.0,513.0>--<525.0,513.0>> -> L<<525.0,513.0>--<525.0,513.0>> * uni1EED: L<<319.0,513.0>--<525.0,513.0>> -> L<<525.0,513.0>--<525.0,513.0>> * uni1EEF: L<<319.0,513.0>--<525.0,513.0>> -> L<<525.0,513.0>--<525.0,513.0>> and uni1EF1: L<<319.0,513.0>--<525.0,513.0>> -> L<<525.0,513.0>--<525.0,513.0>> [code: found-colinear-vectors]
--- 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.* β **WARN** The following glyphs have jaggy segments: * B: B<<618.5,405.5>-<576.0,366.0>-<503.0,355.0>>/B<<503.0,355.0>-<593.0,348.0>-<644.5,307.5>> = 13.016526729928092 * R: L<<459.0,328.0>--<417.0,328.0>>/B<<417.0,328.0>-<483.0,319.0>-<515.0,280.5>> = 7.765166018425308 * Racute: L<<459.0,328.0>--<417.0,328.0>>/B<<417.0,328.0>-<483.0,319.0>-<515.0,280.5>> = 7.765166018425308 * Rcaron: L<<459.0,328.0>--<417.0,328.0>>/B<<417.0,328.0>-<483.0,319.0>-<515.0,280.5>> = 7.765166018425308 * at: L<<542.0,162.0>--<542.0,170.0>>/B<<542.0,170.0>-<528.0,101.0>-<483.5,68.5>> = 11.469530332866904 * braceleft.case: B<<246.5,376.0>-<213.0,342.0>-<135.0,341.0>>/B<<135.0,341.0>-<213.0,340.0>-<246.5,306.0>> = 1.4690420685093497 * braceleft: B<<253.5,317.5>-<219.0,274.0>-<126.0,273.0>>/B<<126.0,273.0>-<219.0,272.0>-<253.5,228.5>> = 1.232119816798608 * braceright.case: B<<175.5,306.0>-<209.0,340.0>-<287.0,341.0>>/B<<287.0,341.0>-<209.0,342.0>-<175.5,376.0>> = 1.4690420685093497 * braceright: B<<179.5,228.5>-<214.0,272.0>-<307.0,273.0>>/B<<307.0,273.0>-<214.0,274.0>-<179.5,317.5>> = 1.232119816798608 * eng: L<<234.0,513.0>--<234.0,389.0>>/B<<234.0,389.0>-<245.0,453.0>-<283.5,487.0>> = 9.752424941653764 and 41 more. [code: found-jaggy-segments]
--- 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: uni00B2 Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: uni2082 Contours detected: 2 Expected: 1 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: lira Contours detected: 2 Expected: 1 Glyph name: onehalf Contours detected: 4 Expected: 3 Glyph name: two Contours detected: 2 Expected: 1 [code: contour-count]
--- Rationale --- Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren't used (eg https://github.com/impallari/Raleway/issues/14).* β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + b - b + f - f + h - h + f - f + i - i + f - f + k - k + f - f + l - l + b - h + i - i + k - k + l - l + t - t + t [code: lacks-kern-info]
--- Rationale --- According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters. After discussing the problem in more detail at `FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though. [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/googlefonts/fontbakery/issues/2179* β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 144pt Thin' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]
--- 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 --- 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.* β **WARN** The following glyphs have jaggy segments: * B: B<<555.0,399.5>-<516.0,359.0>-<446.0,349.0>>/B<<446.0,349.0>-<528.0,342.0>-<574.0,299.0>> = 13.009376137162674 * C: B<<544.0,641.0>-<613.0,588.0>-<635.0,500.0>>/L<<635.0,500.0>--<635.0,682.0>> = 14.036243467926484 * Cacute: B<<544.0,641.0>-<613.0,588.0>-<635.0,500.0>>/L<<635.0,500.0>--<635.0,682.0>> = 14.036243467926484 * Ccaron: B<<544.0,641.0>-<613.0,588.0>-<635.0,500.0>>/L<<635.0,500.0>--<635.0,682.0>> = 14.036243467926484 * Ccedilla: B<<544.0,641.0>-<613.0,588.0>-<635.0,500.0>>/L<<635.0,500.0>--<635.0,682.0>> = 14.036243467926484 * Ccircumflex: B<<544.0,641.0>-<613.0,588.0>-<635.0,500.0>>/L<<635.0,500.0>--<635.0,682.0>> = 14.036243467926484 * Cdotaccent: B<<544.0,641.0>-<613.0,588.0>-<635.0,500.0>>/L<<635.0,500.0>--<635.0,682.0>> = 14.036243467926484 * Euro: B<<665.0,641.0>-<734.0,588.0>-<756.0,500.0>>/L<<756.0,500.0>--<756.0,682.0>> = 14.036243467926484 * G: L<<640.0,0.0>--<640.0,190.0>>/B<<640.0,190.0>-<617.0,99.0>-<551.5,43.0>> = 14.184294248270799 * Gbreve: L<<640.0,0.0>--<640.0,190.0>>/B<<640.0,190.0>-<617.0,99.0>-<551.5,43.0>> = 14.184294248270799 and 116 more. [code: found-jaggy-segments]
π ERROR | π₯ FAIL | β WARN | π€ SKIP | βΉ INFO | π PASS | π DEBUG |
---|---|---|---|---|---|---|
0 | 0 | 86 | 1373 | 85 | 1230 | 0 |
0% | 0% | 3% | 49% | 3% | 44% | 0% |
Note: The following loglevels were omitted in this report:
Fontbakery report
Fontbakery version: 0.7.34
[17] MontaguSlab144pt-Bold.ttf
π₯ FAIL: 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) * π₯ **FAIL** In this font fsType is set to 8 meaning that: The font may be embedded but must only be installed temporarily on other systems. No such DRM restrictions can be enabled on the Google Fonts collection, so the fsType field must be set to zero (Installable Embedding) instead. [code: drm]π₯ FAIL: 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) * π₯ **FAIL** Missing required codepoints: 0x0026 (AMPERSAND), 0x002B (PLUS SIGN), 0x003C (LESS-THAN SIGN), 0x003D (EQUALS SIGN) and 23 more. [code: missing-codepoints]π₯ FAIL: 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) * π₯ **FAIL** Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" But instead we have got: "Copyright 2020 FKxGF Schoolbook Project Authors (https://github.com/floriankarsten/fk-gf-schoolbook)" [code: bad-notice-format]π₯ FAIL: 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) * π₯ **FAIL** OS/2 fsSelection REGULAR bit should be unset. [code: bad-REGULAR] * π₯ **FAIL** OS/2 fsSelection BOLD bit should be set. [code: bad-BOLD]π₯ FAIL: Checking head.macStyle value.
* [com.google.fonts/check/mac_style](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/googlefonts.html#com.google.fonts/check/mac_style) * π₯ **FAIL** head macStyle BOLD bit should be set. [code: bad-BOLD]π₯ 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 "Montagu Slab 144pt" but got "Montagu Slab 144pt Bold". [code: mismatch]π₯ FAIL: 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) * π₯ **FAIL** SUBFAMILY_NAME for Win "Regular" must be "Bold" [code: bad-familyname]π₯ FAIL: 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) * π₯ **FAIL** Font style is "Bold" and, for that reason, it is not expected to have a [TYPOGRAPHIC_FAMILY_NAME(16):WINDOWS(3)] entry! [code: ribbi]π₯ FAIL: 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) * π₯ **FAIL** OS/2.usWinAscent value should be equal or greater than 2466, but got 1800 instead [code: ascent] * π₯ **FAIL** OS/2.usWinDescent value should be equal or greater than 688, but got 600 instead. [code: descent]π₯ FAIL: 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) * π₯ **FAIL** The following glyphs have components which themselves are component glyphs: * uni1EB2 * uni1EB4 * uni1EA8 * uni1EAA * uni01C4 * uni01C5 * uni1EC2 * uni1EC4 * uni01C8 * uni01CB and 33 more. [code: found-nested-components]β 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: Eth Contours detected: 3 Expected: 2 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: aogonek Contours detected: 3 Expected: 2 Glyph name: Dcroat Contours detected: 3 Expected: 2 Glyph name: eogonek Contours detected: 3 Expected: 2 Glyph name: Lslash Contours detected: 2 Expected: 1 Glyph name: lslash Contours detected: 2 Expected: 1 Glyph name: Tbar Contours detected: 2 Expected: 1 Glyph name: Uogonek Contours detected: 2 Expected: 1 Glyph name: uogonek Contours detected: 2 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: ohorn Contours detected: 3 Expected: 2 Glyph name: uhorn Contours detected: 2 Expected: 1 Glyph name: uni01EA Contours detected: 3 Expected: 2 Glyph name: uni01EB Contours detected: 3 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni1EDB Contours detected: 4 Expected: 3 Glyph name: uni1EDD Contours detected: 4 Expected: 3 Glyph name: uni1EDF Contours detected: 4 Expected: 3 Glyph name: uni1EE1 Contours detected: 4 Expected: 3 Glyph name: uni1EE3 Contours detected: 4 Expected: 3 Glyph name: uni1EE9 Contours detected: 3 Expected: 2 Glyph name: uni1EEB Contours detected: 3 Expected: 2 Glyph name: uni1EED Contours detected: 3 Expected: 2 Glyph name: uni1EEF Contours detected: 3 Expected: 2 Glyph name: uni1EF1 Contours detected: 3 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: colonmonetary Contours detected: 0 Expected: 1 or 3 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20A9 Contours detected: 0 Expected: 1, 3, 4 or 7 Glyph name: Euro Contours detected: 0 Expected: 1 or 2 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20B1 Contours detected: 0 Expected: 1, 2 or 4 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: Dcroat Contours detected: 3 Expected: 2 Glyph name: Eth Contours detected: 3 Expected: 2 Glyph name: Euro Contours detected: 0 Expected: 1 or 2 Glyph name: Lslash Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: Tbar Contours detected: 2 Expected: 1 Glyph name: Uogonek Contours detected: 2 Expected: 1 Glyph name: aogonek Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: colonmonetary Contours detected: 0 Expected: 1 or 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: eogonek Contours detected: 3 Expected: 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: lslash Contours detected: 2 Expected: 1 Glyph name: ohorn Contours detected: 3 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uhorn Contours detected: 2 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni1EDB Contours detected: 4 Expected: 3 Glyph name: uni1EDD Contours detected: 4 Expected: 3 Glyph name: uni1EDF Contours detected: 4 Expected: 3 Glyph name: uni1EE1 Contours detected: 4 Expected: 3 Glyph name: uni1EE3 Contours detected: 4 Expected: 3 Glyph name: uni1EE9 Contours detected: 3 Expected: 2 Glyph name: uni1EEB Contours detected: 3 Expected: 2 Glyph name: uni1EED Contours detected: 3 Expected: 2 Glyph name: uni1EEF Contours detected: 3 Expected: 2 Glyph name: uni1EF1 Contours detected: 3 Expected: 2 Glyph name: uni20A9 Contours detected: 0 Expected: 1, 3, 4 or 7 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20B1 Contours detected: 0 Expected: 1, 2 or 4 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uogonek Contours detected: 2 Expected: 1 [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** This font lacks caret position values for ligature glyphs on its GDEF table. [code: lacks-caret-pos]β WARN: Is there kerning info for non-ligated sequences?
* [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) * β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]β WARN: Combined length of family and style must not exceed 27 characters.
* [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) * β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 144pt Bold' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]β WARN: Are there any misaligned on-curve points?
* [com.google.fonts/check/outline_alignment_miss](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/β WARN: Do outlines contain any jaggy segments?
* [com.google.fonts/check/outline_jaggy_segments](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/β WARN: 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/[12] MontaguSlab144pt-ExtraLight.ttf
π₯ FAIL: 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) * π₯ **FAIL** In this font fsType is set to 8 meaning that: The font may be embedded but must only be installed temporarily on other systems. No such DRM restrictions can be enabled on the Google Fonts collection, so the fsType field must be set to zero (Installable Embedding) instead. [code: drm]π₯ FAIL: 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) * π₯ **FAIL** Missing required codepoints: 0x0026 (AMPERSAND), 0x002B (PLUS SIGN), 0x003C (LESS-THAN SIGN), 0x003D (EQUALS SIGN) and 23 more. [code: missing-codepoints]π₯ FAIL: 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) * π₯ **FAIL** Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" But instead we have got: "Copyright 2020 FKxGF Schoolbook Project Authors (https://github.com/floriankarsten/fk-gf-schoolbook)" [code: bad-notice-format]π₯ FAIL: 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) * π₯ **FAIL** OS/2.usWinAscent value should be equal or greater than 2466, but got 1800 instead [code: ascent] * π₯ **FAIL** OS/2.usWinDescent value should be equal or greater than 688, but got 600 instead. [code: descent]π₯ FAIL: 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) * π₯ **FAIL** The following glyphs have components which themselves are component glyphs: * uni1EB2 * uni1EB4 * uni1EA8 * uni1EAA * uni01C4 * uni01C5 * uni1EC2 * uni1EC4 * uni01C8 * uni01CB and 33 more. [code: found-nested-components]β 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: Eth Contours detected: 3 Expected: 2 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: aogonek Contours detected: 3 Expected: 2 Glyph name: Dcroat Contours detected: 3 Expected: 2 Glyph name: eogonek Contours detected: 3 Expected: 2 Glyph name: Lslash Contours detected: 2 Expected: 1 Glyph name: lslash Contours detected: 2 Expected: 1 Glyph name: Tbar Contours detected: 2 Expected: 1 Glyph name: Uogonek Contours detected: 2 Expected: 1 Glyph name: uogonek Contours detected: 2 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: ohorn Contours detected: 3 Expected: 2 Glyph name: uhorn Contours detected: 2 Expected: 1 Glyph name: uni01EA Contours detected: 3 Expected: 2 Glyph name: uni01EB Contours detected: 3 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni1EDB Contours detected: 4 Expected: 3 Glyph name: uni1EDD Contours detected: 4 Expected: 3 Glyph name: uni1EDF Contours detected: 4 Expected: 3 Glyph name: uni1EE1 Contours detected: 4 Expected: 3 Glyph name: uni1EE3 Contours detected: 4 Expected: 3 Glyph name: uni1EE9 Contours detected: 3 Expected: 2 Glyph name: uni1EEB Contours detected: 3 Expected: 2 Glyph name: uni1EED Contours detected: 3 Expected: 2 Glyph name: uni1EEF Contours detected: 3 Expected: 2 Glyph name: uni1EF1 Contours detected: 3 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: colonmonetary Contours detected: 0 Expected: 1 or 3 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20A9 Contours detected: 0 Expected: 1, 3, 4 or 7 Glyph name: Euro Contours detected: 0 Expected: 1 or 2 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20B1 Contours detected: 0 Expected: 1, 2 or 4 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: Dcroat Contours detected: 3 Expected: 2 Glyph name: Eth Contours detected: 3 Expected: 2 Glyph name: Euro Contours detected: 0 Expected: 1 or 2 Glyph name: Lslash Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: Tbar Contours detected: 2 Expected: 1 Glyph name: Uogonek Contours detected: 2 Expected: 1 Glyph name: aogonek Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: colonmonetary Contours detected: 0 Expected: 1 or 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: eogonek Contours detected: 3 Expected: 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: lslash Contours detected: 2 Expected: 1 Glyph name: ohorn Contours detected: 3 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uhorn Contours detected: 2 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni1EDB Contours detected: 4 Expected: 3 Glyph name: uni1EDD Contours detected: 4 Expected: 3 Glyph name: uni1EDF Contours detected: 4 Expected: 3 Glyph name: uni1EE1 Contours detected: 4 Expected: 3 Glyph name: uni1EE3 Contours detected: 4 Expected: 3 Glyph name: uni1EE9 Contours detected: 3 Expected: 2 Glyph name: uni1EEB Contours detected: 3 Expected: 2 Glyph name: uni1EED Contours detected: 3 Expected: 2 Glyph name: uni1EEF Contours detected: 3 Expected: 2 Glyph name: uni1EF1 Contours detected: 3 Expected: 2 Glyph name: uni20A9 Contours detected: 0 Expected: 1, 3, 4 or 7 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20B1 Contours detected: 0 Expected: 1, 2 or 4 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uogonek Contours detected: 2 Expected: 1 [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** This font lacks caret position values for ligature glyphs on its GDEF table. [code: lacks-caret-pos]β WARN: Is there kerning info for non-ligated sequences?
* [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) * β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]β WARN: Combined length of family and style must not exceed 27 characters.
* [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) * β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 144pt ExtraLight' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]β WARN: Are there any misaligned on-curve points?
* [com.google.fonts/check/outline_alignment_miss](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/β WARN: Do outlines contain any jaggy segments?
* [com.google.fonts/check/outline_jaggy_segments](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/β WARN: 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/[13] MontaguSlab144pt-Light.ttf
π₯ FAIL: 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) * π₯ **FAIL** In this font fsType is set to 8 meaning that: The font may be embedded but must only be installed temporarily on other systems. No such DRM restrictions can be enabled on the Google Fonts collection, so the fsType field must be set to zero (Installable Embedding) instead. [code: drm]π₯ FAIL: 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) * π₯ **FAIL** Missing required codepoints: 0x0026 (AMPERSAND), 0x002B (PLUS SIGN), 0x003C (LESS-THAN SIGN), 0x003D (EQUALS SIGN) and 23 more. [code: missing-codepoints]π₯ FAIL: 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) * π₯ **FAIL** Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" But instead we have got: "Copyright 2020 FKxGF Schoolbook Project Authors (https://github.com/floriankarsten/fk-gf-schoolbook)" [code: bad-notice-format]π₯ FAIL: 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) * π₯ **FAIL** OS/2.usWinAscent value should be equal or greater than 2466, but got 1800 instead [code: ascent] * π₯ **FAIL** OS/2.usWinDescent value should be equal or greater than 688, but got 600 instead. [code: descent]π₯ FAIL: 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) * π₯ **FAIL** The following glyphs have components which themselves are component glyphs: * uni1EB2 * uni1EB4 * uni1EA8 * uni1EAA * uni01C4 * uni01C5 * uni1EC2 * uni1EC4 * uni01C8 * uni01CB and 33 more. [code: found-nested-components]β 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: Eth Contours detected: 3 Expected: 2 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: aogonek Contours detected: 3 Expected: 2 Glyph name: Dcroat Contours detected: 3 Expected: 2 Glyph name: eogonek Contours detected: 3 Expected: 2 Glyph name: Lslash Contours detected: 2 Expected: 1 Glyph name: lslash Contours detected: 2 Expected: 1 Glyph name: Tbar Contours detected: 2 Expected: 1 Glyph name: Uogonek Contours detected: 2 Expected: 1 Glyph name: uogonek Contours detected: 2 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: ohorn Contours detected: 3 Expected: 2 Glyph name: uhorn Contours detected: 2 Expected: 1 Glyph name: uni01EA Contours detected: 3 Expected: 2 Glyph name: uni01EB Contours detected: 3 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni1EDB Contours detected: 4 Expected: 3 Glyph name: uni1EDD Contours detected: 4 Expected: 3 Glyph name: uni1EDF Contours detected: 4 Expected: 3 Glyph name: uni1EE1 Contours detected: 4 Expected: 3 Glyph name: uni1EE3 Contours detected: 4 Expected: 3 Glyph name: uni1EE9 Contours detected: 3 Expected: 2 Glyph name: uni1EEB Contours detected: 3 Expected: 2 Glyph name: uni1EED Contours detected: 3 Expected: 2 Glyph name: uni1EEF Contours detected: 3 Expected: 2 Glyph name: uni1EF1 Contours detected: 3 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: colonmonetary Contours detected: 0 Expected: 1 or 3 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20A9 Contours detected: 0 Expected: 1, 3, 4 or 7 Glyph name: Euro Contours detected: 0 Expected: 1 or 2 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20B1 Contours detected: 0 Expected: 1, 2 or 4 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: Dcroat Contours detected: 3 Expected: 2 Glyph name: Eth Contours detected: 3 Expected: 2 Glyph name: Euro Contours detected: 0 Expected: 1 or 2 Glyph name: Lslash Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: Tbar Contours detected: 2 Expected: 1 Glyph name: Uogonek Contours detected: 2 Expected: 1 Glyph name: aogonek Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: colonmonetary Contours detected: 0 Expected: 1 or 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: eogonek Contours detected: 3 Expected: 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: lslash Contours detected: 2 Expected: 1 Glyph name: ohorn Contours detected: 3 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uhorn Contours detected: 2 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni1EDB Contours detected: 4 Expected: 3 Glyph name: uni1EDD Contours detected: 4 Expected: 3 Glyph name: uni1EDF Contours detected: 4 Expected: 3 Glyph name: uni1EE1 Contours detected: 4 Expected: 3 Glyph name: uni1EE3 Contours detected: 4 Expected: 3 Glyph name: uni1EE9 Contours detected: 3 Expected: 2 Glyph name: uni1EEB Contours detected: 3 Expected: 2 Glyph name: uni1EED Contours detected: 3 Expected: 2 Glyph name: uni1EEF Contours detected: 3 Expected: 2 Glyph name: uni1EF1 Contours detected: 3 Expected: 2 Glyph name: uni20A9 Contours detected: 0 Expected: 1, 3, 4 or 7 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20B1 Contours detected: 0 Expected: 1, 2 or 4 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uogonek Contours detected: 2 Expected: 1 [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** This font lacks caret position values for ligature glyphs on its GDEF table. [code: lacks-caret-pos]β WARN: Is there kerning info for non-ligated sequences?
* [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) * β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]β WARN: Combined length of family and style must not exceed 27 characters.
* [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) * β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 144pt Light' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]β WARN: Are there any misaligned on-curve points?
* [com.google.fonts/check/outline_alignment_miss](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/β WARN: Are any segments inordinately short?
* [com.google.fonts/check/outline_short_segments](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/β WARN: Do outlines contain any jaggy segments?
* [com.google.fonts/check/outline_jaggy_segments](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/β WARN: 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/[12] MontaguSlab144pt-Medium.ttf
π₯ FAIL: 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) * π₯ **FAIL** In this font fsType is set to 8 meaning that: The font may be embedded but must only be installed temporarily on other systems. No such DRM restrictions can be enabled on the Google Fonts collection, so the fsType field must be set to zero (Installable Embedding) instead. [code: drm]π₯ FAIL: 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) * π₯ **FAIL** Missing required codepoints: 0x0026 (AMPERSAND), 0x002B (PLUS SIGN), 0x003C (LESS-THAN SIGN), 0x003D (EQUALS SIGN) and 23 more. [code: missing-codepoints]π₯ FAIL: 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) * π₯ **FAIL** Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" But instead we have got: "Copyright 2020 FKxGF Schoolbook Project Authors (https://github.com/floriankarsten/fk-gf-schoolbook)" [code: bad-notice-format]π₯ FAIL: 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) * π₯ **FAIL** OS/2.usWinAscent value should be equal or greater than 2466, but got 1800 instead [code: ascent] * π₯ **FAIL** OS/2.usWinDescent value should be equal or greater than 688, but got 600 instead. [code: descent]π₯ FAIL: 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) * π₯ **FAIL** The following glyphs have components which themselves are component glyphs: * uni1EB2 * uni1EB4 * uni1EA8 * uni1EAA * uni01C4 * uni01C5 * uni1EC2 * uni1EC4 * uni01C8 * uni01CB and 33 more. [code: found-nested-components]β 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: a Contours detected: 3 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: Eth Contours detected: 3 Expected: 2 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: agrave Contours detected: 4 Expected: 3 Glyph name: aacute Contours detected: 4 Expected: 3 Glyph name: acircumflex Contours detected: 4 Expected: 3 Glyph name: atilde Contours detected: 4 Expected: 3 Glyph name: adieresis Contours detected: 5 Expected: 4 Glyph name: aring Contours detected: 5 Expected: 4 Glyph name: ae Contours detected: 4 Expected: 3 Glyph name: amacron Contours detected: 4 Expected: 3 Glyph name: abreve Contours detected: 4 Expected: 3 Glyph name: aogonek Contours detected: 4 Expected: 2 Glyph name: Dcroat Contours detected: 3 Expected: 2 Glyph name: eogonek Contours detected: 3 Expected: 2 Glyph name: Lslash Contours detected: 2 Expected: 1 Glyph name: lslash Contours detected: 2 Expected: 1 Glyph name: Tbar Contours detected: 2 Expected: 1 Glyph name: Uogonek Contours detected: 2 Expected: 1 Glyph name: uogonek Contours detected: 2 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: ohorn Contours detected: 3 Expected: 2 Glyph name: uhorn Contours detected: 2 Expected: 1 Glyph name: uni01EA Contours detected: 3 Expected: 2 Glyph name: uni01EB Contours detected: 3 Expected: 2 Glyph name: aringacute Contours detected: 6 Expected: 4 or 5 Glyph name: aeacute Contours detected: 5 Expected: 4 Glyph name: uni0201 Contours detected: 5 Expected: 4 Glyph name: uni0203 Contours detected: 4 Expected: 3 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni1EA1 Contours detected: 4 Expected: 3 Glyph name: uni1EA3 Contours detected: 4 Expected: 3 Glyph name: uni1EA5 Contours detected: 5 Expected: 4 Glyph name: uni1EA7 Contours detected: 5 Expected: 4 Glyph name: uni1EA9 Contours detected: 5 Expected: 4 Glyph name: uni1EAB Contours detected: 5 Expected: 4 Glyph name: uni1EAD Contours detected: 5 Expected: 4 Glyph name: uni1EAF Contours detected: 5 Expected: 4 Glyph name: uni1EB1 Contours detected: 5 Expected: 4 Glyph name: uni1EB3 Contours detected: 5 Expected: 4 Glyph name: uni1EB5 Contours detected: 5 Expected: 4 Glyph name: uni1EB7 Contours detected: 5 Expected: 4 Glyph name: uni1EDB Contours detected: 4 Expected: 3 Glyph name: uni1EDD Contours detected: 4 Expected: 3 Glyph name: uni1EDF Contours detected: 4 Expected: 3 Glyph name: uni1EE1 Contours detected: 4 Expected: 3 Glyph name: uni1EE3 Contours detected: 4 Expected: 3 Glyph name: uni1EE9 Contours detected: 3 Expected: 2 Glyph name: uni1EEB Contours detected: 3 Expected: 2 Glyph name: uni1EED Contours detected: 3 Expected: 2 Glyph name: uni1EEF Contours detected: 3 Expected: 2 Glyph name: uni1EF1 Contours detected: 3 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: colonmonetary Contours detected: 0 Expected: 1 or 3 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20A9 Contours detected: 0 Expected: 1, 3, 4 or 7 Glyph name: Euro Contours detected: 0 Expected: 1 or 2 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20B1 Contours detected: 0 Expected: 1, 2 or 4 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: Dcroat Contours detected: 3 Expected: 2 Glyph name: Eth Contours detected: 3 Expected: 2 Glyph name: Euro Contours detected: 0 Expected: 1 or 2 Glyph name: Lslash Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: Tbar Contours detected: 2 Expected: 1 Glyph name: Uogonek Contours detected: 2 Expected: 1 Glyph name: a Contours detected: 3 Expected: 2 Glyph name: aacute Contours detected: 4 Expected: 3 Glyph name: abreve Contours detected: 4 Expected: 3 Glyph name: acircumflex Contours detected: 4 Expected: 3 Glyph name: adieresis Contours detected: 5 Expected: 4 Glyph name: ae Contours detected: 4 Expected: 3 Glyph name: aeacute Contours detected: 5 Expected: 4 Glyph name: agrave Contours detected: 4 Expected: 3 Glyph name: amacron Contours detected: 4 Expected: 3 Glyph name: aogonek Contours detected: 4 Expected: 2 Glyph name: aring Contours detected: 5 Expected: 4 Glyph name: aringacute Contours detected: 6 Expected: 4 or 5 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: atilde Contours detected: 4 Expected: 3 Glyph name: colonmonetary Contours detected: 0 Expected: 1 or 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: eogonek Contours detected: 3 Expected: 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: lslash Contours detected: 2 Expected: 1 Glyph name: ohorn Contours detected: 3 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uhorn Contours detected: 2 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni1EA1 Contours detected: 4 Expected: 3 Glyph name: uni1EA3 Contours detected: 4 Expected: 3 Glyph name: uni1EA5 Contours detected: 5 Expected: 4 Glyph name: uni1EA7 Contours detected: 5 Expected: 4 Glyph name: uni1EA9 Contours detected: 5 Expected: 4 Glyph name: uni1EAB Contours detected: 5 Expected: 4 Glyph name: uni1EAD Contours detected: 5 Expected: 4 Glyph name: uni1EAF Contours detected: 5 Expected: 4 Glyph name: uni1EB1 Contours detected: 5 Expected: 4 Glyph name: uni1EB3 Contours detected: 5 Expected: 4 Glyph name: uni1EB5 Contours detected: 5 Expected: 4 Glyph name: uni1EB7 Contours detected: 5 Expected: 4 Glyph name: uni1EDB Contours detected: 4 Expected: 3 Glyph name: uni1EDD Contours detected: 4 Expected: 3 Glyph name: uni1EDF Contours detected: 4 Expected: 3 Glyph name: uni1EE1 Contours detected: 4 Expected: 3 Glyph name: uni1EE3 Contours detected: 4 Expected: 3 Glyph name: uni1EE9 Contours detected: 3 Expected: 2 Glyph name: uni1EEB Contours detected: 3 Expected: 2 Glyph name: uni1EED Contours detected: 3 Expected: 2 Glyph name: uni1EEF Contours detected: 3 Expected: 2 Glyph name: uni1EF1 Contours detected: 3 Expected: 2 Glyph name: uni20A9 Contours detected: 0 Expected: 1, 3, 4 or 7 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20B1 Contours detected: 0 Expected: 1, 2 or 4 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uogonek Contours detected: 2 Expected: 1 [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** This font lacks caret position values for ligature glyphs on its GDEF table. [code: lacks-caret-pos]β WARN: Is there kerning info for non-ligated sequences?
* [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) * β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]β WARN: Combined length of family and style must not exceed 27 characters.
* [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) * β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 144pt Medium' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]β WARN: Are any segments inordinately short?
* [com.google.fonts/check/outline_short_segments](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/β WARN: Do outlines contain any jaggy segments?
* [com.google.fonts/check/outline_jaggy_segments](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/β WARN: 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/[12] MontaguSlab144pt-Regular.ttf
π₯ FAIL: 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) * π₯ **FAIL** In this font fsType is set to 8 meaning that: The font may be embedded but must only be installed temporarily on other systems. No such DRM restrictions can be enabled on the Google Fonts collection, so the fsType field must be set to zero (Installable Embedding) instead. [code: drm]π₯ FAIL: 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) * π₯ **FAIL** Missing required codepoints: 0x0026 (AMPERSAND), 0x002B (PLUS SIGN), 0x003C (LESS-THAN SIGN), 0x003D (EQUALS SIGN) and 23 more. [code: missing-codepoints]π₯ FAIL: 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) * π₯ **FAIL** Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" But instead we have got: "Copyright 2020 FKxGF Schoolbook Project Authors (https://github.com/floriankarsten/fk-gf-schoolbook)" [code: bad-notice-format]π₯ FAIL: 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) * π₯ **FAIL** OS/2.usWinAscent value should be equal or greater than 2466, but got 1800 instead [code: ascent] * π₯ **FAIL** OS/2.usWinDescent value should be equal or greater than 688, but got 600 instead. [code: descent]π₯ FAIL: 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) * π₯ **FAIL** The following glyphs have components which themselves are component glyphs: * uni1EB2 * uni1EB4 * uni1EA8 * uni1EAA * uni01C4 * uni01C5 * uni1EC2 * uni1EC4 * uni01C8 * uni01CB and 33 more. [code: found-nested-components]β 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: a Contours detected: 3 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: Eth Contours detected: 3 Expected: 2 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: agrave Contours detected: 4 Expected: 3 Glyph name: aacute Contours detected: 4 Expected: 3 Glyph name: acircumflex Contours detected: 4 Expected: 3 Glyph name: atilde Contours detected: 4 Expected: 3 Glyph name: adieresis Contours detected: 5 Expected: 4 Glyph name: aring Contours detected: 5 Expected: 4 Glyph name: ae Contours detected: 4 Expected: 3 Glyph name: amacron Contours detected: 4 Expected: 3 Glyph name: abreve Contours detected: 4 Expected: 3 Glyph name: aogonek Contours detected: 4 Expected: 2 Glyph name: Dcroat Contours detected: 3 Expected: 2 Glyph name: eogonek Contours detected: 3 Expected: 2 Glyph name: Lslash Contours detected: 2 Expected: 1 Glyph name: lslash Contours detected: 2 Expected: 1 Glyph name: Tbar Contours detected: 2 Expected: 1 Glyph name: Uogonek Contours detected: 2 Expected: 1 Glyph name: uogonek Contours detected: 2 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: ohorn Contours detected: 3 Expected: 2 Glyph name: uhorn Contours detected: 2 Expected: 1 Glyph name: uni01EA Contours detected: 3 Expected: 2 Glyph name: uni01EB Contours detected: 3 Expected: 2 Glyph name: aringacute Contours detected: 6 Expected: 4 or 5 Glyph name: aeacute Contours detected: 5 Expected: 4 Glyph name: uni0201 Contours detected: 5 Expected: 4 Glyph name: uni0203 Contours detected: 4 Expected: 3 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni1EA1 Contours detected: 4 Expected: 3 Glyph name: uni1EA3 Contours detected: 4 Expected: 3 Glyph name: uni1EA5 Contours detected: 5 Expected: 4 Glyph name: uni1EA7 Contours detected: 5 Expected: 4 Glyph name: uni1EA9 Contours detected: 5 Expected: 4 Glyph name: uni1EAB Contours detected: 5 Expected: 4 Glyph name: uni1EAD Contours detected: 5 Expected: 4 Glyph name: uni1EAF Contours detected: 5 Expected: 4 Glyph name: uni1EB1 Contours detected: 5 Expected: 4 Glyph name: uni1EB3 Contours detected: 5 Expected: 4 Glyph name: uni1EB5 Contours detected: 5 Expected: 4 Glyph name: uni1EB7 Contours detected: 5 Expected: 4 Glyph name: uni1EDB Contours detected: 4 Expected: 3 Glyph name: uni1EDD Contours detected: 4 Expected: 3 Glyph name: uni1EDF Contours detected: 4 Expected: 3 Glyph name: uni1EE1 Contours detected: 4 Expected: 3 Glyph name: uni1EE3 Contours detected: 4 Expected: 3 Glyph name: uni1EE9 Contours detected: 3 Expected: 2 Glyph name: uni1EEB Contours detected: 3 Expected: 2 Glyph name: uni1EED Contours detected: 3 Expected: 2 Glyph name: uni1EEF Contours detected: 3 Expected: 2 Glyph name: uni1EF1 Contours detected: 3 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: colonmonetary Contours detected: 0 Expected: 1 or 3 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20A9 Contours detected: 0 Expected: 1, 3, 4 or 7 Glyph name: Euro Contours detected: 0 Expected: 1 or 2 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20B1 Contours detected: 0 Expected: 1, 2 or 4 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: Dcroat Contours detected: 3 Expected: 2 Glyph name: Eth Contours detected: 3 Expected: 2 Glyph name: Euro Contours detected: 0 Expected: 1 or 2 Glyph name: Lslash Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: Tbar Contours detected: 2 Expected: 1 Glyph name: Uogonek Contours detected: 2 Expected: 1 Glyph name: a Contours detected: 3 Expected: 2 Glyph name: aacute Contours detected: 4 Expected: 3 Glyph name: abreve Contours detected: 4 Expected: 3 Glyph name: acircumflex Contours detected: 4 Expected: 3 Glyph name: adieresis Contours detected: 5 Expected: 4 Glyph name: ae Contours detected: 4 Expected: 3 Glyph name: aeacute Contours detected: 5 Expected: 4 Glyph name: agrave Contours detected: 4 Expected: 3 Glyph name: amacron Contours detected: 4 Expected: 3 Glyph name: aogonek Contours detected: 4 Expected: 2 Glyph name: aring Contours detected: 5 Expected: 4 Glyph name: aringacute Contours detected: 6 Expected: 4 or 5 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: atilde Contours detected: 4 Expected: 3 Glyph name: colonmonetary Contours detected: 0 Expected: 1 or 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: eogonek Contours detected: 3 Expected: 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: lslash Contours detected: 2 Expected: 1 Glyph name: ohorn Contours detected: 3 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uhorn Contours detected: 2 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni1EA1 Contours detected: 4 Expected: 3 Glyph name: uni1EA3 Contours detected: 4 Expected: 3 Glyph name: uni1EA5 Contours detected: 5 Expected: 4 Glyph name: uni1EA7 Contours detected: 5 Expected: 4 Glyph name: uni1EA9 Contours detected: 5 Expected: 4 Glyph name: uni1EAB Contours detected: 5 Expected: 4 Glyph name: uni1EAD Contours detected: 5 Expected: 4 Glyph name: uni1EAF Contours detected: 5 Expected: 4 Glyph name: uni1EB1 Contours detected: 5 Expected: 4 Glyph name: uni1EB3 Contours detected: 5 Expected: 4 Glyph name: uni1EB5 Contours detected: 5 Expected: 4 Glyph name: uni1EB7 Contours detected: 5 Expected: 4 Glyph name: uni1EDB Contours detected: 4 Expected: 3 Glyph name: uni1EDD Contours detected: 4 Expected: 3 Glyph name: uni1EDF Contours detected: 4 Expected: 3 Glyph name: uni1EE1 Contours detected: 4 Expected: 3 Glyph name: uni1EE3 Contours detected: 4 Expected: 3 Glyph name: uni1EE9 Contours detected: 3 Expected: 2 Glyph name: uni1EEB Contours detected: 3 Expected: 2 Glyph name: uni1EED Contours detected: 3 Expected: 2 Glyph name: uni1EEF Contours detected: 3 Expected: 2 Glyph name: uni1EF1 Contours detected: 3 Expected: 2 Glyph name: uni20A9 Contours detected: 0 Expected: 1, 3, 4 or 7 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20B1 Contours detected: 0 Expected: 1, 2 or 4 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uogonek Contours detected: 2 Expected: 1 [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** This font lacks caret position values for ligature glyphs on its GDEF table. [code: lacks-caret-pos]β WARN: Is there kerning info for non-ligated sequences?
* [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) * β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]β WARN: Are there any misaligned on-curve points?
* [com.google.fonts/check/outline_alignment_miss](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/β WARN: Are any segments inordinately short?
* [com.google.fonts/check/outline_short_segments](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/β WARN: Do outlines contain any jaggy segments?
* [com.google.fonts/check/outline_jaggy_segments](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/β WARN: 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/[13] MontaguSlab144pt-SemiBold.ttf
π₯ FAIL: 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) * π₯ **FAIL** In this font fsType is set to 8 meaning that: The font may be embedded but must only be installed temporarily on other systems. No such DRM restrictions can be enabled on the Google Fonts collection, so the fsType field must be set to zero (Installable Embedding) instead. [code: drm]π₯ FAIL: 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) * π₯ **FAIL** Missing required codepoints: 0x0026 (AMPERSAND), 0x002B (PLUS SIGN), 0x003C (LESS-THAN SIGN), 0x003D (EQUALS SIGN) and 23 more. [code: missing-codepoints]π₯ FAIL: 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) * π₯ **FAIL** Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" But instead we have got: "Copyright 2020 FKxGF Schoolbook Project Authors (https://github.com/floriankarsten/fk-gf-schoolbook)" [code: bad-notice-format]π₯ FAIL: 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) * π₯ **FAIL** OS/2.usWinAscent value should be equal or greater than 2466, but got 1800 instead [code: ascent] * π₯ **FAIL** OS/2.usWinDescent value should be equal or greater than 688, but got 600 instead. [code: descent]π₯ FAIL: 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) * π₯ **FAIL** The following glyphs have components which themselves are component glyphs: * uni1EB2 * uni1EB4 * uni1EA8 * uni1EAA * uni01C4 * uni01C5 * uni1EC2 * uni1EC4 * uni01C8 * uni01CB and 33 more. [code: found-nested-components]β 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: a Contours detected: 3 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: Eth Contours detected: 3 Expected: 2 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: agrave Contours detected: 4 Expected: 3 Glyph name: aacute Contours detected: 4 Expected: 3 Glyph name: acircumflex Contours detected: 4 Expected: 3 Glyph name: atilde Contours detected: 4 Expected: 3 Glyph name: adieresis Contours detected: 5 Expected: 4 Glyph name: aring Contours detected: 5 Expected: 4 Glyph name: ae Contours detected: 4 Expected: 3 Glyph name: amacron Contours detected: 4 Expected: 3 Glyph name: abreve Contours detected: 4 Expected: 3 Glyph name: aogonek Contours detected: 4 Expected: 2 Glyph name: Dcroat Contours detected: 3 Expected: 2 Glyph name: eogonek Contours detected: 3 Expected: 2 Glyph name: Lslash Contours detected: 2 Expected: 1 Glyph name: lslash Contours detected: 2 Expected: 1 Glyph name: Tbar Contours detected: 2 Expected: 1 Glyph name: Uogonek Contours detected: 2 Expected: 1 Glyph name: uogonek Contours detected: 2 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: ohorn Contours detected: 3 Expected: 2 Glyph name: uhorn Contours detected: 2 Expected: 1 Glyph name: uni01EA Contours detected: 3 Expected: 2 Glyph name: uni01EB Contours detected: 3 Expected: 2 Glyph name: aringacute Contours detected: 6 Expected: 4 or 5 Glyph name: aeacute Contours detected: 5 Expected: 4 Glyph name: uni0201 Contours detected: 5 Expected: 4 Glyph name: uni0203 Contours detected: 4 Expected: 3 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni1EA1 Contours detected: 4 Expected: 3 Glyph name: uni1EA3 Contours detected: 4 Expected: 3 Glyph name: uni1EA5 Contours detected: 5 Expected: 4 Glyph name: uni1EA7 Contours detected: 5 Expected: 4 Glyph name: uni1EA9 Contours detected: 5 Expected: 4 Glyph name: uni1EAB Contours detected: 5 Expected: 4 Glyph name: uni1EAD Contours detected: 5 Expected: 4 Glyph name: uni1EAF Contours detected: 5 Expected: 4 Glyph name: uni1EB1 Contours detected: 5 Expected: 4 Glyph name: uni1EB3 Contours detected: 5 Expected: 4 Glyph name: uni1EB5 Contours detected: 5 Expected: 4 Glyph name: uni1EB7 Contours detected: 5 Expected: 4 Glyph name: uni1EDB Contours detected: 4 Expected: 3 Glyph name: uni1EDD Contours detected: 4 Expected: 3 Glyph name: uni1EDF Contours detected: 4 Expected: 3 Glyph name: uni1EE1 Contours detected: 4 Expected: 3 Glyph name: uni1EE3 Contours detected: 4 Expected: 3 Glyph name: uni1EE9 Contours detected: 3 Expected: 2 Glyph name: uni1EEB Contours detected: 3 Expected: 2 Glyph name: uni1EED Contours detected: 3 Expected: 2 Glyph name: uni1EEF Contours detected: 3 Expected: 2 Glyph name: uni1EF1 Contours detected: 3 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: colonmonetary Contours detected: 0 Expected: 1 or 3 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20A9 Contours detected: 0 Expected: 1, 3, 4 or 7 Glyph name: Euro Contours detected: 0 Expected: 1 or 2 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20B1 Contours detected: 0 Expected: 1, 2 or 4 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: Dcroat Contours detected: 3 Expected: 2 Glyph name: Eth Contours detected: 3 Expected: 2 Glyph name: Euro Contours detected: 0 Expected: 1 or 2 Glyph name: Lslash Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: Tbar Contours detected: 2 Expected: 1 Glyph name: Uogonek Contours detected: 2 Expected: 1 Glyph name: a Contours detected: 3 Expected: 2 Glyph name: aacute Contours detected: 4 Expected: 3 Glyph name: abreve Contours detected: 4 Expected: 3 Glyph name: acircumflex Contours detected: 4 Expected: 3 Glyph name: adieresis Contours detected: 5 Expected: 4 Glyph name: ae Contours detected: 4 Expected: 3 Glyph name: aeacute Contours detected: 5 Expected: 4 Glyph name: agrave Contours detected: 4 Expected: 3 Glyph name: amacron Contours detected: 4 Expected: 3 Glyph name: aogonek Contours detected: 4 Expected: 2 Glyph name: aring Contours detected: 5 Expected: 4 Glyph name: aringacute Contours detected: 6 Expected: 4 or 5 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: atilde Contours detected: 4 Expected: 3 Glyph name: colonmonetary Contours detected: 0 Expected: 1 or 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: eogonek Contours detected: 3 Expected: 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: lslash Contours detected: 2 Expected: 1 Glyph name: ohorn Contours detected: 3 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uhorn Contours detected: 2 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni1EA1 Contours detected: 4 Expected: 3 Glyph name: uni1EA3 Contours detected: 4 Expected: 3 Glyph name: uni1EA5 Contours detected: 5 Expected: 4 Glyph name: uni1EA7 Contours detected: 5 Expected: 4 Glyph name: uni1EA9 Contours detected: 5 Expected: 4 Glyph name: uni1EAB Contours detected: 5 Expected: 4 Glyph name: uni1EAD Contours detected: 5 Expected: 4 Glyph name: uni1EAF Contours detected: 5 Expected: 4 Glyph name: uni1EB1 Contours detected: 5 Expected: 4 Glyph name: uni1EB3 Contours detected: 5 Expected: 4 Glyph name: uni1EB5 Contours detected: 5 Expected: 4 Glyph name: uni1EB7 Contours detected: 5 Expected: 4 Glyph name: uni1EDB Contours detected: 4 Expected: 3 Glyph name: uni1EDD Contours detected: 4 Expected: 3 Glyph name: uni1EDF Contours detected: 4 Expected: 3 Glyph name: uni1EE1 Contours detected: 4 Expected: 3 Glyph name: uni1EE3 Contours detected: 4 Expected: 3 Glyph name: uni1EE9 Contours detected: 3 Expected: 2 Glyph name: uni1EEB Contours detected: 3 Expected: 2 Glyph name: uni1EED Contours detected: 3 Expected: 2 Glyph name: uni1EEF Contours detected: 3 Expected: 2 Glyph name: uni1EF1 Contours detected: 3 Expected: 2 Glyph name: uni20A9 Contours detected: 0 Expected: 1, 3, 4 or 7 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20B1 Contours detected: 0 Expected: 1, 2 or 4 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uogonek Contours detected: 2 Expected: 1 [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** This font lacks caret position values for ligature glyphs on its GDEF table. [code: lacks-caret-pos]β WARN: Is there kerning info for non-ligated sequences?
* [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) * β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]β WARN: Combined length of family and style must not exceed 27 characters.
* [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) * β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 144pt SemiBold' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]β WARN: Are there any misaligned on-curve points?
* [com.google.fonts/check/outline_alignment_miss](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/β WARN: Are any segments inordinately short?
* [com.google.fonts/check/outline_short_segments](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/β WARN: Do outlines contain any jaggy segments?
* [com.google.fonts/check/outline_jaggy_segments](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/β WARN: 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/[11] MontaguSlab144pt-Thin.ttf
π₯ FAIL: 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) * π₯ **FAIL** In this font fsType is set to 8 meaning that: The font may be embedded but must only be installed temporarily on other systems. No such DRM restrictions can be enabled on the Google Fonts collection, so the fsType field must be set to zero (Installable Embedding) instead. [code: drm]π₯ FAIL: 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) * π₯ **FAIL** Missing required codepoints: 0x0026 (AMPERSAND), 0x002B (PLUS SIGN), 0x003C (LESS-THAN SIGN), 0x003D (EQUALS SIGN) and 23 more. [code: missing-codepoints]π₯ FAIL: 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) * π₯ **FAIL** Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" But instead we have got: "Copyright 2020 FKxGF Schoolbook Project Authors (https://github.com/floriankarsten/fk-gf-schoolbook)" [code: bad-notice-format]π₯ FAIL: 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) * π₯ **FAIL** OS/2.usWinAscent value should be equal or greater than 2466, but got 1800 instead [code: ascent] * π₯ **FAIL** OS/2.usWinDescent value should be equal or greater than 688, but got 600 instead. [code: descent]π₯ FAIL: 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) * π₯ **FAIL** The following glyphs have components which themselves are component glyphs: * uni1EB2 * uni1EB4 * uni1EA8 * uni1EAA * uni01C4 * uni01C5 * uni1EC2 * uni1EC4 * uni01C8 * uni01CB and 33 more. [code: found-nested-components]β 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: two Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: Eth Contours detected: 3 Expected: 2 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: aogonek Contours detected: 3 Expected: 2 Glyph name: Dcroat Contours detected: 3 Expected: 2 Glyph name: eogonek Contours detected: 3 Expected: 2 Glyph name: Lslash Contours detected: 2 Expected: 1 Glyph name: lslash Contours detected: 2 Expected: 1 Glyph name: Tbar Contours detected: 2 Expected: 1 Glyph name: Uogonek Contours detected: 2 Expected: 1 Glyph name: uogonek Contours detected: 2 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: ohorn Contours detected: 3 Expected: 2 Glyph name: uhorn Contours detected: 2 Expected: 1 Glyph name: uni01EA Contours detected: 3 Expected: 2 Glyph name: uni01EB Contours detected: 3 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni1EDB Contours detected: 4 Expected: 3 Glyph name: uni1EDD Contours detected: 4 Expected: 3 Glyph name: uni1EDF Contours detected: 4 Expected: 3 Glyph name: uni1EE1 Contours detected: 4 Expected: 3 Glyph name: uni1EE3 Contours detected: 4 Expected: 3 Glyph name: uni1EE9 Contours detected: 3 Expected: 2 Glyph name: uni1EEB Contours detected: 3 Expected: 2 Glyph name: uni1EED Contours detected: 3 Expected: 2 Glyph name: uni1EEF Contours detected: 3 Expected: 2 Glyph name: uni1EF1 Contours detected: 3 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: colonmonetary Contours detected: 0 Expected: 1 or 3 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: uni20A9 Contours detected: 0 Expected: 1, 3, 4 or 7 Glyph name: Euro Contours detected: 0 Expected: 1 or 2 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20B1 Contours detected: 0 Expected: 1, 2 or 4 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: Dcroat Contours detected: 3 Expected: 2 Glyph name: Eth Contours detected: 3 Expected: 2 Glyph name: Euro Contours detected: 0 Expected: 1 or 2 Glyph name: Lslash Contours detected: 2 Expected: 1 Glyph name: Q Contours detected: 3 Expected: 2 Glyph name: Tbar Contours detected: 2 Expected: 1 Glyph name: Uogonek Contours detected: 2 Expected: 1 Glyph name: aogonek Contours detected: 3 Expected: 2 Glyph name: asciicircum Contours detected: 0 Expected: 1 Glyph name: colonmonetary Contours detected: 0 Expected: 1 or 3 Glyph name: currency Contours detected: 0 Expected: 2 Glyph name: dagger Contours detected: 0 Expected: 1 or 2 Glyph name: daggerdbl Contours detected: 0 Expected: 1 or 3 Glyph name: eogonek Contours detected: 3 Expected: 2 Glyph name: fi Contours detected: 1 Expected: 3 Glyph name: germandbls Contours detected: 0 Expected: 1 Glyph name: lira Contours detected: 0 Expected: 1 Glyph name: lslash Contours detected: 2 Expected: 1 Glyph name: ohorn Contours detected: 3 Expected: 2 Glyph name: sterling Contours detected: 0 Expected: 1 or 2 Glyph name: two Contours detected: 2 Expected: 1 Glyph name: uhorn Contours detected: 2 Expected: 1 Glyph name: uni018F Contours detected: 0 Expected: 2 Glyph name: uni1E9E Contours detected: 0 Expected: 1 Glyph name: uni1EDB Contours detected: 4 Expected: 3 Glyph name: uni1EDD Contours detected: 4 Expected: 3 Glyph name: uni1EDF Contours detected: 4 Expected: 3 Glyph name: uni1EE1 Contours detected: 4 Expected: 3 Glyph name: uni1EE3 Contours detected: 4 Expected: 3 Glyph name: uni1EE9 Contours detected: 3 Expected: 2 Glyph name: uni1EEB Contours detected: 3 Expected: 2 Glyph name: uni1EED Contours detected: 3 Expected: 2 Glyph name: uni1EEF Contours detected: 3 Expected: 2 Glyph name: uni1EF1 Contours detected: 3 Expected: 2 Glyph name: uni20A9 Contours detected: 0 Expected: 1, 3, 4 or 7 Glyph name: uni20AD Contours detected: 0 Expected: 1 Glyph name: uni20B1 Contours detected: 0 Expected: 1, 2 or 4 Glyph name: uni20BA Contours detected: 0 Expected: 1 Glyph name: uni20BC Contours detected: 0 Expected: 1 Glyph name: uogonek Contours detected: 2 Expected: 1 [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** This font lacks caret position values for ligature glyphs on its GDEF table. [code: lacks-caret-pos]β WARN: Is there kerning info for non-ligated sequences?
* [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) * β **WARN** GPOS table lacks kerning info for the following non-ligated sequences: - f + f - f + i - i + f - f + l - l + f - i + l [code: lacks-kern-info]β WARN: Combined length of family and style must not exceed 27 characters.
* [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) * β **WARN** The combined length of family and style exceeds 27 chars in the following 'WINDOWS' entries: FONT_FAMILY_NAME = 'Montagu Slab 144pt Thin' / SUBFAMILY_NAME = 'Regular' Please take a look at the conversation at https://github.com/googlefonts/fontbakery/issues/2179 in order to understand the reasoning behind these name table records max-length criteria. [code: too-long]β WARN: Are there any misaligned on-curve points?
* [com.google.fonts/check/outline_alignment_miss](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/β WARN: Do outlines contain any jaggy segments?
* [com.google.fonts/check/outline_jaggy_segments](https://font-bakery.readthedocs.io/en/latest/fontbakery/profiles/Summary
Note: The following loglevels were omitted in this report: