googlefonts / staatliches

Herbert Bayer’s title lettering for the first Bauhaus exhibition catalogue cover of 1923
SIL Open Font License 1.1
17 stars 6 forks source link

FontBakery Report -- Check 037: Failing Microsoft Font Validator #7

Open eliheuer opened 6 years ago

eliheuer commented 6 years ago

Fontbakery report

[1] Staatliches-Regular.ttf
:fire: FAIL: Checking with Microsoft Font Validator. * [com.google.fonts/check/037](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/037) * :fire: **FAIL** MS-FonVal: Intersecting contours DETAILS: Glyph index 274 * :information_source: **INFO** Microsoft Font Validator returned an error code. Output follows : fonts/Staatliches-Regular.ttf (file 1 of 1) Table Test: DSIG Table Test: GDEF Table Test: GPOS Table Test: GSUB Table Test: OS/2 Table Test: cmap Table Test: cvt Table Test: fpgm Table Test: gasp Table Test: glyf Progress: Validating glyph with index 0 (out of 424 glyphs) Progress: Validating glyph with index 100 (out of 424 glyphs) Progress: Validating glyph with index 200 (out of 424 glyphs) Progress: Validating glyph with index 300 (out of 424 glyphs) Progress: Validating glyph with index 400 (out of 424 glyphs) Table Test: head Table Test: hhea Table Test: hmtx Table Test: loca Table Test: maxp Table Test: name Table Test: post Table Test: prep Complete: fonts/Staatliches-Regular.ttf.report.xml Reports are ready! * :information_source: **INFO** MS-FonVal: The file begins with an Offset Table (file contains a single font) * :information_source: **INFO** MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 'Latin Extended-B', 13 characters are present * :information_source: **INFO** MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 'Spacing Modifier Letters', 8 characters are present * :information_source: **INFO** MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 'Combining Diacritical Marks', 15 characters are present * :information_source: **INFO** MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 'Greek', 2 characters are present * :information_source: **INFO** MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 'Latin Extended Additional', 8 characters are present * :information_source: **INFO** MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 'General Punctuation', 16 characters are present * :information_source: **INFO** MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 'Superscripts and Subscripts', 1 characters are present * :information_source: **INFO** MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 'Currency Symbols', 1 characters are present * :information_source: **INFO** MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 'Letterlike Symbols', 1 characters are present * :information_source: **INFO** MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 9 characters are present in the ranges: Mathematical Operators, Supplemental Mathematical Operators, Mathematical Symbols A, Mathematical Symbols B * :information_source: **INFO** MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 'Geometric Shapes', 1 characters are present * :information_source: **INFO** MS-FonVal: Characters in a unicode range are present in the font, but not indicated in ulUnicodeRange fields DETAILS: 'Alphabetic Presentation Forms', 2 characters are present * :information_source: **INFO** MS-FonVal: Validation for the fpgm table is not directly implemented, but rasterization testing will validate any executed hinting instructions * :information_source: **INFO** MS-FonVal: Unable to perform test due to previously detected errors DETAILS: Glyph index 274 Test: ValidateSimpContMisor * :information_source: **INFO** MS-FonVal: Loca references a zero-length entry in the glyf table DETAILS: Number of glyphs that are empty = 4 * :information_source: **INFO** MS-FonVal: No string for Typographic Family name (Name ID 16) * :information_source: **INFO** MS-FonVal: No string for Typographic Subfamily name (Name ID 17) * :information_source: **INFO** MS-FonVal: Validation for the prep table is not directly implemented, but rasterization testing will validate any executed hinting instructions * :information_source: **INFO** MS-FonVal: Rasterization not selected for validation * :information_source: **INFO** MS-FonVal: Total time validating file DETAILS: 0:00:06 * :bread: **PASS** MS-FonVal: The numTables field is non-zero DETAILS: 18 * :bread: **PASS** MS-FonVal: The searchRange, entrySelector, and rangeShift fields are all valid * :bread: **PASS** MS-FonVal: The directory entry tags are in ascending order * :bread: **PASS** MS-FonVal: The directory entry tag names are valid * :bread: **PASS** MS-FonVal: The directory entry table offsets are all multiples of 4 * :bread: **PASS** MS-FonVal: All required tables are present * :bread: **PASS** MS-FonVal: No unnecessary tables are present * :bread: **PASS** MS-FonVal: All signature blocks were in format 1 * :bread: **PASS** MS-FonVal: All signature blocks' reserved values were 0 * :bread: **PASS** MS-FonVal: The digital signature of the file verified correctly * :bread: **PASS** MS-FonVal: The version numbers 0x00010000 or 0x0001002 are okay DETAILS: 0x00010000 * :bread: **PASS** MS-FonVal: All header offsets point within the table * :bread: **PASS** MS-FonVal: The version number is 0x00010000 * :bread: **PASS** MS-FonVal: The LangSysTable is valid DETAILS: ScriptList, ScriptRecord[0](DFLT), ScriptTable, DefaultLangSysTable * :bread: **PASS** MS-FonVal: The Script Table is valid DETAILS: ScriptList, ScriptRecord[0](DFLT), ScriptTable * :bread: **PASS** MS-FonVal: The LangSysTable is valid DETAILS: ScriptList, ScriptRecord[1](latn), ScriptTable, DefaultLangSysTable * :bread: **PASS** MS-FonVal: The LangSysTable is valid DETAILS: ScriptList, ScriptRecord[1](latn), ScriptTable, LangSysRecord[0], LangSysTable * :bread: **PASS** MS-FonVal: The LangSysTable is valid DETAILS: ScriptList, ScriptRecord[1](latn), ScriptTable, LangSysRecord[1], LangSysTable * :bread: **PASS** MS-FonVal: The LangSysTable is valid DETAILS: ScriptList, ScriptRecord[1](latn), ScriptTable, LangSysRecord[2], LangSysTable * :bread: **PASS** MS-FonVal: The LangSysTable is valid DETAILS: ScriptList, ScriptRecord[1](latn), ScriptTable, LangSysRecord[3], LangSysTable * :bread: **PASS** MS-FonVal: The LangSysTable is valid DETAILS: ScriptList, ScriptRecord[1](latn), ScriptTable, LangSysRecord[4], LangSysTable * :bread: **PASS** MS-FonVal: The LangSysTable is valid DETAILS: ScriptList, ScriptRecord[1](latn), ScriptTable, LangSysRecord[5], LangSysTable * :bread: **PASS** MS-FonVal: The LangSysTable is valid DETAILS: ScriptList, ScriptRecord[1](latn), ScriptTable, LangSysRecord[6], LangSysTable * :bread: **PASS** MS-FonVal: The LangSysTable is valid DETAILS: ScriptList, ScriptRecord[1](latn), ScriptTable, LangSysRecord[7], LangSysTable * :bread: **PASS** MS-FonVal: The Script Table is valid DETAILS: ScriptList, ScriptRecord[1](latn), ScriptTable * :bread: **PASS** MS-FonVal: The ScriptList Table is valid DETAILS: ScriptList * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[0](kern), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[1](kern), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[2](kern), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[3](kern), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[4](kern), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[5](kern), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[6](kern), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[7](kern), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[8](kern), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[9](kern), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[10](mark), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[11](mark), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[12](mark), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[13](mark), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[14](mark), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[15](mark), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[16](mark), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[17](mark), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[18](mark), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[19](mark), FeatureTable * :bread: **PASS** MS-FonVal: The FeatureList table is valid DETAILS: FeatureList * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[0], SubTable[0](PairPos, fmt 1), PairSet[0] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[0], SubTable[0](PairPos, fmt 1), PairSet[1] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[0], SubTable[0](PairPos, fmt 1), PairSet[2] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[0], SubTable[0](PairPos, fmt 1), PairSet[3] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[0], SubTable[0](PairPos, fmt 1), PairSet[4] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[0], SubTable[0](PairPos, fmt 1), PairSet[5] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[0], SubTable[0](PairPos, fmt 1), PairSet[6] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[0], SubTable[0](PairPos, fmt 1), PairSet[7] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[0], SubTable[0](PairPos, fmt 1), PairSet[8] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[0], SubTable[0](PairPos, fmt 1), PairSet[9] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[0], SubTable[0](PairPos, fmt 1), PairSet[10] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[0], SubTable[0](PairPos, fmt 1), PairSet[11] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[0], SubTable[0](PairPos, fmt 1), PairSet[12] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[0], SubTable[0](PairPos, fmt 1), PairSet[13] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[0], SubTable[0](PairPos, fmt 1), PairSet[14] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[0], SubTable[0](PairPos, fmt 1), PairSet[15] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[0], SubTable[0](PairPos, fmt 1), PairSet[16] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[0], SubTable[0](PairPos, fmt 1), PairSet[17] * :bread: **PASS** MS-FonVal: The PairPos subtable is valid DETAILS: LookupList, Lookup[0], SubTable[0](PairPos, fmt 1) * :bread: **PASS** MS-FonVal: The PairPos subtable is valid DETAILS: LookupList, Lookup[0], SubTable[1](PairPos, fmt 2) * :bread: **PASS** MS-FonVal: The PairPos subtable is valid DETAILS: LookupList, Lookup[0], SubTable[2](PairPos, fmt 2) * :bread: **PASS** MS-FonVal: The PairPos subtable is valid DETAILS: LookupList, Lookup[0], SubTable[3](PairPos, fmt 2) * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[0] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[1] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[2] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[3] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[4] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[5] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[6] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[7] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[8] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[9] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[10] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[11] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[12] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[13] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[14] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[15] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[16] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[17] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[18] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[19] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[20] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[21] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[22] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[23] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[24] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[25] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[26] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[27] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[28] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[29] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[30] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[31] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[32] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[33] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[34] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[35] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[36] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[37] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[38] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[39] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[40] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[41] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[42] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[43] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[44] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[45] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[46] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[47] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[48] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[49] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[50] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[51] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[52] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[53] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[54] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[55] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[56] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[57] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[58] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[59] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[60] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[61] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[62] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[63] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[64] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[65] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[66] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[67] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[68] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[69] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[70] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[71] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[72] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[73] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[74] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[75] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[76] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[77] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[78] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[79] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[80] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[81] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[82] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[83] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[84] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[85] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[86] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[87] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[88] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[89] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[90] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[91] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[92] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[93] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[94] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[95] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[96] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[97] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[98] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[99] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[100] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[101] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[102] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[103] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[104] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[105] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[106] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[107] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[108] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[109] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[110] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[111] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[112] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[113] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[114] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[115] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[116] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[117] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[118] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[119] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[120] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[121] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[122] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[123] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[124] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[125] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[126] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[127] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[128] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[129] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[130] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[131] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[132] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[133] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[134] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[135] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[136] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[137] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[138] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[139] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[140] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[141] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[142] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[143] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[144] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[145] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[146] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[147] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[148] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[149] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[150] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[151] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[152] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[153] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[154] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[155] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[156] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[157] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[158] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[159] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[160] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[161] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[162] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[163] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[164] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[165] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[166] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[167] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[168] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[169] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[170] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[171] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[172] * :bread: **PASS** MS-FonVal: The PairSet table is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1), PairSet[173] * :bread: **PASS** MS-FonVal: The PairPos subtable is valid DETAILS: LookupList, Lookup[1], SubTable[0](PairPos, fmt 1) * :bread: **PASS** MS-FonVal: The PairPos subtable is valid DETAILS: LookupList, Lookup[1], SubTable[1](PairPos, fmt 2) * :bread: **PASS** MS-FonVal: The PairPos subtable is valid DETAILS: LookupList, Lookup[1], SubTable[2](PairPos, fmt 2) * :bread: **PASS** MS-FonVal: The PairPos subtable is valid DETAILS: LookupList, Lookup[1], SubTable[3](PairPos, fmt 2) * :bread: **PASS** MS-FonVal: The PairPos subtable is valid DETAILS: LookupList, Lookup[1], SubTable[4](PairPos, fmt 2) * :bread: **PASS** MS-FonVal: The BaseArray table is valid DETAILS: LookupList, Lookup[2], SubTable[0](MarkBasePos), BaseArray * :bread: **PASS** MS-FonVal: The MarkBasePos subtable is valid DETAILS: LookupList, Lookup[2], SubTable[0](MarkBasePos) * :bread: **PASS** MS-FonVal: The BaseArray table is valid DETAILS: LookupList, Lookup[3], SubTable[0](MarkBasePos), BaseArray * :bread: **PASS** MS-FonVal: The MarkBasePos subtable is valid DETAILS: LookupList, Lookup[3], SubTable[0](MarkBasePos) * :bread: **PASS** MS-FonVal: The LookupList table is valid DETAILS: LookupList * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[0](aalt), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[1](aalt), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[2](aalt), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[3](aalt), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[4](aalt), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[5](aalt), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[6](aalt), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[7](aalt), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[8](aalt), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[9](aalt), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[10](case), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[11](case), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[12](case), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[13](case), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[14](case), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[15](case), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[16](case), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[17](case), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[18](case), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[19](case), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[20](ccmp), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[21](ccmp), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[22](ccmp), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[23](ccmp), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[24](ccmp), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[25](ccmp), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[26](ccmp), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[27](ccmp), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[28](ccmp), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[29](ccmp), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[30](frac), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[31](frac), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[32](frac), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[33](frac), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[34](frac), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[35](frac), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[36](frac), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[37](frac), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[38](frac), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[39](frac), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[40](liga), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[41](liga), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[42](liga), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[43](liga), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[44](liga), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[45](liga), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[46](liga), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[47](liga), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[48](liga), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[49](liga), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[50](locl), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[51](locl), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[52](locl), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[53](locl), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[54](locl), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[55](locl), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[56](locl), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[57](locl), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[58](ordn), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[59](ordn), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[60](ordn), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[61](ordn), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[62](ordn), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[63](ordn), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[64](ordn), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[65](ordn), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[66](ordn), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[67](ordn), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[68](salt), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[69](salt), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[70](salt), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[71](salt), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[72](salt), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[73](salt), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[74](salt), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[75](salt), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[76](salt), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[77](salt), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[78](sups), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[79](sups), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[80](sups), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[81](sups), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[82](sups), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[83](sups), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[84](sups), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[85](sups), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[86](sups), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[87](sups), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[88](zero), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[89](zero), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[90](zero), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[91](zero), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[92](zero), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[93](zero), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[94](zero), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[95](zero), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[96](zero), FeatureTable * :bread: **PASS** MS-FonVal: The Feature table is valid DETAILS: FeatureList, FeatureRecord[97](zero), FeatureTable * :bread: **PASS** MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[0], SubTable[0](SingleSubst, fmt 2) * :bread: **PASS** MS-FonVal: The ChainContextSubst subtable is valid DETAILS: LookupList, Lookup[1], SubTable[0](ChainContextSubst, fmt 3) * :bread: **PASS** MS-FonVal: The ChainContextSubst subtable is valid DETAILS: LookupList, Lookup[1], SubTable[1](ChainContextSubst, fmt 3) * :bread: **PASS** MS-FonVal: The ChainContextSubst subtable is valid DETAILS: LookupList, Lookup[1], SubTable[2](ChainContextSubst, fmt 3) * :bread: **PASS** MS-FonVal: The ChainContextSubst subtable is valid DETAILS: LookupList, Lookup[1], SubTable[3](ChainContextSubst, fmt 3) * :bread: **PASS** MS-FonVal: The ChainContextSubst subtable is valid DETAILS: LookupList, Lookup[2], SubTable[0](ChainContextSubst, fmt 3) * :bread: **PASS** MS-FonVal: The ChainContextSubst subtable is valid DETAILS: LookupList, Lookup[2], SubTable[1](ChainContextSubst, fmt 3) * :bread: **PASS** MS-FonVal: The ChainContextSubst subtable is valid DETAILS: LookupList, Lookup[3], SubTable[0](ChainContextSubst, fmt 3) * :bread: **PASS** MS-FonVal: The ChainContextSubst subtable is valid DETAILS: LookupList, Lookup[3], SubTable[1](ChainContextSubst, fmt 3) * :bread: **PASS** MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[4], SubTable[0](SingleSubst, fmt 2) * :bread: **PASS** MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[5], SubTable[0](SingleSubst, fmt 2) * :bread: **PASS** MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[6], SubTable[0](SingleSubst, fmt 1) * :bread: **PASS** MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[7], SubTable[0](SingleSubst, fmt 1) * :bread: **PASS** MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[8], SubTable[0](SingleSubst, fmt 1) * :bread: **PASS** MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[9], SubTable[0](SingleSubst, fmt 1) * :bread: **PASS** MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[10], SubTable[0](SingleSubst, fmt 1) * :bread: **PASS** MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[11], SubTable[0](SingleSubst, fmt 1) * :bread: **PASS** MS-FonVal: The LigatureSubst subtable is valid DETAILS: LookupList, Lookup[12], SubTable[0](LigatureSubst, fmt 1) * :bread: **PASS** MS-FonVal: The ChainContextSubst subtable is valid DETAILS: LookupList, Lookup[13], SubTable[0](ChainContextSubst, fmt 3) * :bread: **PASS** MS-FonVal: The ChainContextSubst subtable is valid DETAILS: LookupList, Lookup[13], SubTable[1](ChainContextSubst, fmt 3) * :bread: **PASS** MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[14], SubTable[0](SingleSubst, fmt 1) * :bread: **PASS** MS-FonVal: The LigatureSubst subtable is valid DETAILS: LookupList, Lookup[15], SubTable[0](LigatureSubst, fmt 1) * :bread: **PASS** MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[16], SubTable[0](SingleSubst, fmt 1) * :bread: **PASS** MS-FonVal: The LigatureSubst subtable is valid DETAILS: LookupList, Lookup[17], SubTable[0](LigatureSubst, fmt 1) * :bread: **PASS** MS-FonVal: The ChainContextSubst subtable is valid DETAILS: LookupList, Lookup[18], SubTable[0](ChainContextSubst, fmt 3) * :bread: **PASS** MS-FonVal: The ChainContextSubst subtable is valid DETAILS: LookupList, Lookup[18], SubTable[1](ChainContextSubst, fmt 3) * :bread: **PASS** MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[19], SubTable[0](SingleSubst, fmt 2) * :bread: **PASS** MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[20], SubTable[0](SingleSubst, fmt 2) * :bread: **PASS** MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[21], SubTable[0](SingleSubst, fmt 1) * :bread: **PASS** MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[22], SubTable[0](SingleSubst, fmt 1) * :bread: **PASS** MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[23], SubTable[0](SingleSubst, fmt 1) * :bread: **PASS** MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[24], SubTable[0](SingleSubst, fmt 1) * :bread: **PASS** MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[25], SubTable[0](SingleSubst, fmt 1) * :bread: **PASS** MS-FonVal: The LigatureSubst subtable is valid DETAILS: LookupList, Lookup[26], SubTable[0](LigatureSubst, fmt 1) * :bread: **PASS** MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[27], SubTable[0](SingleSubst, fmt 1) * :bread: **PASS** MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[28], SubTable[0](SingleSubst, fmt 1) * :bread: **PASS** MS-FonVal: The LigatureSubst subtable is valid DETAILS: LookupList, Lookup[29], SubTable[0](LigatureSubst, fmt 1) * :bread: **PASS** MS-FonVal: The SingleSubst subtable is valid DETAILS: LookupList, Lookup[30], SubTable[0](SingleSubst, fmt 2) * :bread: **PASS** MS-FonVal: The LigatureSubst subtable is valid DETAILS: LookupList, Lookup[31], SubTable[0](LigatureSubst, fmt 1) * :bread: **PASS** MS-FonVal: The table length matches the expected length for this version * :bread: **PASS** MS-FonVal: The xAvgCharWidth field equals the calculated value * :bread: **PASS** MS-FonVal: The usWeightClass is a valid value DETAILS: 400 * :bread: **PASS** MS-FonVal: The width class is a valid value DETAILS: 5 * :bread: **PASS** MS-FonVal: The fsType field is valid DETAILS: 0x0000, Installable Embedding * :bread: **PASS** MS-FonVal: All subscript and superscript values appear valid * :bread: **PASS** MS-FonVal: The yStrikeoutSize and yStrikeoutPosition appear valid * :bread: **PASS** MS-FonVal: The sFamilyClass Class ID and Subclass ID values are in a valid range * :bread: **PASS** MS-FonVal: All panose values are in a valid range * :bread: **PASS** MS-FonVal: The Unicode Range fields' bits are all allowable values * :bread: **PASS** MS-FonVal: The usFirstCharIndex and usLastCharIndex fields are valid DETAILS: first = 0x000d, last = 0xfb02 * :bread: **PASS** MS-FonVal: The sTypoAscender and sTypoDescender fields are reasonable values DETAILS: sTypoAscender = 800, sTypoDescender = -200 * :bread: **PASS** MS-FonVal: The CodePage Range fields' bits are all allowable values * :bread: **PASS** MS-FonVal: The sxHeight field is nonzero DETAILS: 500 * :bread: **PASS** MS-FonVal: The sCapHeight field is nonzero DETAILS: 696 * :bread: **PASS** MS-FonVal: The usDefaultChar field is zero * :bread: **PASS** MS-FonVal: The usBreakChar is mapped to a glyf * :bread: **PASS** MS-FonVal: The usMaxContext field matches the calculated value DETAILS: 3 * :bread: **PASS** MS-FonVal: The table version number is 0 * :bread: **PASS** MS-FonVal: Each subtable offset is within the table * :bread: **PASS** MS-FonVal: Each subtable length is within the table * :bread: **PASS** MS-FonVal: The subtables are in the correct order * :bread: **PASS** MS-FonVal: There are no duplicate subtables * :bread: **PASS** MS-FonVal: No overlapping subtables were found * :bread: **PASS** MS-FonVal: Each subtable's format number is valid * :bread: **PASS** MS-FonVal: The subtable internal format appears valid DETAILS: PlatID = 0, EncID = 3, Fmt = 4 * :bread: **PASS** MS-FonVal: The subtable internal format appears valid DETAILS: PlatID = 3, EncID = 1, Fmt = 4 * :bread: **PASS** MS-FonVal: Character code U+20AC, the euro character, is mapped for cmap 3,1 * :bread: **PASS** MS-FonVal: No characters are mapped in the Unicode Private Use area * :bread: **PASS** MS-FonVal: All non mac subtables have a language field of zero * :bread: **PASS** MS-FonVal: The length of the cvt table is an even number of bytes * :bread: **PASS** MS-FonVal: The version number is valid DETAILS: version = 1 * :bread: **PASS** MS-FonVal: All of the rangeGaspBehavior fields contain valid flags * :bread: **PASS** MS-FonVal: The gaspRange array is in sorted order * :bread: **PASS** MS-FonVal: The gaspRange array has a 0xFFFF sentinel * :bread: **PASS** MS-FonVal: No adjacent ranges have identical flags * :bread: **PASS** MS-FonVal: Correct format of loca (0 or 1) * :bread: **PASS** MS-FonVal: Table length is 54 bytes * :bread: **PASS** MS-FonVal: The table version number is 0x00010000 * :bread: **PASS** MS-FonVal: fontRevision is consistent with the font's version string DETAILS: 1.000 * :bread: **PASS** MS-FonVal: Font checksum is correct DETAILS: 0x0e386eb6 * :bread: **PASS** MS-FonVal: The magic number is 0x5f0f3cf5 * :bread: **PASS** MS-FonVal: Non-linear scaling flag (bit 4) is clear, and hdmx table is not present * :bread: **PASS** MS-FonVal: Non-linear scaling flag (bit 4) is clear, and LTSH table is not present * :bread: **PASS** MS-FonVal: Reserved bit 14 of the flags field is clear * :bread: **PASS** MS-FonVal: Reserved bit 15 of the flags field is clear * :bread: **PASS** MS-FonVal: The created time is not zero DETAILS: created = 3609758639 (Monday, May 21, 2018 2:43 PM) * :bread: **PASS** MS-FonVal: The modified time is not zero DETAILS: modified = 3622341659 (Sunday, October 14, 2018 6:00 AM) * :bread: **PASS** MS-FonVal: The xMin value matches the minimum glyph xMin DETAILS: xMin = -196 * :bread: **PASS** MS-FonVal: The yMin value matches the minimum glyph yMin DETAILS: yMin = -306 * :bread: **PASS** MS-FonVal: The xMax value matches the maximum glyph xMax DETAILS: xMax = 986 * :bread: **PASS** MS-FonVal: The yMax value matches the maximum glyph yMax DETAILS: yMax = 1006 * :bread: **PASS** MS-FonVal: The macStyle bold bit matches the name table's font subfamily string * :bread: **PASS** MS-FonVal: The macStyle italic bit matches the name table's font subfamily string * :bread: **PASS** MS-FonVal: The macStyle bold bit matches the OS/2 fsSelection bit * :bread: **PASS** MS-FonVal: The macStyle italic bit matches the OS/2 fsSelection bit * :bread: **PASS** MS-FonVal: The macStyle italic bit matches the post table italic angle * :bread: **PASS** MS-FonVal: The lowestRecPPEM value is in a reasonable range * :bread: **PASS** MS-FonVal: The fontDirectionHint is in the range -2..2 DETAILS: 2 * :bread: **PASS** MS-FonVal: The indexToLocFormat value is 0 or 1 DETAILS: 0 * :bread: **PASS** MS-FonVal: The indexToLocFormat value matches the loca table DETAILS: 0 * :bread: **PASS** MS-FonVal: The glyphDataFormat value is 0 * :bread: **PASS** MS-FonVal: The Ascender value is greater than zero * :bread: **PASS** MS-FonVal: The Descender is less than zero * :bread: **PASS** MS-FonVal: Ascender is less than or equal to head.yMax * :bread: **PASS** MS-FonVal: Descender is greater than or equal to head.yMin * :bread: **PASS** MS-FonVal: LineGap is greater than or equal to 0 * :bread: **PASS** MS-FonVal: Ascender is same value as OS/2.usWinAscent * :bread: **PASS** MS-FonVal: Descender value is the same as OS/2.usWinDescent * :bread: **PASS** MS-FonVal: The LineGap is greater to or equal the minimum recommended value * :bread: **PASS** MS-FonVal: The advanceWidthMax field equals the calculated value * :bread: **PASS** MS-FonVal: The minLeftSideBearing field equals the calculated value * :bread: **PASS** MS-FonVal: The minRightSideBearing field equals the calculated value * :bread: **PASS** MS-FonVal: The xMaxExtent field equals the calculated value * :bread: **PASS** MS-FonVal: The reserved fields are all set to zero * :bread: **PASS** MS-FonVal: The metricDataFormat field is set to zero * :bread: **PASS** MS-FonVal: The numberOfHMetrics value is consistent with the length of the hmtx table * :bread: **PASS** MS-FonVal: The caretSlope angle matches the post.italicAngle * :bread: **PASS** MS-FonVal: The size of the table matches the calculated size * :bread: **PASS** MS-FonVal: The horizontal metrics are all within an allowable range of values * :bread: **PASS** MS-FonVal: The number of entries is equal to (maxp.numGlyphs + 1) * :bread: **PASS** MS-FonVal: The entries are sorted in ascending order * :bread: **PASS** MS-FonVal: All entries point within range of the glyf table * :bread: **PASS** MS-FonVal: Loca references a glyf entry which length is not a multiple of 4 * :bread: **PASS** MS-FonVal: All glyphs in the glyf table are referenced by the loca table * :bread: **PASS** MS-FonVal: Table version is 1.0 and a glyf table is present and no CFF table is present * :bread: **PASS** MS-FonVal: Table version is 1.0 and the table is 32 bytes long * :bread: **PASS** MS-FonVal: The numGlyphs value equals the number of entries in the loca array plus one DETAILS: numGlyphs = 424 * :bread: **PASS** MS-FonVal: The format selector field is 0 * :bread: **PASS** MS-FonVal: No strings extended past the end of the table * :bread: **PASS** MS-FonVal: The NameRecords array is in sorted order * :bread: **PASS** MS-FonVal: No name records are using reserved Name IDs * :bread: **PASS** MS-FonVal: The table contains strings for both Mac and Microsoft platforms * :bread: **PASS** MS-FonVal: The version string is in the correct format DETAILS: platID = 3, encID = 1, langID = 1033, "Version 1.000; ttfautohint (v1.8)" * :bread: **PASS** MS-FonVal: All strings had valid Platform Specific Encoding IDs * :bread: **PASS** MS-FonVal: All Microsoft unicode strings had valid Language IDs * :bread: **PASS** MS-FonVal: The length of every unicode string is an even # of bytes * :bread: **PASS** MS-FonVal: The PostScript strings are correctly formatted * :bread: **PASS** MS-FonVal: The subfamily string is consistent with the style of the font * :bread: **PASS** MS-FonVal: No name record specified Unicode Variation Sequences cmap subtable DETAILS: PlatformID=0, EncodingID=5 is for Variation Sequences (Format 14) * :bread: **PASS** MS-FonVal: No inconsistencies were found for Copyright strings * :bread: **PASS** MS-FonVal: No inconsistencies were found for Trademark strings * :bread: **PASS** MS-FonVal: No inconsistencies were found for Description strings * :bread: **PASS** MS-FonVal: The table length is valid * :bread: **PASS** MS-FonVal: The version number is valid * :bread: **PASS** MS-FonVal: The italicAngle value is reasonable and consistent with other tables * :bread: **PASS** MS-FonVal: The underlinePosition value is not less than hhea.Descender * :bread: **PASS** MS-FonVal: The underlineThickness value is reasonable * :bread: **PASS** MS-FonVal: The isFixedPitch field is consistent with other table(s) DETAILS: matches the hmtx and OS/2 tables * :bread: **PASS** MS-FonVal: The numberOfGlyphs field equals maxp.numGlyphs * :bread: **PASS** MS-FonVal: The glyphNameIndex array contains valid indexes * :bread: **PASS** MS-FonVal: The names in the post table are consistent with the Adobe Glyph List names * :warning: **WARN** MS-FonVal: Recommended table is missing DETAILS: kern * :warning: **WARN** MS-FonVal: Recommended table is missing DETAILS: hdmx * :warning: **WARN** MS-FonVal: Recommended table is missing DETAILS: VDMX * :warning: **WARN** MS-FonVal: Tables are not in optimal order DETAILS: table 'OS/2' precedes table 'head' * :warning: **WARN** MS-FonVal: The version number is valid, but less than 5 DETAILS: 4 * :warning: **WARN** MS-FonVal: There are undefined bits set in fsSelection field DETAILS: Bit(s) 7 * :warning: **WARN** MS-FonVal: A CodePage bit is set in ulCodePageRange, but the font is missing some of the printable characters from that codepage DETAILS: bit #0, Latin 1 (missing chars: U00A4 U00B5) * :warning: **WARN** MS-FonVal: A CodePage bit is set in ulCodePageRange, but the font is missing some of the printable characters from that codepage DETAILS: bit #1, Latin 2 (missing chars: U00A4 U00B5) * :warning: **WARN** MS-FonVal: A CodePage bit is set in ulCodePageRange, but the font is missing some of the printable characters from that codepage DETAILS: bit #4, Turkish (missing chars: U00A4 U00B5) * :warning: **WARN** MS-FonVal: A CodePage bit is set in ulCodePageRange, but the font is missing some of the printable characters from that codepage DETAILS: bit #7, Baltic (missing chars: U00A4 U00B5) * :warning: **WARN** MS-FonVal: A CodePage bit is set in ulCodePageRange, but the font is missing some of the printable characters from that codepage DETAILS: bit #29, Mac character set (missing chars: U00B5 U2202 U2211 U222B U2126 U2206) * :warning: **WARN** MS-FonVal: The table does not contain any Apple subtables * :warning: **WARN** MS-FonVal: Apple logo mapping test not performed, cmap 1,0 not present * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 4 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 5 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 7 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 8 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 9 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 10 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 11 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 12 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 13 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 14 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 15 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 16 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 18 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 19 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 29 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 33 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 34 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 35 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 44 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 49 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 50 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 53 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 54 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 55 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 58 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 63 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 64 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 65 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 71 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 75 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 86 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 88 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 89 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 94 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 97 * :warning: **WARN** MS-FonVal: Duplicated knots DETAILS: Glyph index 100 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 102 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 104 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 108 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 114 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 117 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 122 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 123 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 124 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 125 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 126 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 127 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 128 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 129 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 130 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 131 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 132 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 133 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 136 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 138 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 139 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 140 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 141 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 142 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 143 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 144 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 145 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 146 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 147 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 149 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 150 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 160 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 164 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 165 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 166 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 175 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 180 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 181 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 184 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 185 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 186 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 189 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 195 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 196 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 197 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 200 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 203 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 207 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 217 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 219 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 220 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 225 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 228 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 232 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 234 * :warning: **WARN** MS-FonVal: Duplicated knots DETAILS: Glyph index 236 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 239 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 245 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 248 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 252 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 253 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 254 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 255 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 256 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 257 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 258 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 259 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 260 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 261 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 262 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 263 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 266 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 270 * :warning: **WARN** MS-FonVal: Duplicated knots DETAILS: Glyph index 287 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 289 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 290 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 291 * :warning: **WARN** MS-FonVal: Duplicated knots DETAILS: Glyph index 292 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 308 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 309 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 327 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 328 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 329 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 330 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 331 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 332 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 337 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 339 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 340 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 343 * :warning: **WARN** MS-FonVal: Duplicated knots DETAILS: Glyph index 343 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 346 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 347 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 348 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 349 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 350 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 352 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 358 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 361 * :warning: **WARN** MS-FonVal: Duplicated knots DETAILS: Glyph index 367 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 378 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 379 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 380 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 381 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 382 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 383 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 384 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 385 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 386 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 387 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 388 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 389 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 396 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 404 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 405 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 406 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 408 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 411 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 412 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 418 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 419 * :warning: **WARN** MS-FonVal: Not all extremes are marked with the on-curve control points DETAILS: Glyph index 421 * :warning: **WARN** MS-FonVal: The unitsPerEm value is not a power of two DETAILS: 1000 * :warning: **WARN** MS-FonVal: maxSizeOfInstructions computation not via either approved method DETAILS: glyf maxSizeOfInstructions=266, prep size=189, fpgm size=3605, whereas maxp maxSizeOfInstruction is 3605

Summary

:broken_heart: ERROR :fire: FAIL :warning: WARN :zzz: SKIP :information_source: INFO :bread: PASS
0 1 0 0 0 0
0% 100% 0% 0% 0% 0%
eliheuer commented 6 years ago

Most of these WARNs are from the way the rounded corners are drawn.

davelab6 commented 6 years ago

Good point, we should add something to the check wrapper that tells people this common scenario in which is ok to ignore