If you think a check is flawed or have an idea for a check, please file an issue at https://github.com/fonttools/fontspector/issues and remember to include a pointer to the repo and branch you're checking.
Summary
| 🔥 FAIL | ⚠️ WARN | ℹ️ INFO | ✅ PASS | ⏩ SKIP |
|---|---|---|---|---|
| 3 | 21 | 9 | 98 | 79 |
| 1% | 10% | 4% | 47% | 38% |
Meaning of check results:
- 💥 An ERROR is something wrong with Fontspector itself, possibly a bug.
- ☠ A FATAL is an extremely severe issue that must be addressed immediately.
- 🔥 A FAIL is a problem with the font that must be fixed.
- ⚠️ A WARN is something that you should consider addressing.
- ℹ️ An INFO result simply prints something useful. Typically stats.
- ✅ A PASS means the font looks good for the given checking routine.
- ⏩ And a SKIP happens when the check does not apply to the given font.
If you get ERRORs, please help us improve the tool by reporting them at our issue tracker.
(but other kinds of bug reports and/or feature requests are also always welcome, of course!)
Fontspector version: 1.8.0
Opentype Specification Checks
Ensure Fonts have 'ital' STAT axis.
⚠️ ttf
-
⚠️ WARN
Static font is missing the 'STAT' table.
[code: no-stat-table]
Check mark characters are in GDEF mark glyph class.
⚠️ NotoSansKaithi-Regular.ttf
-
⚠️ WARN
The following mark characters should be in the GDEF mark glyph class:
- U+110B3 (ktVSU)
- U+110B4 (ktVSUU)
- U+110B5 (ktVSE)
- U+110B6 (ktVSAI)
- U+110B9 (ktVirama)
- U+110BA (ktNukta)
- U+110C2 (ktVSR)
Universal Profile Checks
Check accent of Lcaron, dcaron, lcaron, tcaron
⚠️ NotoSansKaithi-Regular.ttf
-
⚠️ WARN
Lcaron is decomposed and therefore could not be checked. Please check manually.
[code: decomposed-outline] -
⚠️ WARN
dcaron is decomposed and therefore could not be checked. Please check manually.
[code: decomposed-outline] -
⚠️ WARN
lcaron is decomposed and therefore could not be checked. Please check manually.
[code: decomposed-outline] -
⚠️ WARN
tcaron is decomposed and therefore could not be checked. Please check manually.
[code: decomposed-outline]
Check base characters have non-zero advance width.
🔥 NotoSansKaithi-Regular.ttf
-
🔥 FAIL
The following glyphs had zero advance width:
- ktVSCBindu (Some(11080))
- ktVSAnusvara (Some(11081))
Check if each glyph has the recommended amount of contours.
⚠️ NotoSansKaithi-Regular.ttf
-
⚠️ WARN
This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are inferred from the typical amounts 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:- ktTwo (U+0968): found 2, expected one of: [1]
Ensure indic fonts have the Indian Rupee Sign glyph.
⚠️ NotoSansKaithi-Regular.ttf
-
⚠️ WARN
Font is missing the Indian Rupee Sign glyph. Please add a glyph for Indian Rupee Sign (₹) at codepoint U+20B9.
[code: missing-rupee]
Ensure Stylistic Sets have description.
⚠️ NotoSansKaithi-Regular.ttf
-
⚠️ WARN
The stylistic set ss01 lacks a description string in the name table
[code: missing-description] -
⚠️ WARN
The stylistic set ss02 lacks a description string in the name table
[code: missing-description] -
⚠️ WARN
The stylistic set ss03 lacks a description string in the name table
[code: missing-description]
Metadata Checks
Check for codepoints not covered by METADATA subsets.
⚠️ ttf
-
⚠️ WARN
fonts/NotoSansKaithi/googlefonts/ttf/NotoSansKaithi-Regular.ttf: The following codepoints supported by the font are not covered by any subsets defined in the font's metadata file, and will never be served. You can solve this by either manually adding additional subset declarations to METADATA.pb, or by editing the glyphset definitions.
- U+02D8 BREVE: try adding one of: canadian-aboriginal, yi
- U+02D9 DOT ABOVE: try adding one of: canadian-aboriginal, yi
- U+02DB OGONEK: try adding one of: yi, canadian-aboriginal
- U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: cherokee, math, coptic, tifinagh
- U+0306 COMBINING BREVE: try adding one of: old-permic, tifinagh
- U+0307 COMBINING DOT ABOVE: try adding one of: coptic, canadian-aboriginal, tai-le, math, tifinagh, todhri, duployan, syriac, hebrew, malayalam, old-permic
- U+030A COMBINING RING ABOVE: try adding one of: syriac, duployan
- U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: cherokee, osage
- U+030C COMBINING CARON: try adding one of: cherokee, tai-le
- U+0326 COMBINING COMMA BELOW: try adding math
- U+0327 COMBINING CEDILLA: try adding math
- U+07DA NKO LETTER RRA: try adding nko
- U+2B48 RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO: try adding math
- U+2B49 TILDE OPERATOR ABOVE LEFTWARDS ARROW: try adding math
- U+2B4A LEFTWARDS ARROW ABOVE ALMOST EQUAL TO: try adding math
- U+2B4B LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR: try adding math
- U+2B4C RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR: try adding math
- U+2B4D DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW: try adding symbols
- U+2B4E SHORT SLANTED NORTH ARROW: try adding symbols
- U+2B4F SHORT BACKSLANTED SOUTH ARROW: try adding symbols
- U+2B50 WHITE MEDIUM STAR: try adding symbols
- U+2B51 BLACK SMALL STAR: try adding symbols
- U+2B52 WHITE SMALL STAR: try adding symbols
- U+2B53 BLACK RIGHT-POINTING PENTAGON: try adding symbols
- U+2B54 WHITE RIGHT-POINTING PENTAGON: try adding symbols
- U+2B55 HEAVY LARGE CIRCLE: try adding symbols
- U+2B56 HEAVY OVAL WITH OVAL INSIDE: try adding symbols
- U+2B57 HEAVY CIRCLE WITH CIRCLE INSIDE: try adding symbols
- U+2B58 HEAVY CIRCLE: try adding symbols
- U+2B59 HEAVY CIRCLED SALTIRE: try adding symbols
- U+2B5A SLANTED NORTH ARROW WITH HOOKED HEAD: try adding symbols
- U+2B5B BACKSLANTED SOUTH ARROW WITH HOOKED TAIL: try adding symbols
Or you can add the above codepoints to one of the subsets supported by the font: kaithi, latin-ext, latin
[code: unreachable-subsetting]
Glyphset Checks
Shapes languages in all GF glyphsets.
⚠️ NotoSansKaithi-Regular.ttf
-
⚠️ WARN
Warning language shaping:
[code: warning-language-shaping]Message Languages Auxiliary orthography codepoints: * en_Latn (English) The following auxiliary characters are missing from the font: Ĕ The following auxiliary characters are missing from the font: Ĭ The following auxiliary characters are missing from the font: Ŏ The following auxiliary characters are missing from the font: Ō The following auxiliary characters are missing from the font: Ŭ The following auxiliary characters are missing from the font: ĕ The following auxiliary characters are missing from the font: ĭ The following auxiliary characters are missing from the font: ŏ The following auxiliary characters are missing from the font: ō The following auxiliary characters are missing from the font: ŭ The following auxiliary characters are missing from the font: ʻ Auxiliary orthography codepoints: * fr_Latn (French) The following auxiliary characters are missing from the font: Ǔ The following auxiliary characters are missing from the font: ſ The following auxiliary characters are missing from the font: ǔ Auxiliary orthography codepoints: * ca_Latn (Catalan) The following auxiliary characters are missing from the font: Ĕ The following auxiliary characters are missing from the font: Ĭ The following auxiliary characters are missing from the font: Ŀ The following auxiliary characters are missing from the font: Ŏ The following auxiliary characters are missing from the font: Ō The following auxiliary characters are missing from the font: Ŭ The following auxiliary characters are missing from the font: ĕ The following auxiliary characters are missing from the font: ĭ The following auxiliary characters are missing from the font: ŀ The following auxiliary characters are missing from the font: ŏ The following auxiliary characters are missing from the font: ō The following auxiliary characters are missing from the font: ŭ Auxiliary orthography codepoints: * nb_Latn (Norwegian Bokmål) The following auxiliary characters are missing from the font: Ǎ The following auxiliary characters are missing from the font: Ŋ The following auxiliary characters are missing from the font: Ŧ The following auxiliary characters are missing from the font: ǎ The following auxiliary characters are missing from the font: ŋ The following auxiliary characters are missing from the font: ŧ Auxiliary orthography codepoints: * lv_Latn (Latvian) The following auxiliary characters are missing from the font: Ō The following auxiliary characters are missing from the font: Ŗ The following auxiliary characters are missing from the font: ō The following auxiliary characters are missing from the font: ŗ Auxiliary orthography codepoints: * lt_Latn (Lithuanian) The following auxiliary characters are missing from the font: Ẽ The following auxiliary characters are missing from the font: Ĩ The following auxiliary characters are missing from the font: Ũ The following auxiliary characters are missing from the font: ẽ The following auxiliary characters are missing from the font: ĩ The following auxiliary characters are missing from the font: ũ Auxiliary orthography codepoints: * cs_Latn (Czech) The following auxiliary characters are missing from the font: Ĕ * cy_Latn (Welsh) The following auxiliary characters are missing from the font: Ĭ * es_Latn (Spanish) The following auxiliary characters are missing from the font: Ŏ * hu_Latn (Hungarian) The following auxiliary characters are missing from the font: Ō * pt_Latn (Portuguese) The following auxiliary characters are missing from the font: Ŭ * sk_Latn (Slovak) The following auxiliary characters are missing from the font: ĕ * tr_Latn (Turkish) The following auxiliary characters are missing from the font: ĭ The following auxiliary characters are missing from the font: ŏ The following auxiliary characters are missing from the font: ō The following auxiliary characters are missing from the font: ŭ Auxiliary orthography codepoints: * fi_Latn (Finnish) The following auxiliary characters are missing from the font: Ǧ The following auxiliary characters are missing from the font: Ǥ The following auxiliary characters are missing from the font: Ȟ The following auxiliary characters are missing from the font: Ǩ The following auxiliary characters are missing from the font: Ŋ The following auxiliary characters are missing from the font: Ŝ The following auxiliary characters are missing from the font: Ţ The following auxiliary characters are missing from the font: Ŧ The following auxiliary characters are missing from the font: Ʒ The following auxiliary characters are missing from the font: Ǯ The following auxiliary characters are missing from the font: ǧ The following auxiliary characters are missing from the font: ǥ The following auxiliary characters are missing from the font: ȟ The following auxiliary characters are missing from the font: ǩ The following auxiliary characters are missing from the font: ŋ The following auxiliary characters are missing from the font: ŝ The following auxiliary characters are missing from the font: ţ The following auxiliary characters are missing from the font: ŧ The following auxiliary characters are missing from the font: ʒ The following auxiliary characters are missing from the font: ǯ Auxiliary orthography codepoints: * de_Latn (German) The following auxiliary characters are missing from the font: Ĕ The following auxiliary characters are missing from the font: Ĭ The following auxiliary characters are missing from the font: Ŏ The following auxiliary characters are missing from the font: Ō The following auxiliary characters are missing from the font: Ŭ The following auxiliary characters are missing from the font: ĕ The following auxiliary characters are missing from the font: ĭ The following auxiliary characters are missing from the font: ŏ The following auxiliary characters are missing from the font: ō The following auxiliary characters are missing from the font: ſ The following auxiliary characters are missing from the font: ŭ Auxiliary orthography codepoints: * da_Latn (Danish) The following auxiliary characters are missing from the font: Ǿ The following auxiliary characters are missing from the font: ǿ Auxiliary orthography codepoints: * nl_Latn (Dutch) The following auxiliary characters are missing from the font: IJ The following auxiliary characters are missing from the font: ij Auxiliary orthography codepoints: * ro_Latn (Romanian) The following auxiliary characters are missing from the font: Ţ The following auxiliary characters are missing from the font: ţ
Font has correct separator glyphs?
⚠️ NotoSansKaithi-Regular.ttf
-
⚠️ WARN
Missing separator glyph U+2028
[code: missing-separator-glyphs] -
⚠️ WARN
Missing separator glyph U+2029
[code: missing-separator-glyphs]
Repository Checks
Directory name in GFonts repo structure must match NameID 1 of the regular.
🔥 NotoSansKaithi-Regular.ttf
-
🔥 FAIL
Family name on the name table ('Noto Sans Kaithi') does not match directory name in the repo structure ('ttf'). Expected 'notosanskaithi'.
[code: mismatch]
Font File Checks
Ensure fonts have ScriptLangTags declared on the 'meta' table.
⚠️ NotoSansKaithi-Regular.ttf
-
⚠️ WARN
This font file does not have a 'meta' table.
[code: lacks-meta-table]
Version number has increased since previous release on Google Fonts?
🔥 NotoSansKaithi-Regular.ttf
-
🔥 FAIL
Version number 2.0059967 is equal to version on Google fonts
[code: same-version]
Shaping Checks
Ensure soft_dotted characters lose their dot when combined with marks that replace the dot.
⚠️ NotoSansKaithi-Regular.ttf
-
⚠️ WARN
The dot of soft dotted characters used in orthographies must disappear in the following strings:
-
į̄
-
į́
-
į̃
-
į̂
-
į̀
-
į̌The dot of soft dotted characters should disappear in other cases, for example:
-
į̈
-
į̋
-
į̊
-
į̆
-
į̇
-
Outline Checks
Do any segments have colinear vectors?
⚠️ NotoSansKaithi-Regular.ttf
-
⚠️ WARN
The following glyphs have colinear vectors:
- ktGRU.alt1: from (179.0, 53.0) to (444.0, 211.0) is colinear with segment from (444.0, 211.0) to (471.0, 229.0)
- ktGRU.alt1: from (471.0, 156.0) to (444.0, 136.0) is colinear with segment from (444.0, 136.0) to (219.0, -10.0)
- ktKMU.var.alt1: from (984.0, 83.0) to (984.0, 93.0) is colinear with segment from (984.0, 93.0) to (984.0, 171.0)
- ktKMU.var.alt1: from (984.0, 93.0) to (984.0, 171.0) is colinear with segment from (984.0, 171.0) to (984.0, 189.0)
Check the direction of the outermost contour in each glyph
⚠️ NotoSansKaithi-Regular.ttf
-
⚠️ WARN
The following glyphs have a counter-clockwise outer contour:
- ktI (U+2B4D) has a path with no bounds (probably a single point)
- ktII (U+2B4E) has a path with no bounds (probably a single point)
- ktU (U+2B4F) has a path with no bounds (probably a single point)
- ktKRU.alt1 has a path with no bounds (probably a single point)
Do outlines contain any jaggy segments?
⚠️ NotoSansKaithi-Regular.ttf
-
⚠️ WARN
The following glyphs have jaggy segments:
- ktA (U+2B4B): Line(Line { p0: (217.0, 285.0), p1: (145.0, 274.0) })/Quad(QuadBez { p0: (145.0, 274.0), p1: (176.0, 283.0), p2: (209.5, 308.0) }) = 7.502851675790274 degrees
- ktAA (U+2B4C): Line(Line { p0: (217.0, 285.0), p1: (145.0, 274.0) })/Quad(QuadBez { p0: (145.0, 274.0), p1: (176.0, 283.0), p2: (209.5, 308.0) }) = 7.502851675790274 degrees
- ktO (U+1108B): Line(Line { p0: (217.0, 285.0), p1: (145.0, 274.0) })/Quad(QuadBez { p0: (145.0, 274.0), p1: (176.0, 283.0), p2: (209.5, 308.0) }) = 7.502851675790274 degrees
- ktAU (U+1108C): Line(Line { p0: (217.0, 285.0), p1: (145.0, 274.0) })/Quad(QuadBez { p0: (145.0, 274.0), p1: (176.0, 283.0), p2: (209.5, 308.0) }) = 7.502851675790274 degrees
- ktJHUU: Quad(QuadBez { p0: (165.5, 209.0), p1: (167.0, 218.0), p2: (168.0, 219.0) })/Quad(QuadBez { p0: (168.0, 219.0), p1: (150.0, 203.0), p2: (131.0, 175.0) }) = 3.36646066342994 degrees
Check there are no overlapping path segments
⚠️ NotoSansKaithi-Regular.ttf
-
⚠️ WARN
The following glyphs have overlapping path segments:
- ktKTHU.var.alt1: Quad(QuadBez { p0: (409.0, 196.0), p1: (409.0, 231.0), p2: (397.0, 255.5) }) has the same coordinates as a previous segment.
- ktKTHU.var.alt1: Quad(QuadBez { p0: (397.0, 255.5), p1: (385.0, 280.0), p2: (371.0, 295.0) }) has the same coordinates as a previous segment.
- ktKTHU.var.alt1: Line(Line { p0: (371.0, 295.0), p1: (430.0, 366.0) }) has the same coordinates as a previous segment.
- ktKTHU.var.alt1: Quad(QuadBez { p0: (430.0, 366.0), p1: (454.0, 343.0), p2: (472.0, 305.0) }) has the same coordinates as a previous segment.
- ktKTHU.var.alt1: Quad(QuadBez { p0: (472.0, 305.0), p1: (490.0, 267.0), p2: (490.0, 211.0) }) has the same coordinates as a previous segment.
- ktKTHU.var.alt1: Quad(QuadBez { p0: (490.0, 211.0), p1: (490.0, 144.0), p2: (462.5, 91.5) }) has the same coordinates as a previous segment.
- ktKTHU.var.alt1: Quad(QuadBez { p0: (462.5, 91.5), p1: (435.0, 39.0), p2: (385.0, 9.0) }) has the same coordinates as a previous segment.
- ktKTHU.var.alt1: Quad(QuadBez { p0: (385.0, 9.0), p1: (335.0, -21.0), p2: (269.0, -21.0) }) has the same coordinates as a previous segment.
- ktKTHU.var.alt1: Quad(QuadBez { p0: (269.0, -21.0), p1: (216.0, -21.0), p2: (165.5, -1.5) }) has the same coordinates as a previous segment.
- ktKTHU.var.alt1: Quad(QuadBez { p0: (165.5, -1.5), p1: (115.0, 18.0), p2: (70.0, 51.5) }) has the same coordinates as a previous segment.
- ktKTHU.var.alt1: Quad(QuadBez { p0: (70.0, 51.5), p1: (25.0, 85.0), p2: (-10.0, 126.0) }) has the same coordinates as a previous segment.
- ktKTHU.var.alt1: Line(Line { p0: (-10.0, 126.0), p1: (31.0, 180.0) }) has the same coordinates as a previous segment.
- ktKTHU.var.alt1: Quad(QuadBez { p0: (31.0, 180.0), p1: (79.0, 120.0), p2: (141.5, 84.5) }) has the same coordinates as a previous segment.
- ktKTHU.var.alt1: Quad(QuadBez { p0: (141.5, 84.5), p1: (204.0, 49.0), p2: (263.0, 49.0) }) has the same coordinates as a previous segment.
- ktKTHU.var.alt1: Quad(QuadBez { p0: (263.0, 49.0), p1: (305.0, 49.0), p2: (338.0, 68.5) }) has the same coordinates as a previous segment.
- ktKTHU.var.alt1: Quad(QuadBez { p0: (338.0, 68.5), p1: (371.0, 88.0), p2: (390.0, 121.5) }) has the same coordinates as a previous segment.
- ktKTHU.var.alt1: Quad(QuadBez { p0: (390.0, 121.5), p1: (409.0, 155.0), p2: (409.0, 196.0) }) has the same coordinates as a previous segment.
- ktKTHU.var.alt1: Quad(QuadBez { p0: (250.0, 198.0), p1: (190.0, 198.0), p2: (144.0, 221.0) }) has the same coordinates as a previous segment.
- ktKTHU.var.alt1: Quad(QuadBez { p0: (144.0, 221.0), p1: (98.0, 244.0), p2: (72.0, 287.0) }) has the same coordinates as a previous segment.
- ktKTHU.var.alt1: Quad(QuadBez { p0: (72.0, 287.0), p1: (46.0, 330.0), p2: (46.0, 388.0) }) has the same coordinates as a previous segment.
- ktKTHU.var.alt1: Line(Line { p0: (46.0, 388.0), p1: (46.0, 622.0) }) has the same coordinates as a previous segment.
- ktKTHU.var.alt1: Line(Line { p0: (46.0, 622.0), p1: (126.0, 622.0) }) has the same coordinates as a previous segment.
- ktKTHU.var.alt1: Line(Line { p0: (126.0, 622.0), p1: (126.0, 369.0) }) has the same coordinates as a previous segment.
- ktKTHU.var.alt1: Quad(QuadBez { p0: (126.0, 369.0), p1: (126.0, 318.0), p2: (161.5, 293.0) }) has the same coordinates as a previous segment.
- ktKTHU.var.alt1: Quad(QuadBez { p0: (161.5, 293.0), p1: (197.0, 268.0), p2: (241.0, 268.0) }) has the same coordinates as a previous segment.
- ktKTHU.var.alt1: Quad(QuadBez { p0: (241.0, 268.0), p1: (312.0, 268.0), p2: (351.5, 300.0) }) has the same coordinates as a previous segment.
- ktKTHU.var.alt1: Quad(QuadBez { p0: (351.5, 300.0), p1: (391.0, 332.0), p2: (391.0, 399.0) }) has the same coordinates as a previous segment.
- ktKTHU.var.alt1: Line(Line { p0: (391.0, 399.0), p1: (391.0, 622.0) }) has the same coordinates as a previous segment.
- ktKTHU.var.alt1: Line(Line { p0: (391.0, 622.0), p1: (472.0, 622.0) }) has the same coordinates as a previous segment.
- ktKTHU.var.alt1: Line(Line { p0: (472.0, 622.0), p1: (472.0, 421.0) }) has the same coordinates as a previous segment.
- ktKTHU.var.alt1: Quad(QuadBez { p0: (472.0, 421.0), p1: (472.0, 311.0), p2: (410.5, 254.5) }) has the same coordinates as a previous segment.
- ktKTHU.var.alt1: Quad(QuadBez { p0: (410.5, 254.5), p1: (349.0, 198.0), p2: (250.0, 198.0) }) has the same coordinates as a previous segment.