Font Bakery Logo image/svg+xml Font Bakery Logo Robert Martinez font build service https://github.com/xen/fontbakery
Fontbakery Technical Report

If you think a check is flawed or have an idea for a check, please file an issue at https://github.com/fonttools/fontbakery/issues and remember to include a pointer to the repo and branch you're checking.

Summary

💥 ERROR ☠ FATAL 🔥 FAIL ⚠️ WARN ⏩ SKIP ℹ️ INFO ✅ PASS
1 0 5 12 87 8 123
0% 0% 2% 5% 37% 3% 52%

Meaning of check results:

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!)

FontBakery version: 1.0.0

OpenType Specification Checks

🔥⚠️⏩⏩⏩⏩⏩⏩⏩

Check hhea.caretSlopeRise and hhea.caretSlopeRun

Check ID: <FontBakeryCheck:opentype/caret_slope>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Is the CFF2 subr/gsubr call depth > 10?

Check ID: <FontBakeryCheck:opentype/cff2_call_depth>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: is_cff2

    [code: unfulfilled-conditions]

Does the font's CFF table top dict strings fit into the ASCII range?

Check ID: <FontBakeryCheck:opentype/cff_ascii_strings>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: is_cff

    [code: unfulfilled-conditions]

Is the CFF subr/gsubr call depth > 10?

Check ID: <FontBakeryCheck:opentype/cff_call_depth>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: is_cff

    [code: unfulfilled-conditions]

Does the font use deprecated CFF operators or operations?

Check ID: <FontBakeryCheck:opentype/cff_deprecated_operators>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: is_cff

    [code: unfulfilled-conditions]

Check code page character ranges

Check ID: <FontBakeryCheck:opentype/code_pages>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

The font should not need a DSIG table anymore.

Check ID: <FontBakeryCheck:opentype/dsig>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Check that OS/2.fsSelection bold & italic settings are unique for each NameID1

Check ID: <FontBakeryCheck:opentype/family/bold_italic_unique_for_nameid1>
✅ Family Check
  • ✅ PASS

    All looks good!

    [code: ok]

Verify that family names in the name table are consistent across all fonts in the family. Checks Typographic Family name (nameID 16) if present, otherwise uses Font Family name (nameID 1)

Check ID: <FontBakeryCheck:opentype/family/consistent_family_name>
✅ Family Check
  • ✅ PASS

    All looks good!

    [code: ok]

Make sure all font files have the same version value.

Check ID: <FontBakeryCheck:opentype/family/equal_font_versions>
✅ Family Check
  • ✅ PASS

    All looks good!

    [code: ok]

Verify that each group of fonts with the same nameID 1 has maximum of 4 fonts.

Check ID: <FontBakeryCheck:opentype/family/max_4_fonts_per_family_name>
✅ Family Check
  • ✅ PASS

    All looks good!

    [code: ok]

Font follows the family naming recommendations?

Check ID: <FontBakeryCheck:opentype/family_naming_recommendations>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Fonts have consistent PANOSE family type?

Check ID: <FontBakeryCheck:opentype/family/panose_familytype>
✅ Family Check
  • ✅ PASS

    All looks good!

    [code: ok]

Fonts have consistent underline thickness?

Check ID: <FontBakeryCheck:opentype/family/underline_thickness>
✅ Family Check
  • ✅ PASS

    Fonts have consistent underline thickness.

Checking font version fields (head and name table).

Check ID: <FontBakeryCheck:opentype/font_version>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Checking OS/2 fsSelection value.

Check ID: <FontBakeryCheck:opentype/fsselection>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Axes and named instances fall within correct ranges?

Check ID: <FontBakeryCheck:opentype/fvar/axis_ranges_correct>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Axes and named instances fall within correct ranges?

Check ID: <FontBakeryCheck:opentype/fvar/regular_coords_correct>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Check mark characters are in GDEF mark glyph class.

Check ID: <FontBakeryCheck:opentype/gdef_mark_chars>
⚠️ Samaano[slnt,wdth,wght].ttf
  • ⚠️ WARN

    The following mark characters could be in the GDEF mark glyph class: acutemacroncomb (U+1DC7), gravemacroncomb (U+1DC5), macronacutecomb (U+1DC4), macrongravecomb (U+1DC6), uni0329 (U+0329), uni0955 (U+0955), uni0BC0 (U+0BC0) and uni0BCD (U+0BCD)

    [code: mark-chars]

Check GDEF mark glyph class doesn't have characters that are not marks.

Check ID: <FontBakeryCheck:opentype/gdef_non_mark_chars>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Check glyphs in mark glyph class are non-spacing.

Check ID: <FontBakeryCheck:opentype/gdef_spacing_marks>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Check glyphs do not have duplicate components which have the same x,y coordinates.

Check ID: <FontBakeryCheck:opentype/glyf_non_transformed_duplicate_components>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Is there any unused data at the end of the glyf table?

Check ID: <FontBakeryCheck:opentype/glyf_unused_data>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    There is no unused data at the end of the glyf table.

Checking post.italicAngle value.

Check ID: <FontBakeryCheck:opentype/italic_angle>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    Value of post.italicAngle is 0.0 with style="Bold".

Is there a usable "kern" table declared in the font?

Check ID: <FontBakeryCheck:opentype/kern_table>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    Font does not declare an optional "kern" table.

Does the font have any invalid feature tags?

Check ID: <FontBakeryCheck:opentype/layout_valid_feature_tags>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Does the font have any invalid language tags?

Check ID: <FontBakeryCheck:opentype/layout_valid_language_tags>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Does the font have any invalid script tags?

Check ID: <FontBakeryCheck:opentype/layout_valid_script_tags>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Does the number of glyphs in the loca table match the maxp table?

Check ID: <FontBakeryCheck:opentype/loca/maxp_num_glyphs>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Checking head.macStyle value.

Check ID: <FontBakeryCheck:opentype/mac_style>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    head macStyle ITALIC bit is properly set.

  • ✅ PASS

    head macStyle BOLD bit is properly set.

MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables?

Check ID: <FontBakeryCheck:opentype/maxadvancewidth>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Checking correctness of monospaced metadata.

Check ID: <FontBakeryCheck:opentype/monospace>
🔥 Samaano[slnt,wdth,wght].ttf

Check name table for empty records.

Check ID: <FontBakeryCheck:opentype/name/empty_records>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Does full font name begin with the font family name?

Check ID: <FontBakeryCheck:opentype/name/match_familyname_fullfont>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Name table ID 6 (PostScript name) must be consistent across platforms.

Check ID: <FontBakeryCheck:opentype/name/postscript_name_consistency>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

CFF table FontName must match name table ID 6 (PostScript name).

Check ID: <FontBakeryCheck:opentype/name/postscript_vs_cff>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: is_cff

    [code: unfulfilled-conditions]

Check for points out of bounds.

Check ID: <FontBakeryCheck:opentype/points_out_of_bounds>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

PostScript name follows OpenType specification requirements?

Check ID: <FontBakeryCheck:opentype/postscript_name>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Font has correct post table version?

Check ID: <FontBakeryCheck:opentype/post_table_version>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    Font has an acceptable post format 2.0 table version.

Checking direction of slnt axis angles.

Check ID: <FontBakeryCheck:opentype/slant_direction>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Ensure VFs have 'ital' STAT axis.

Check ID: <FontBakeryCheck:opentype/STAT/ital_axis>
⏩ Family Check
  • ⏩ SKIP

    Font {font.file} doesn't have an ital axis

Checking unitsPerEm value is reasonable.

Check ID: <FontBakeryCheck:opentype/unitsperem>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Are there unwanted Apple tables?

Check ID: <FontBakeryCheck:opentype/unwanted_aat_tables>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Validates that all of the instance records in a given font have distinct data.

Check ID: <FontBakeryCheck:opentype/varfont/distinct_instance_records>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Check that family axis ranges are indentical

Check ID: <FontBakeryCheck:opentype/varfont/family_axis_ranges>
✅ Family Check
  • ✅ PASS

    All looks good!

    [code: ok]

Validate foundry-defined design-variation axis tag names.

Check ID: <FontBakeryCheck:opentype/varfont/foundry_defined_tag_name>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Validates that all of the instance records in a given font have the same size.

Check ID: <FontBakeryCheck:opentype/varfont/same_size_instance_records>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

All fvar axes have a correspondent Axis Record on STAT table?

Check ID: <FontBakeryCheck:opentype/varfont/STAT_axis_record_for_each_axis>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    STAT table has all necessary Axis Records.

Validates subfamilyNameID and postScriptNameID for the default instance record

Check ID: <FontBakeryCheck:opentype/varfont/valid_default_instance_nameids>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Validates that all of the name IDs in an instance record are within the correct range

Check ID: <FontBakeryCheck:opentype/varfont/valid_nameids>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Checking OS/2 achVendID against configuration.

Check ID: <FontBakeryCheck:opentype/vendor_id>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Add the vendor_id key to a fontbakery.yaml file on your font project directory to enable this check. You'll also need to use the --configuration flag when invoking fontbakery.

Checking if OS/2 usWeightClass matches fvar.

Check ID: <FontBakeryCheck:opentype/weight_class_fvar>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Check if OS/2 xAvgCharWidth is correct.

Check ID: <FontBakeryCheck:opentype/xavgcharwidth>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    OS/2 xAvgCharWidth value is correct.

Superfamily Checks

⏩ℹ️

List all superfamily filepaths

Check ID: <FontBakeryCheck:superfamily/list>
ℹ️ Samaano[slnt,wdth,wght].ttf
  • ℹ️ INFO

    fonts/variable

    [code: family-path]

Each font in set of sibling families must have the same set of vertical metrics values.

Check ID: <FontBakeryCheck:superfamily/vertical_metrics>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Sibling families were not detected.

Universal Profile Checks

🔥🔥⚠️⚠️⚠️⚠️⚠️⚠️⏩⏩⏩⏩⏩⏩⏩⏩⏩ℹ️ℹ️ℹ️

Check accent of Lcaron, dcaron, lcaron, tcaron

Check ID: <FontBakeryCheck:alt_caron>
⚠️ Samaano[slnt,wdth,wght].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]
  • ✅ PASS

    Looks good!

Check that glyph for U+0674 ARABIC LETTER HIGH HAMZA is not a mark.

Check ID: <FontBakeryCheck:arabic_high_hamza>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    This check will only run on fonts that have U+0674 glyph

    [code: glyphs-missing]

Check that Arabic spacing symbols U+FBB2–FBC1 aren't classified as marks.

Check ID: <FontBakeryCheck:arabic_spacing_symbols>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

EXPERIMENTAL CHECK - Since 2024/12/28
Check base characters have non-zero advance width.

Check ID: <FontBakeryCheck:base_has_width>
🔥 Samaano[slnt,wdth,wght].ttf
  • 🔥 FAIL

    The following glyphs had zero advance width: - anoteleia (U+0387)

    - uni1FBE (U+1FBE)
    
    [code: zero-width-bases]

Check if uppercase glyphs are vertically centered.

Check ID: <FontBakeryCheck:caps_vertically_centered>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    Uppercase glyphs are vertically centered in the em box.

Ensure the font supports case swapping for all its glyphs.

Check ID: <FontBakeryCheck:case_mapping>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Does the font contain chws and vchw features?

Check ID: <FontBakeryCheck:cjk_chws_feature>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: is_cjk_font

    [code: unfulfilled-conditions]

Any CJK font should contain at least a minimal set of 150 CJK characters.

Check ID: <FontBakeryCheck:cjk_not_enough_glyphs>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: is_claiming_to_be_cjk_font

    [code: unfulfilled-conditions]

Color layers should have a minimum brightness.

Check ID: <FontBakeryCheck:color_cpal_brightness>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Check if each glyph has the recommended amount of contours.

Check ID: <FontBakeryCheck:contour_count>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: not is_variable_font

    [code: unfulfilled-conditions]

Does font file include unacceptable control character glyphs?

Check ID: <FontBakeryCheck:control_chars>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Put an empty glyph on GID 1 right after the .notdef glyph for COLRv0 fonts.

Check ID: <FontBakeryCheck:empty_glyph_on_gid1_for_colrv0>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Checking all files are in the same directory.

Check ID: <FontBakeryCheck:family/single_directory>
✅ Family Check
  • ✅ PASS

    All files are in the same directory.

Each font in a family must have the same set of vertical metrics values.

Check ID: <FontBakeryCheck:family/vertical_metrics>
✅ Family Check
  • ✅ PASS

    Vertical metrics are the same across the family.

Checking OS/2 usWinAscent & usWinDescent.

Check ID: <FontBakeryCheck:family/win_ascent_and_descent>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    OS/2 usWinAscent & usWinDescent values look good!

All name entries referenced by fvar instances exist on the name table?

Check ID: <FontBakeryCheck:fvar_name_entries>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Ensure files are not too large.

Check ID: <FontBakeryCheck:file_size>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    Font had a reasonable file size

Do we have the latest version of FontBakery installed?

Check ID: <FontBakeryCheck:fontbakery_version>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    FontBakery is up-to-date.

Familyname must be unique according to namecheck.fontdata.com

Check ID: <FontBakeryCheck:fontdata_namecheck>
ℹ️ Samaano[slnt,wdth,wght].ttf

Ensure that the font can be rasterized by FreeType.

Check ID: <FontBakeryCheck:freetype_rasterizer>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    Font can be rasterized by FreeType.

Ensure no GPOS7 lookups are present.

Check ID: <FontBakeryCheck:gpos7>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    Font has no GPOS7 lookups

Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value

Check ID: <FontBakeryCheck:gpos_kerning_info>
⚠️ Samaano[slnt,wdth,wght].ttf
  • ⚠️ WARN

    GPOS table lacks kerning information.

    [code: lacks-kern-info]

Show hinting filesize impact.

Check ID: <FontBakeryCheck:hinting_impact>
ℹ️ Samaano[slnt,wdth,wght].ttf
  • ℹ️ INFO

    Hinting filesize impact:

    fonts/variable/Samaano[slnt,wdth,wght].ttf
    Dehinted Size 372.6kb
    Hinted Size 372.6kb
    Increase 24 bytes
    Change 0.0 %
    [code: size-impact]

PPEM must be an integer on hinted fonts.

Check ID: <FontBakeryCheck:integer_ppem_if_hinted>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: is_hinted

    [code: unfulfilled-conditions]

Detect any interpolation issues in the font.

Check ID: <FontBakeryCheck:interpolation_issues>
⚠️ Samaano[slnt,wdth,wght].ttf
  • ⚠️ WARN

    Interpolation issues were found in the font:

    - Contour 3 in glyph 'Eth': becomes underweight between slnt=0,wdth=100,wght=100 and slnt=-20,wdth=200,wght=700.
    
    - Contour 7 in glyph 'uni20BF': becomes underweight between slnt=0,wdth=100,wght=100 and slnt=-20,wdth=200,wght=700.
    
    - Contour 5 in glyph 'whook': becomes underweight between slnt=-20,wdth=100,wght=100 and slnt=0,wdth=200,wght=100.
    
    - Contour order differs in glyph 'blinebelow': [0, 1, 2, 3, 4] in slnt=0,wdth=200,wght=100, [4, 1, 2, 3, 0] in slnt=-20,wdth=200,wght=100.
    
    - Contour 4 in glyph 'Nhookleft': becomes underweight between slnt=-20,wdth=100,wght=100 and slnt=0,wdth=200,wght=100.
    
    - Contour 4 in glyph 'nhookleft': becomes underweight between slnt=-20,wdth=100,wght=100 and slnt=0,wdth=200,wght=100.
    
    - Contour 1 in glyph 'uni0312': becomes underweight between slnt=-20,wdth=100,wght=100 and slnt=0,wdth=200,wght=100.
    
    - Contour order differs in glyph 'gamma-latin': [0, 1, 2] in slnt=-20,wdth=100,wght=100, [1, 0, 2] in slnt=0,wdth=200,wght=100.
    
    - Contour 5 in glyph 'dhook': becomes underweight between slnt=-20,wdth=100,wght=100 and slnt=0,wdth=200,wght=100.
    
    - Contour 5 in glyph 'yhook': becomes underweight between slnt=-20,wdth=100,wght=100 and slnt=0,wdth=200,wght=100.
    
    - Contour 4 in glyph 'khook': becomes underweight between slnt=-20,wdth=100,wght=100 and slnt=0,wdth=200,wght=100.
    
    - Contour 4 in glyph 'Chook': becomes underweight between slnt=-20,wdth=100,wght=100 and slnt=0,wdth=200,wght=100.
    
    - Contour 3 in glyph 'Dcroat': becomes underweight between slnt=0,wdth=100,wght=100 and slnt=-20,wdth=200,wght=700.
    
    - Contour 4 in glyph 'chook': becomes underweight between slnt=-20,wdth=100,wght=100 and slnt=0,wdth=200,wght=100.
    
    - Contour 5 in glyph 'Yhook': becomes underweight between slnt=-20,wdth=100,wght=100 and slnt=0,wdth=200,wght=100.
    
    - Contour 4 in glyph 'hhook': becomes underweight between slnt=-20,wdth=100,wght=100 and slnt=0,wdth=200,wght=100.
    
    - Contour 5 in glyph 'bhook': becomes underweight between slnt=-20,wdth=100,wght=100 and slnt=0,wdth=200,wght=100.
    
    - Contour 4 in glyph 'Fhook': becomes underweight between slnt=-20,wdth=100,wght=100 and slnt=0,wdth=200,wght=100.
    
    - Contour order differs in glyph 'Gamma-latin': [0, 1, 2] in slnt=-20,wdth=100,wght=100, [1, 0, 2] in slnt=0,wdth=200,wght=100.
    
    - Contour 6 in glyph 'ghook': becomes underweight between slnt=-20,wdth=100,wght=100 and slnt=0,wdth=200,wght=100.
    
    - Contour order differs in glyph 'Ramshorn': [0, 1, 2] in slnt=-20,wdth=100,wght=100, [1, 0, 2] in slnt=0,wdth=200,wght=100.
    
    - Contour order differs in glyph 'ramshorn': [0, 1, 2] in slnt=-20,wdth=100,wght=100, [1, 0, 2] in slnt=0,wdth=200,wght=100.
    
    - Contour 1 start point differs in glyph 'ramshorn' between location slnt=-20,wdth=100,wght=100 and location slnt=0,wdth=200,wght=100
    
    - Contour 3 in glyph 'thook': becomes underweight between slnt=0,wdth=100,wght=700 and slnt=-20,wdth=100,wght=700.
    
    - Contour 4 in glyph 'thook': becomes underweight between slnt=0,wdth=100,wght=700 and slnt=-20,wdth=100,wght=700.
    
    - Contour 3 in glyph 'thook': becomes underweight between slnt=-20,wdth=100,wght=700 and slnt=0,wdth=200,wght=700.
    
    - Contour 4 in glyph 'thook': becomes underweight between slnt=-20,wdth=100,wght=700 and slnt=0,wdth=200,wght=700.
    
    - Contour 3 in glyph 'thook': becomes underweight between slnt=-20,wdth=100,wght=100 and slnt=0,wdth=200,wght=100.
    
    - Contour 4 in glyph 'thook': becomes underweight between slnt=-20,wdth=100,wght=100 and slnt=0,wdth=200,wght=100.
    
    - Contour 3 in glyph 'thook': becomes underweight between slnt=0,wdth=200,wght=100 and slnt=-20,wdth=200,wght=100.
    
    - Contour 4 in glyph 'thook': becomes underweight between slnt=0,wdth=200,wght=100 and slnt=-20,wdth=200,wght=100.
    
    - Contour 5 in glyph 'phook': becomes underweight between slnt=-20,wdth=100,wght=100 and slnt=0,wdth=200,wght=100.
    
    - Contour 4 start point differs in glyph 'uni0BAF' between location slnt=-20,wdth=200,wght=700 and location slnt=-20,wdth=100,wght=100
    
    - Contour 4 start point differs in glyph 'uni0BAF' between location slnt=-20,wdth=100,wght=100 and location slnt=0,wdth=200,wght=100
    
    - Contour 5 in glyph 'Whook': becomes underweight between slnt=-20,wdth=100,wght=100 and slnt=0,wdth=200,wght=100.
    
    - Contour 5 in glyph 'Ghook': becomes underweight between slnt=-20,wdth=100,wght=100 and slnt=0,wdth=200,wght=100.
    
    [code: interpolation-issues]

Check that legacy accents aren't used in composite glyphs.

Check ID: <FontBakeryCheck:legacy_accents>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    Looks good!

Are there caret positions declared for every ligature?

Check ID: <FontBakeryCheck:ligature_carets>
⚠️ Samaano[slnt,wdth,wght].ttf
  • ⚠️ WARN

    This font lacks caret positioning values for these ligature glyphs: - j_uni0308

    - j_uni0311
    
    - uni1ECB_uni0301
    
    [code: incomplete-caret-pos-data]

Checking Vertical Metric Linegaps.

Check ID: <FontBakeryCheck:linegaps>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    OS/2 sTypoLineGap and hhea lineGap are both 0.

Ensure variable fonts include an avar table.

Check ID: <FontBakeryCheck:mandatory_avar_table>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Font contains '.notdef' as its first glyph?

Check ID: <FontBakeryCheck:mandatory_glyphs>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Check math signs have the same width.

Check ID: <FontBakeryCheck:math_signs_width>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    Looks good.

Ensure small caps glyphs are available.

Check ID: <FontBakeryCheck:missing_small_caps_glyphs>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Are there disallowed characters in the NAME table?

Check ID: <FontBakeryCheck:name/char_restrictions>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Combined length of family and style must not exceed 32 characters.

Check ID: <FontBakeryCheck:name/family_and_style_max_length>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Name table records must not have trailing spaces.

Check ID: <FontBakeryCheck:name/trailing_spaces>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    No trailing spaces on name table entries.

Description strings in the name table must not contain copyright info.

Check ID: <FontBakeryCheck:name/no_copyright_on_description>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Check name table IDs 1, 2, 16, 17 to conform to Italic style.

Check ID: <FontBakeryCheck:name/italic_names>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Font is not Italic.

Ensure glyphs do not have components which are themselves components.

Check ID: <FontBakeryCheck:nested_components>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Checking OS/2 Metrics match hhea Metrics.

Check ID: <FontBakeryCheck:os2_metrics_match_hhea>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    OS/2.sTypoAscender/Descender values match hhea.ascent/descent.

Checking with ots-sanitize.

Check ID: <FontBakeryCheck:ots>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Check there are no overlapping path segments

Check ID: <FontBakeryCheck:overlapping_path_segments>
⚠️ Samaano[slnt,wdth,wght].ttf
  • ⚠️ WARN

    The following glyphs have overlapping path segments:

    * Abreve (U+0102): L<<710.0,1769.0>--<710.0,1656.0>> has the same coordinates as a previous segment.
    
    * Abreve (U+0102): L<<386.0,1769.0>--<386.0,1656.0>> has the same coordinates as a previous segment.
    
    * Atilde (U+00C3): L<<337.0,1857.0>--<337.0,1758.0>> has the same coordinates as a previous segment.
    
    * Atilde (U+00C3): L<<687.0,1697.0>--<687.0,1796.0>> has the same coordinates as a previous segment.
    
    * B (U+0042): L<<433.0,1023.0>--<433.0,820.0>> has the same coordinates as a previous segment.
    
    * B (U+0042): L<<442.0,766.0>--<442.0,567.0>> has the same coordinates as a previous segment.
    
    * B (U+0042): L<<433.0,1537.0>--<433.0,1331.0>> has the same coordinates as a previous segment.
    
    * Bdotbelow (U+1E04): L<<433.0,1023.0>--<433.0,820.0>> has the same coordinates as a previous segment.
    
    * Bdotbelow (U+1E04): L<<442.0,766.0>--<442.0,567.0>> has the same coordinates as a previous segment.
    
    * Bdotbelow (U+1E04): L<<433.0,1537.0>--<433.0,1331.0>> has the same coordinates as a previous segment.
    
    * Beta (U+0392): L<<433.0,1023.0>--<433.0,820.0>> has the same coordinates as a previous segment.
    
    * Beta (U+0392): L<<442.0,766.0>--<442.0,567.0>> has the same coordinates as a previous segment.
    
    * Beta (U+0392): L<<433.0,1537.0>--<433.0,1331.0>> has the same coordinates as a previous segment.
    
    * Beta-latin (U+A7B4): L<<433.0,1023.0>--<433.0,820.0>> has the same coordinates as a previous segment.
    
    * Beta-latin (U+A7B4): L<<442.0,766.0>--<442.0,567.0>> has the same coordinates as a previous segment.
    
    * Beta-latin (U+A7B4): L<<433.0,1537.0>--<433.0,1331.0>> has the same coordinates as a previous segment.
    
    * Bhook (U+0181): L<<433.0,1023.0>--<433.0,820.0>> has the same coordinates as a previous segment.
    
    * Bhook (U+0181): L<<442.0,766.0>--<442.0,567.0>> has the same coordinates as a previous segment.
    
    * Bhook (U+0181): L<<433.0,1537.0>--<433.0,1331.0>> has the same coordinates as a previous segment.
    
    * Blinebelow (U+1E06): L<<433.0,1023.0>--<433.0,820.0>> has the same coordinates as a previous segment.
    
    * Blinebelow (U+1E06): L<<442.0,766.0>--<442.0,567.0>> has the same coordinates as a previous segment.
    
    * Blinebelow (U+1E06): L<<433.0,1537.0>--<433.0,1331.0>> has the same coordinates as a previous segment.
    
    * Btopbar (U+0182): L<<442.0,766.0>--<442.0,567.0>> has the same coordinates as a previous segment.
    
    * D.circled (U+24B9): L<<480.0,1084.0>--<480.0,1004.0>> has the same coordinates as a previous segment.
    
    * Ebreve (U+0114): L<<655.0,1769.0>--<655.0,1656.0>> has the same coordinates as a previous segment.
    
    * Ebreve (U+0114): L<<331.0,1769.0>--<331.0,1656.0>> has the same coordinates as a previous segment.
    
    * Ecedillabreve (U+1E1C): L<<655.0,1769.0>--<655.0,1656.0>> has the same coordinates as a previous segment.
    
    * Ecedillabreve (U+1E1C): L<<331.0,1769.0>--<331.0,1656.0>> has the same coordinates as a previous segment.
    
    * Etildebelow (U+1E1A): L<<381.0,-134.0>--<381.0,-233.0>> has the same coordinates as a previous segment.
    
    * Etildebelow (U+1E1A): L<<731.0,-294.0>--<731.0,-195.0>> has the same coordinates as a previous segment.
    
    * Euro (U+20AC): L<<324.0,179.0>--<514.0,179.0>> has the same coordinates as a previous segment.
    
    * Gbreve (U+011E): L<<687.0,1777.0>--<687.0,1664.0>> has the same coordinates as a previous segment.
    
    * Gbreve (U+011E): L<<363.0,1777.0>--<363.0,1664.0>> has the same coordinates as a previous segment.
    
    * Ibreve (U+012C): L<<655.0,1769.0>--<655.0,1656.0>> has the same coordinates as a previous segment.
    
    * Ibreve (U+012C): L<<331.0,1769.0>--<331.0,1656.0>> has the same coordinates as a previous segment.
    
    * Itilde (U+0128): L<<282.0,1857.0>--<282.0,1758.0>> has the same coordinates as a previous segment.
    
    * Itilde (U+0128): L<<632.0,1697.0>--<632.0,1796.0>> has the same coordinates as a previous segment.
    
    * Itildebelow (U+1E2C): L<<385.0,-147.0>--<385.0,-246.0>> has the same coordinates as a previous segment.
    
    * Itildebelow (U+1E2C): L<<735.0,-307.0>--<735.0,-208.0>> has the same coordinates as a previous segment.
    
    * Ntilde (U+00D1): L<<300.0,1858.0>--<300.0,1759.0>> has the same coordinates as a previous segment.
    
    * Ntilde (U+00D1): L<<650.0,1698.0>--<650.0,1797.0>> has the same coordinates as a previous segment.
    
    * Obreve (U+014E): L<<641.0,1774.0>--<641.0,1661.0>> has the same coordinates as a previous segment.
    
    * Obreve (U+014E): L<<317.0,1774.0>--<317.0,1661.0>> has the same coordinates as a previous segment.
    
    * Otilde (U+00D5): L<<366.0,1846.0>--<366.0,1747.0>> has the same coordinates as a previous segment.
    
    * Otilde (U+00D5): L<<716.0,1686.0>--<716.0,1785.0>> has the same coordinates as a previous segment.
    
    * S (U+0053): L<<146.0,1028.0>--<348.0,1028.0>> has the same coordinates as a previous segment.
    
    * S (U+0053): L<<918.0,355.0>--<717.0,355.0>> has the same coordinates as a previous segment.
    
    * Sacute (U+015A): L<<146.0,1028.0>--<348.0,1028.0>> has the same coordinates as a previous segment.
    
    * Sacute (U+015A): L<<918.0,355.0>--<717.0,355.0>> has the same coordinates as a previous segment.
    
    * Scaron (U+0160): L<<146.0,1028.0>--<348.0,1028.0>> has the same coordinates as a previous segment.
    
    * Scaron (U+0160): L<<918.0,355.0>--<717.0,355.0>> has the same coordinates as a previous segment.
    
    * Scedilla (U+015E): L<<146.0,1028.0>--<348.0,1028.0>> has the same coordinates as a previous segment.
    
    * Scedilla (U+015E): L<<918.0,355.0>--<717.0,355.0>> has the same coordinates as a previous segment.
    
    * Scircumflex (U+015C): L<<146.0,1028.0>--<348.0,1028.0>> has the same coordinates as a previous segment.
    
    * Scircumflex (U+015C): L<<918.0,355.0>--<717.0,355.0>> has the same coordinates as a previous segment.
    
    * Ubreve (U+016C): L<<693.0,1770.0>--<693.0,1657.0>> has the same coordinates as a previous segment.
    
    * Ubreve (U+016C): L<<369.0,1770.0>--<369.0,1657.0>> has the same coordinates as a previous segment.
    
    * Utilde (U+0168): L<<320.0,1858.0>--<320.0,1759.0>> has the same coordinates as a previous segment.
    
    * Utilde (U+0168): L<<670.0,1698.0>--<670.0,1797.0>> has the same coordinates as a previous segment.
    
    * Utildebelow (U+1E74): L<<398.0,-138.0>--<398.0,-237.0>> has the same coordinates as a previous segment.
    
    * Utildebelow (U+1E74): L<<748.0,-298.0>--<748.0,-199.0>> has the same coordinates as a previous segment.
    
    * abreve (U+0103): L<<685.0,1262.0>--<685.0,1149.0>> has the same coordinates as a previous segment.
    
    * abreve (U+0103): L<<361.0,1262.0>--<361.0,1149.0>> has the same coordinates as a previous segment.
    
    * approxequal (U+2248): L<<330.0,559.0>--<330.0,395.0>> has the same coordinates as a previous segment.
    
    * approxequal (U+2248): L<<680.0,334.0>--<680.0,498.0>> has the same coordinates as a previous segment.
    
    * approxequal (U+2248): L<<330.0,898.0>--<330.0,716.0>> has the same coordinates as a previous segment.
    
    * approxequal (U+2248): L<<680.0,655.0>--<680.0,837.0>> has the same coordinates as a previous segment.
    
    * asciitilde (U+007E): L<<330.0,815.0>--<330.0,663.0>> has the same coordinates as a previous segment.
    
    * asciitilde (U+007E): L<<680.0,602.0>--<680.0,754.0>> has the same coordinates as a previous segment.
    
    * atilde (U+00E3): L<<312.0,1350.0>--<312.0,1251.0>> has the same coordinates as a previous segment.
    
    * atilde (U+00E3): L<<662.0,1190.0>--<662.0,1289.0>> has the same coordinates as a previous segment.
    
    * baht (U+0E3F): L<<433.0,1023.0>--<433.0,820.0>> has the same coordinates as a previous segment.
    
    * baht (U+0E3F): L<<442.0,766.0>--<442.0,567.0>> has the same coordinates as a previous segment.
    
    * baht (U+0E3F): L<<433.0,1537.0>--<433.0,1331.0>> has the same coordinates as a previous segment.
    
    * braceleft (U+007B): L<<421.0,838.0>--<567.0,838.0>> has the same coordinates as a previous segment.
    
    * braceleft (U+007B): L<<132.0,630.0>--<132.0,690.0>> has the same coordinates as a previous segment.
    
    * braceright (U+007D): L<<710.0,690.0>--<710.0,630.0>> has the same coordinates as a previous segment.
    
    * braceright (U+007D): L<<423.0,424.0>--<263.0,424.0>> has the same coordinates as a previous segment.
    
    * breve (U+02D8): L<<656.0,1548.0>--<656.0,1480.0>> has the same coordinates as a previous segment.
    
    * breve (U+02D8): L<<332.0,1548.0>--<332.0,1480.0>> has the same coordinates as a previous segment.
    
    * brevecomb_acutecomb: L<<191.0,1214.0>--<191.0,1101.0>> has the same coordinates as a previous segment.
    
    * brevecomb_acutecomb: L<<-133.0,1214.0>--<-133.0,1101.0>> has the same coordinates as a previous segment.
    
    * brevecomb_gravecomb: L<<191.0,1214.0>--<191.0,1101.0>> has the same coordinates as a previous segment.
    
    * brevecomb_gravecomb: L<<-133.0,1214.0>--<-133.0,1101.0>> has the same coordinates as a previous segment.
    
    * brevecomb_hookabovecomb: L<<173.0,1141.0>--<173.0,1028.0>> has the same coordinates as a previous segment.
    
    * brevecomb_hookabovecomb: L<<-151.0,1141.0>--<-151.0,1028.0>> has the same coordinates as a previous segment.
    
    * brevecomb_tildecomb: L<<182.0,904.0>--<182.0,791.0>> has the same coordinates as a previous segment.
    
    * brevecomb_tildecomb: L<<-142.0,904.0>--<-142.0,791.0>> has the same coordinates as a previous segment.
    
    * brevecomb_tildecomb: L<<-154.0,1241.0>--<-154.0,1142.0>> has the same coordinates as a previous segment.
    
    * brevecomb_tildecomb: L<<196.0,1081.0>--<196.0,1180.0>> has the same coordinates as a previous segment.
    
    * breveinvertedbelowcomb (U+032F): L<<-185.0,87.0>--<-185.0,155.0>> has the same coordinates as a previous segment.
    
    * breveinvertedbelowcomb (U+032F): L<<139.0,87.0>--<139.0,155.0>> has the same coordinates as a previous segment.
    
    * circumflexcomb_tildecomb: L<<-158.0,1209.0>--<-158.0,1110.0>> has the same coordinates as a previous segment.
    
    * circumflexcomb_tildecomb: L<<192.0,1049.0>--<192.0,1148.0>> has the same coordinates as a previous segment.
    
    * dollar (U+0024): L<<126.0,1028.0>--<331.0,1028.0>> has the same coordinates as a previous segment.
    
    * dollar (U+0024): L<<898.0,355.0>--<692.0,355.0>> has the same coordinates as a previous segment.
    
    * ebreve (U+0115): L<<697.0,1294.0>--<697.0,1181.0>> has the same coordinates as a previous segment.
    
    * ebreve (U+0115): L<<373.0,1294.0>--<373.0,1181.0>> has the same coordinates as a previous segment.
    
    * ecedillabreve (U+1E1D): L<<697.0,1294.0>--<697.0,1181.0>> has the same coordinates as a previous segment.
    
    * ecedillabreve (U+1E1D): L<<373.0,1294.0>--<373.0,1181.0>> has the same coordinates as a previous segment.
    
    * gbreve (U+011F): L<<763.0,1304.0>--<763.0,1191.0>> has the same coordinates as a previous segment.
    
    * gbreve (U+011F): L<<439.0,1304.0>--<439.0,1191.0>> has the same coordinates as a previous segment.
    
    * greater (U+003E): L<<922.0,777.0>--<924.0,568.0>> has the same coordinates as a previous segment.
    
    * greaterequal (U+2265): L<<922.0,777.0>--<924.0,568.0>> has the same coordinates as a previous segment.
    
    * guillemotleft (U+00AB): L<<134.0,454.0>--<134.0,609.0>> has the same coordinates as a previous segment.
    
    * guillemotleft (U+00AB): L<<549.0,454.0>--<549.0,609.0>> has the same coordinates as a previous segment.
    
    * guillemotright (U+00BB): L<<920.0,609.0>--<920.0,454.0>> has the same coordinates as a previous segment.
    
    * guillemotright (U+00BB): L<<505.0,609.0>--<505.0,454.0>> has the same coordinates as a previous segment.
    
    * guilsinglleft (U+2039): L<<103.0,569.0>--<103.0,777.0>> has the same coordinates as a previous segment.
    
    * guilsinglright (U+203A): L<<922.0,777.0>--<924.0,568.0>> has the same coordinates as a previous segment.
    
    * hryvnia (U+20B4): L<<347.0,355.0>--<146.0,355.0>> has the same coordinates as a previous segment.
    
    * hryvnia (U+20B4): L<<716.0,1028.0>--<918.0,1028.0>> has the same coordinates as a previous segment.
    
    * ibreve (U+012D): L<<677.0,1319.0>--<677.0,1206.0>> has the same coordinates as a previous segment.
    
    * ibreve (U+012D): L<<353.0,1319.0>--<353.0,1206.0>> has the same coordinates as a previous segment.
    
    * itilde (U+0129): L<<304.0,1407.0>--<304.0,1308.0>> has the same coordinates as a previous segment.
    
    * itilde (U+0129): L<<654.0,1247.0>--<654.0,1346.0>> has the same coordinates as a previous segment.
    
    * itildebelow (U+1E2D): L<<389.0,-142.0>--<389.0,-241.0>> has the same coordinates as a previous segment.
    
    * itildebelow (U+1E2D): L<<739.0,-302.0>--<739.0,-203.0>> has the same coordinates as a previous segment.
    
    * j_uni0303: L<<538.0,1181.0>--<538.0,1082.0>> has the same coordinates as a previous segment.
    
    * j_uni0303: L<<888.0,1021.0>--<888.0,1120.0>> has the same coordinates as a previous segment.
    
    * j_uni0311: L<<541.0,1099.0>--<541.0,1167.0>> has the same coordinates as a previous segment.
    
    * j_uni0311: L<<865.0,1099.0>--<865.0,1167.0>> has the same coordinates as a previous segment.
    
    * less (U+003C): L<<103.0,569.0>--<103.0,777.0>> has the same coordinates as a previous segment.
    
    * lessequal (U+2264): L<<103.0,569.0>--<103.0,777.0>> has the same coordinates as a previous segment.
    
    * ntilde (U+00F1): L<<304.0,1374.0>--<304.0,1275.0>> has the same coordinates as a previous segment.
    
    * ntilde (U+00F1): L<<654.0,1214.0>--<654.0,1313.0>> has the same coordinates as a previous segment.
    
    * obreve (U+014F): L<<689.0,1286.0>--<689.0,1173.0>> has the same coordinates as a previous segment.
    
    * obreve (U+014F): L<<365.0,1286.0>--<365.0,1173.0>> has the same coordinates as a previous segment.
    
    * otilde (U+00F5): L<<316.0,1374.0>--<316.0,1275.0>> has the same coordinates as a previous segment.
    
    * otilde (U+00F5): L<<666.0,1214.0>--<666.0,1313.0>> has the same coordinates as a previous segment.
    
    * parenleft (U+0028): L<<324.0,179.0>--<514.0,179.0>> has the same coordinates as a previous segment.
    
    * parenright (U+0029): L<<678.0,1023.0>--<488.0,1023.0>> has the same coordinates as a previous segment.
    
    * parenright (U+0029): L<<488.0,179.0>--<678.0,179.0>> has the same coordinates as a previous segment.
    
    * peseta (U+20A7): L<<932.0,173.0>--<881.0,173.0>> has the same coordinates as a previous segment.
    
    * radical (U+221A): L<<688.0,117.0>--<504.0,117.0>> has the same coordinates as a previous segment.
    
    * ringhalfleft (U+02BF): L<<472.0,1200.0>--<404.0,1200.0>> has the same coordinates as a previous segment.
    
    * ringhalfleft (U+02BF): L<<472.0,1524.0>--<404.0,1524.0>> has the same coordinates as a previous segment.
    
    * ringhalfright (U+02BE): L<<523.0,1530.0>--<591.0,1530.0>> has the same coordinates as a previous segment.
    
    * ringhalfright (U+02BE): L<<523.0,1206.0>--<591.0,1206.0>> has the same coordinates as a previous segment.
    
    * rupee (U+20A8): L<<853.0,293.0>--<753.0,293.0>> has the same coordinates as a previous segment.
    
    * s (U+0073): L<<791.0,293.0>--<591.0,293.0>> has the same coordinates as a previous segment.
    
    * sacute (U+015B): L<<791.0,293.0>--<591.0,293.0>> has the same coordinates as a previous segment.
    
    * scaron (U+0161): L<<791.0,293.0>--<591.0,293.0>> has the same coordinates as a previous segment.
    
    * scedilla (U+015F): L<<791.0,293.0>--<591.0,293.0>> has the same coordinates as a previous segment.
    
    * scircumflex (U+015D): L<<791.0,293.0>--<591.0,293.0>> has the same coordinates as a previous segment.
    
    * section (U+00A7): L<<146.0,605.0>--<348.0,605.0>> has the same coordinates as a previous segment.
    
    * section (U+00A7): L<<927.0,95.0>--<726.0,95.0>> has the same coordinates as a previous segment.
    
    * section (U+00A7): L<<146.0,1237.0>--<348.0,1237.0>> has the same coordinates as a previous segment.
    
    * section (U+00A7): L<<918.0,442.0>--<717.0,442.0>> has the same coordinates as a previous segment.
    
    * sheqel (U+20AA): L<<620.0,1278.0>--<768.0,1277.0>> has the same coordinates as a previous segment.
    
    * sheqel (U+20AA): L<<465.0,264.0>--<317.0,265.0>> has the same coordinates as a previous segment.
    
    * tilde (U+02DC): L<<359.0,1607.0>--<359.0,1528.0>> has the same coordinates as a previous segment.
    
    * tilde (U+02DC): L<<639.0,1479.0>--<639.0,1558.0>> has the same coordinates as a previous segment.
    
    * tildebelowcomb (U+0330): L<<-164.0,73.0>--<-164.0,-26.0>> has the same coordinates as a previous segment.
    
    * tildebelowcomb (U+0330): L<<186.0,-87.0>--<186.0,12.0>> has the same coordinates as a previous segment.
    
    * tildecomb (U+0303): L<<-194.0,994.0>--<-194.0,895.0>> has the same coordinates as a previous segment.
    
    * tildecomb (U+0303): L<<156.0,834.0>--<156.0,933.0>> has the same coordinates as a previous segment.
    
    * ubreve (U+016D): L<<625.0,1274.0>--<625.0,1161.0>> has the same coordinates as a previous segment.
    
    * ubreve (U+016D): L<<301.0,1274.0>--<301.0,1161.0>> has the same coordinates as a previous segment.
    
    * undertie (U+203F): L<<750.0,-252.0>--<750.0,-391.0>> has the same coordinates as a previous segment.
    
    * undertie (U+203F): L<<304.0,-252.0>--<304.0,-391.0>> has the same coordinates as a previous segment.
    
    * uni012F_uni0303: L<<313.0,1258.0>--<313.0,1159.0>> has the same coordinates as a previous segment.
    
    * uni012F_uni0303: L<<663.0,1098.0>--<663.0,1197.0>> has the same coordinates as a previous segment.
    
    * uni0202 (U+0202): L<<330.0,1695.0>--<330.0,1763.0>> has the same coordinates as a previous segment.
    
    * uni0202 (U+0202): L<<654.0,1695.0>--<654.0,1763.0>> has the same coordinates as a previous segment.
    
    * uni0203 (U+0203): L<<305.0,1188.0>--<305.0,1256.0>> has the same coordinates as a previous segment.
    
    * uni0203 (U+0203): L<<629.0,1188.0>--<629.0,1256.0>> has the same coordinates as a previous segment.
    
    * uni0206 (U+0206): L<<275.0,1695.0>--<275.0,1763.0>> has the same coordinates as a previous segment.
    
    * uni0206 (U+0206): L<<599.0,1695.0>--<599.0,1763.0>> has the same coordinates as a previous segment.
    
    * uni0207 (U+0207): L<<317.0,1220.0>--<317.0,1288.0>> has the same coordinates as a previous segment.
    
    * uni0207 (U+0207): L<<641.0,1220.0>--<641.0,1288.0>> has the same coordinates as a previous segment.
    
    * uni020A (U+020A): L<<275.0,1695.0>--<275.0,1763.0>> has the same coordinates as a previous segment.
    
    * uni020A (U+020A): L<<599.0,1695.0>--<599.0,1763.0>> has the same coordinates as a previous segment.
    
    * uni020B (U+020B): L<<297.0,1245.0>--<297.0,1313.0>> has the same coordinates as a previous segment.
    
    * uni020B (U+020B): L<<621.0,1245.0>--<621.0,1313.0>> has the same coordinates as a previous segment.
    
    * uni020E (U+020E): L<<261.0,1700.0>--<261.0,1768.0>> has the same coordinates as a previous segment.
    
    * uni020E (U+020E): L<<585.0,1700.0>--<585.0,1768.0>> has the same coordinates as a previous segment.
    
    * uni020F (U+020F): L<<309.0,1212.0>--<309.0,1280.0>> has the same coordinates as a previous segment.
    
    * uni020F (U+020F): L<<633.0,1212.0>--<633.0,1280.0>> has the same coordinates as a previous segment.
    
    * uni0212 (U+0212): L<<285.0,1696.0>--<285.0,1764.0>> has the same coordinates as a previous segment.
    
    * uni0212 (U+0212): L<<609.0,1696.0>--<609.0,1764.0>> has the same coordinates as a previous segment.
    
    * uni0213 (U+0213): L<<309.0,1228.0>--<309.0,1296.0>> has the same coordinates as a previous segment.
    
    * uni0213 (U+0213): L<<633.0,1228.0>--<633.0,1296.0>> has the same coordinates as a previous segment.
    
    * uni0216 (U+0216): L<<313.0,1696.0>--<313.0,1764.0>> has the same coordinates as a previous segment.
    
    * uni0216 (U+0216): L<<637.0,1696.0>--<637.0,1764.0>> has the same coordinates as a previous segment.
    
    * uni0217 (U+0217): L<<245.0,1200.0>--<245.0,1268.0>> has the same coordinates as a previous segment.
    
    * uni0217 (U+0217): L<<569.0,1200.0>--<569.0,1268.0>> has the same coordinates as a previous segment.
    
    * uni0218 (U+0218): L<<146.0,1028.0>--<348.0,1028.0>> has the same coordinates as a previous segment.
    
    * uni0218 (U+0218): L<<918.0,355.0>--<717.0,355.0>> has the same coordinates as a previous segment.
    
    * uni0219 (U+0219): L<<791.0,293.0>--<591.0,293.0>> has the same coordinates as a previous segment.
    
    * uni022C (U+022C): L<<366.0,1846.0>--<366.0,1747.0>> has the same coordinates as a previous segment.
    
    * uni022C (U+022C): L<<716.0,1686.0>--<716.0,1785.0>> has the same coordinates as a previous segment.
    
    * uni022D (U+022D): L<<316.0,1374.0>--<316.0,1275.0>> has the same coordinates as a previous segment.
    
    * uni022D (U+022D): L<<666.0,1214.0>--<666.0,1313.0>> has the same coordinates as a previous segment.
    
    * uni0306 (U+0306): L<<182.0,904.0>--<182.0,791.0>> has the same coordinates as a previous segment.
    
    * uni0306 (U+0306): L<<-142.0,904.0>--<-142.0,791.0>> has the same coordinates as a previous segment.
    
    * uni0311 (U+0311): L<<-193.0,834.0>--<-193.0,902.0>> has the same coordinates as a previous segment.
    
    * uni0311 (U+0311): L<<131.0,834.0>--<131.0,902.0>> has the same coordinates as a previous segment.
    
    * uni032E (U+032E): L<<197.0,-173.0>--<197.0,-241.0>> has the same coordinates as a previous segment.
    
    * uni032E (U+032E): L<<-127.0,-173.0>--<-127.0,-241.0>> has the same coordinates as a previous segment.
    
    * uni0926_uni094D_uni092F.pres: L<<674.0,428.0>--<674.0,229.0>> has the same coordinates as a previous segment.
    
    * uni092F (U+092F): L<<318.0,846.0>--<528.0,846.0>> has the same coordinates as a previous segment.
    
    * uni092F_uni0930_uni094D.vatu: L<<318.0,846.0>--<528.0,846.0>> has the same coordinates as a previous segment.
    
    * uni092F_uni094D.half: L<<568.0,846.0>--<778.0,846.0>> has the same coordinates as a previous segment.
    
    * uni092F_uni094D.haln: L<<330.0,846.0>--<540.0,846.0>> has the same coordinates as a previous segment.
    
    * uni0930_uni094D.half: L<<696.0,802.0>--<696.0,603.0>> has the same coordinates as a previous segment.
    
    * uni0930_uni094D.rphf: L<<163.0,2162.0>--<163.0,1962.0>> has the same coordinates as a previous segment.
    
    * uni0930_uni094D_uni0902.abvs: L<<163.0,2162.0>--<163.0,1962.0>> has the same coordinates as a previous segment.
    
    * uni095F (U+095F): L<<318.0,846.0>--<528.0,846.0>> has the same coordinates as a previous segment.
    
    * uni095F_uni0930_uni094D.vatu: L<<318.0,846.0>--<528.0,846.0>> has the same coordinates as a previous segment.
    
    * uni095F_uni094D.half: L<<318.0,846.0>--<528.0,846.0>> has the same coordinates as a previous segment.
    
    * uni095F_uni094D.haln: L<<338.0,846.0>--<548.0,846.0>> has the same coordinates as a previous segment.
    
    * uni096A (U+096A): L<<158.0,317.0>--<358.0,317.0>> has the same coordinates as a previous segment.
    
    * uni097A (U+097A): L<<318.0,846.0>--<528.0,846.0>> has the same coordinates as a previous segment.
    
    * uni0B87 (U+0B87): L<<339.0,57.0>--<539.0,53.0>> has the same coordinates as a previous segment.
    
    * uni0B87 (U+0B87): L<<211.0,-410.0>--<11.0,-410.0>> has the same coordinates as a previous segment.
    
    * uni0B90 (U+0B90): L<<685.0,556.0>--<880.0,423.0>> has the same coordinates as a previous segment.
    
    * uni0B90 (U+0B90): L<<60.0,426.0>--<263.0,257.0>> has the same coordinates as a previous segment.
    
    * uni0B95_uni0BB7.akhn: L<<501.0,679.0>--<601.0,679.0>> has the same coordinates as a previous segment.
    
    * uni0B95_uni0BC2: L<<803.0,288.0>--<932.0,287.0>> has the same coordinates as a previous segment.
    
    * uni0B9C (U+0B9C): L<<685.0,556.0>--<880.0,423.0>> has the same coordinates as a previous segment.
    
    * uni0B9C (U+0B9C): L<<60.0,426.0>--<263.0,257.0>> has the same coordinates as a previous segment.
    
    * uni0BB0 (U+0BB0): L<<637.0,-15.0>--<841.0,-124.0>> has the same coordinates as a previous segment.
    
    * uni0BB4 (U+0BB4): L<<810.0,661.0>--<1010.0,661.0>> has the same coordinates as a previous segment.
    
    * uni0BB5 (U+0BB5): L<<438.0,682.0>--<637.0,680.0>> has the same coordinates as a previous segment.
    
    * uni0BB9 (U+0BB9): L<<325.0,682.0>--<465.0,680.0>> has the same coordinates as a previous segment.
    
    * uni0BF1 (U+0BF1): L<<283.0,1028.0>--<281.0,1216.0>> has the same coordinates as a previous segment.
    
    * uni0BF3 (U+0BF3): L<<438.0,682.0>--<637.0,680.0>> has the same coordinates as a previous segment.
    
    * uni0BF4 (U+0BF4): L<<931.0,1532.0>--<931.0,1628.0>> has the same coordinates as a previous segment.
    
    * uni0BF5 (U+0BF5): L<<360.0,676.0>--<457.0,678.0>> has the same coordinates as a previous segment.
    
    * uni0BF7 (U+0BF7): L<<856.0,213.0>--<916.0,212.0>> has the same coordinates as a previous segment.
    
    * uni0BF9 (U+0BF9): L<<625.0,1510.0>--<725.0,1509.0>> has the same coordinates as a previous segment.
    
    * uni0BFA (U+0BFA): L<<817.0,1451.0>--<897.0,1450.0>> has the same coordinates as a previous segment.
    
    * uni1E02 (U+1E02): L<<433.0,1023.0>--<433.0,820.0>> has the same coordinates as a previous segment.
    
    * uni1E02 (U+1E02): L<<442.0,766.0>--<442.0,567.0>> has the same coordinates as a previous segment.
    
    * uni1E02 (U+1E02): L<<433.0,1537.0>--<433.0,1331.0>> has the same coordinates as a previous segment.
    
    * uni1E2A (U+1E2A): L<<701.0,-203.0>--<701.0,-271.0>> has the same coordinates as a previous segment.
    
    * uni1E2A (U+1E2A): L<<377.0,-203.0>--<377.0,-271.0>> has the same coordinates as a previous segment.
    
    * uni1E2B (U+1E2B): L<<717.0,-215.0>--<717.0,-283.0>> has the same coordinates as a previous segment.
    
    * uni1E2B (U+1E2B): L<<393.0,-215.0>--<393.0,-283.0>> has the same coordinates as a previous segment.
    
    * uni1E4C (U+1E4C): L<<366.0,1846.0>--<366.0,1747.0>> has the same coordinates as a previous segment.
    
    * uni1E4C (U+1E4C): L<<716.0,1686.0>--<716.0,1785.0>> has the same coordinates as a previous segment.
    
    * uni1E4D (U+1E4D): L<<316.0,1374.0>--<316.0,1275.0>> has the same coordinates as a previous segment.
    
    * uni1E4D (U+1E4D): L<<666.0,1214.0>--<666.0,1313.0>> has the same coordinates as a previous segment.
    
    * uni1E4E (U+1E4E): L<<366.0,1846.0>--<366.0,1747.0>> has the same coordinates as a previous segment.
    
    * uni1E4E (U+1E4E): L<<716.0,1686.0>--<716.0,1785.0>> has the same coordinates as a previous segment.
    
    * uni1E4F (U+1E4F): L<<316.0,1374.0>--<316.0,1275.0>> has the same coordinates as a previous segment.
    
    * uni1E4F (U+1E4F): L<<666.0,1214.0>--<666.0,1313.0>> has the same coordinates as a previous segment.
    
    * uni1E60 (U+1E60): L<<146.0,1028.0>--<348.0,1028.0>> has the same coordinates as a previous segment.
    
    * uni1E60 (U+1E60): L<<918.0,355.0>--<717.0,355.0>> has the same coordinates as a previous segment.
    
    * uni1E61 (U+1E61): L<<791.0,293.0>--<591.0,293.0>> has the same coordinates as a previous segment.
    
    * uni1E62 (U+1E62): L<<146.0,1028.0>--<348.0,1028.0>> has the same coordinates as a previous segment.
    
    * uni1E62 (U+1E62): L<<918.0,355.0>--<717.0,355.0>> has the same coordinates as a previous segment.
    
    * uni1E63 (U+1E63): L<<791.0,293.0>--<591.0,293.0>> has the same coordinates as a previous segment.
    
    * uni1E64 (U+1E64): L<<146.0,1028.0>--<348.0,1028.0>> has the same coordinates as a previous segment.
    
    * uni1E64 (U+1E64): L<<918.0,355.0>--<717.0,355.0>> has the same coordinates as a previous segment.
    
    * uni1E65 (U+1E65): L<<791.0,293.0>--<591.0,293.0>> has the same coordinates as a previous segment.
    
    * uni1E66 (U+1E66): L<<146.0,1028.0>--<348.0,1028.0>> has the same coordinates as a previous segment.
    
    * uni1E66 (U+1E66): L<<918.0,355.0>--<717.0,355.0>> has the same coordinates as a previous segment.
    
    * uni1E67 (U+1E67): L<<791.0,293.0>--<591.0,293.0>> has the same coordinates as a previous segment.
    
    * uni1E68 (U+1E68): L<<146.0,1028.0>--<348.0,1028.0>> has the same coordinates as a previous segment.
    
    * uni1E68 (U+1E68): L<<918.0,355.0>--<717.0,355.0>> has the same coordinates as a previous segment.
    
    * uni1E69 (U+1E69): L<<791.0,293.0>--<591.0,293.0>> has the same coordinates as a previous segment.
    
    * uni1E78 (U+1E78): L<<320.0,1858.0>--<320.0,1759.0>> has the same coordinates as a previous segment.
    
    * uni1E78 (U+1E78): L<<670.0,1698.0>--<670.0,1797.0>> has the same coordinates as a previous segment.
    
    * uni1E79 (U+1E79): L<<252.0,1362.0>--<252.0,1263.0>> has the same coordinates as a previous segment.
    
    * uni1E79 (U+1E79): L<<602.0,1202.0>--<602.0,1301.0>> has the same coordinates as a previous segment.
    
    * uni1E7C (U+1E7C): L<<373.0,1828.0>--<373.0,1729.0>> has the same coordinates as a previous segment.
    
    * uni1E7C (U+1E7C): L<<723.0,1668.0>--<723.0,1767.0>> has the same coordinates as a previous segment.
    
    * uni1E7D (U+1E7D): L<<344.0,1338.0>--<344.0,1239.0>> has the same coordinates as a previous segment.
    
    * uni1E7D (U+1E7D): L<<694.0,1178.0>--<694.0,1277.0>> has the same coordinates as a previous segment.
    
    * uni1EAA (U+1EAA): L<<399.0,2109.0>--<399.0,2010.0>> has the same coordinates as a previous segment.
    
    * uni1EAA (U+1EAA): L<<749.0,1949.0>--<749.0,2048.0>> has the same coordinates as a previous segment.
    
    * uni1EAB (U+1EAB): L<<373.0,1577.0>--<373.0,1478.0>> has the same coordinates as a previous segment.
    
    * uni1EAB (U+1EAB): L<<723.0,1417.0>--<723.0,1516.0>> has the same coordinates as a previous segment.
    
    * uni1EAE (U+1EAE): L<<710.0,1769.0>--<710.0,1656.0>> has the same coordinates as a previous segment.
    
    * uni1EAE (U+1EAE): L<<386.0,1769.0>--<386.0,1656.0>> has the same coordinates as a previous segment.
    
    * uni1EAF (U+1EAF): L<<685.0,1262.0>--<685.0,1149.0>> has the same coordinates as a previous segment.
    
    * uni1EAF (U+1EAF): L<<361.0,1262.0>--<361.0,1149.0>> has the same coordinates as a previous segment.
    
    * uni1EB0 (U+1EB0): L<<710.0,1769.0>--<710.0,1656.0>> has the same coordinates as a previous segment.
    
    * uni1EB0 (U+1EB0): L<<386.0,1769.0>--<386.0,1656.0>> has the same coordinates as a previous segment.
    
    * uni1EB1 (U+1EB1): L<<685.0,1262.0>--<685.0,1149.0>> has the same coordinates as a previous segment.
    
    * uni1EB1 (U+1EB1): L<<361.0,1262.0>--<361.0,1149.0>> has the same coordinates as a previous segment.
    
    * uni1EB2 (U+1EB2): L<<710.0,1769.0>--<710.0,1656.0>> has the same coordinates as a previous segment.
    
    * uni1EB2 (U+1EB2): L<<386.0,1769.0>--<386.0,1656.0>> has the same coordinates as a previous segment.
    
    * uni1EB3 (U+1EB3): L<<685.0,1262.0>--<685.0,1149.0>> has the same coordinates as a previous segment.
    
    * uni1EB3 (U+1EB3): L<<361.0,1262.0>--<361.0,1149.0>> has the same coordinates as a previous segment.
    
    * uni1EB4 (U+1EB4): L<<428.0,2077.0>--<428.0,1978.0>> has the same coordinates as a previous segment.
    
    * uni1EB4 (U+1EB4): L<<778.0,1917.0>--<778.0,2016.0>> has the same coordinates as a previous segment.
    
    * uni1EB4 (U+1EB4): L<<710.0,1769.0>--<710.0,1656.0>> has the same coordinates as a previous segment.
    
    * uni1EB4 (U+1EB4): L<<386.0,1769.0>--<386.0,1656.0>> has the same coordinates as a previous segment.
    
    * uni1EB5 (U+1EB5): L<<399.0,1521.0>--<399.0,1422.0>> has the same coordinates as a previous segment.
    
    * uni1EB5 (U+1EB5): L<<749.0,1361.0>--<749.0,1460.0>> has the same coordinates as a previous segment.
    
    * uni1EB5 (U+1EB5): L<<685.0,1262.0>--<685.0,1149.0>> has the same coordinates as a previous segment.
    
    * uni1EB5 (U+1EB5): L<<361.0,1262.0>--<361.0,1149.0>> has the same coordinates as a previous segment.
    
    * uni1EB6 (U+1EB6): L<<688.0,1783.0>--<688.0,1670.0>> has the same coordinates as a previous segment.
    
    * uni1EB6 (U+1EB6): L<<364.0,1783.0>--<364.0,1670.0>> has the same coordinates as a previous segment.
    
    * uni1EB7 (U+1EB7): L<<676.0,1258.0>--<676.0,1145.0>> has the same coordinates as a previous segment.
    
    * uni1EB7 (U+1EB7): L<<352.0,1258.0>--<352.0,1145.0>> has the same coordinates as a previous segment.
    
    * uni1EBC (U+1EBC): L<<282.0,1857.0>--<282.0,1758.0>> has the same coordinates as a previous segment.
    
    * uni1EBC (U+1EBC): L<<632.0,1697.0>--<632.0,1796.0>> has the same coordinates as a previous segment.
    
    * uni1EBD (U+1EBD): L<<324.0,1382.0>--<324.0,1283.0>> has the same coordinates as a previous segment.
    
    * uni1EBD (U+1EBD): L<<674.0,1222.0>--<674.0,1321.0>> has the same coordinates as a previous segment.
    
    * uni1EC4 (U+1EC4): L<<338.0,2089.0>--<338.0,1990.0>> has the same coordinates as a previous segment.
    
    * uni1EC4 (U+1EC4): L<<688.0,1929.0>--<688.0,2028.0>> has the same coordinates as a previous segment.
    
    * uni1EC5 (U+1EC5): L<<360.0,1660.0>--<360.0,1561.0>> has the same coordinates as a previous segment.
    
    * uni1EC5 (U+1EC5): L<<710.0,1500.0>--<710.0,1599.0>> has the same coordinates as a previous segment.
    
    * uni1ECB_uni0303: L<<337.0,1282.0>--<337.0,1183.0>> has the same coordinates as a previous segment.
    
    * uni1ECB_uni0303: L<<687.0,1122.0>--<687.0,1221.0>> has the same coordinates as a previous segment.
    
    * uni1ED6 (U+1ED6): L<<304.0,2204.0>--<304.0,2105.0>> has the same coordinates as a previous segment.
    
    * uni1ED6 (U+1ED6): L<<654.0,2044.0>--<654.0,2143.0>> has the same coordinates as a previous segment.
    
    * uni1ED7 (U+1ED7): L<<355.0,1578.0>--<355.0,1479.0>> has the same coordinates as a previous segment.
    
    * uni1ED7 (U+1ED7): L<<705.0,1418.0>--<705.0,1517.0>> has the same coordinates as a previous segment.
    
    * uni1EE0 (U+1EE0): L<<297.0,1996.0>--<297.0,1897.0>> has the same coordinates as a previous segment.
    
    * uni1EE0 (U+1EE0): L<<647.0,1836.0>--<647.0,1935.0>> has the same coordinates as a previous segment.
    
    * uni1EE1 (U+1EE1): L<<255.0,1479.0>--<255.0,1380.0>> has the same coordinates as a previous segment.
    
    * uni1EE1 (U+1EE1): L<<605.0,1319.0>--<605.0,1418.0>> has the same coordinates as a previous segment.
    
    * uni1EEE (U+1EEE): L<<320.0,1903.0>--<320.0,1804.0>> has the same coordinates as a previous segment.
    
    * uni1EEE (U+1EEE): L<<670.0,1743.0>--<670.0,1842.0>> has the same coordinates as a previous segment.
    
    * uni1EEF (U+1EEF): L<<237.0,1395.0>--<237.0,1296.0>> has the same coordinates as a previous segment.
    
    * uni1EEF (U+1EEF): L<<587.0,1235.0>--<587.0,1334.0>> has the same coordinates as a previous segment.
    
    * uni1EF8 (U+1EF8): L<<336.0,1854.0>--<336.0,1755.0>> has the same coordinates as a previous segment.
    
    * uni1EF8 (U+1EF8): L<<686.0,1694.0>--<686.0,1793.0>> has the same coordinates as a previous segment.
    
    * uni1EF9 (U+1EF9): L<<340.0,1358.0>--<340.0,1259.0>> has the same coordinates as a previous segment.
    
    * uni1EF9 (U+1EF9): L<<690.0,1198.0>--<690.0,1297.0>> has the same coordinates as a previous segment.
    
    * uni207D (U+207D): L<<406.0,771.0>--<513.0,771.0>> has the same coordinates as a previous segment.
    
    * uni207E (U+207E): L<<605.0,1243.0>--<499.0,1243.0>> has the same coordinates as a previous segment.
    
    * uni207E (U+207E): L<<499.0,769.0>--<605.0,769.0>> has the same coordinates as a previous segment.
    
    * uni208D (U+208D): L<<406.0,-229.0>--<513.0,-229.0>> has the same coordinates as a previous segment.
    
    * uni208E (U+208E): L<<605.0,243.0>--<499.0,243.0>> has the same coordinates as a previous segment.
    
    * uni208E (U+208E): L<<499.0,-231.0>--<605.0,-231.0>> has the same coordinates as a previous segment.
    
    * uni20BF (U+20BF): L<<747.0,1023.0>--<747.0,820.0>> has the same coordinates as a previous segment.
    
    * uni20BF (U+20BF): L<<756.0,766.0>--<756.0,567.0>> has the same coordinates as a previous segment.
    
    * uni20BF (U+20BF): L<<747.0,1537.0>--<747.0,1331.0>> has the same coordinates as a previous segment.
    
    * uni27E9 (U+27E9): L<<902.0,741.0>--<902.0,569.0>> has the same coordinates as a previous segment.
    
    * utilde (U+0169): L<<252.0,1362.0>--<252.0,1263.0>> has the same coordinates as a previous segment.
    
    * utilde (U+0169): L<<602.0,1202.0>--<602.0,1301.0>> has the same coordinates as a previous segment.
    
    * utildebelow (U+1E75): L<<364.0,-193.0>--<364.0,-292.0>> has the same coordinates as a previous segment.
    
    * utildebelow (U+1E75): L<<714.0,-353.0>--<714.0,-254.0>> has the same coordinates as a previous segment.
    
    [code: overlapping-path-segments]

Font contains all required tables?

Check ID: <FontBakeryCheck:required_tables>
ℹ️ Samaano[slnt,wdth,wght].ttf
  • ℹ️ INFO

    This font contains the following optional tables:

    - loca
    
    - prep
    
    - GPOS
    
    - GSUB
    
    - gasp
    
    [code: optional-tables]
  • ✅ PASS

    Font contains all required tables.

Ensure indic fonts have the Indian Rupee Sign glyph.

Check ID: <FontBakeryCheck:rupee>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    Looks good!

Font has the proper sfntVersion value?

Check ID: <FontBakeryCheck:sfnt_version>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    Font has the correct sfntVersion value.

Ensure 'smcp' (small caps) lookups are defined before ligature lookups in the 'GSUB' table.

Check ID: <FontBakeryCheck:smallcaps_before_ligatures>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Font lacks 'smcp' or 'liga' features.

Ensure smart dropout control is enabled in "prep" table instructions.

Check ID: <FontBakeryCheck:smart_dropout>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Does the font contain a soft hyphen?

Check ID: <FontBakeryCheck:soft_hyphen>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    Looks good!

Checking STAT table entries in static fonts.

Check ID: <FontBakeryCheck:STAT_in_statics>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: not is_variable_font

    [code: unfulfilled-conditions]

Check correctness of STAT table strings

Check ID: <FontBakeryCheck:STAT_strings>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Ensure Stylistic Sets have description.

Check ID: <FontBakeryCheck:stylisticset_description>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Check tabular widths don't have kerning.

Check ID: <FontBakeryCheck:tabular_kerning>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Ensure component transforms do not perform scaling or rotation.

Check ID: <FontBakeryCheck:transformed_components>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    No glyphs had components with scaling or rotation

Checking with fontTools.ttx

Check ID: <FontBakeryCheck:ttx_roundtrip>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Checking that the typoAscender exceeds the yMax of the /Agrave.

Check ID: <FontBakeryCheck:typoascender_exceeds_Agrave>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    OS/2.sTypoAscender value is greater than the yMax of /Agrave.

Font contains unique glyph names?

Check ID: <FontBakeryCheck:unique_glyphnames>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    Glyph names are all unique.

Check font contains no unreachable glyphs

Check ID: <FontBakeryCheck:unreachable_glyphs>
⚠️ Samaano[slnt,wdth,wght].ttf
  • ⚠️ WARN

    The following glyphs could not be reached by codepoint or substitution rules:

    - brevecomb_acutecomb
    
    - brevecomb_gravecomb
    
    - brevecomb_hookabovecomb
    
    - brevecomb_tildecomb
    
    - circumflexcomb_acutecomb
    
    - circumflexcomb_gravecomb
    
    - circumflexcomb_hookabovecomb
    
    - circumflexcomb_tildecomb
    
    - idotaccent
    
    - uni0B99_uni0BC1
    
    - uni0B99_uni0BC2
    
    - uni0B9A_uni0BC1
    
    - uni0B9A_uni0BC2
    
    - uni0B9E_uni0BC1
    
    - uni0B9E_uni0BC2
    
    - uni0BC1.alt
    
    - uni0BC2.alt
    
    [code: unreachable-glyphs]

Glyph names are all valid?

Check ID: <FontBakeryCheck:valid_glyphnames>
🔥 Samaano[slnt,wdth,wght].ttf
  • 🔥 FAIL

    The following glyph names do not comply with naming conventions: Alpha-latin, Beta-latin, Gamma-latin, Iota-latin, Omega-latin, Upsilon-latin, alpha-latin, beta-latin, gamma-latin, iota-latin, omega-latin and upsilon-latin

    A glyph name must be entirely comprised of characters from the following set: A-Z a-z 0-9 .(period) (underscore). A glyph name must not start with a digit or period. There are a few exceptions such as the special glyph ".notdef". The glyph names "twocents", "a1", and "" are all valid, while "2cents" and ".twocents" are not.

    [code: found-invalid-names]

The variable font 'wght' (Weight) axis coordinate must be 700 on the 'Bold' instance.

Check ID: <FontBakeryCheck:varfont/bold_wght_coord>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    Bold:wght is 700.

Ensure that all variable font files have the same set of axes and axis ranges.

Check ID: <FontBakeryCheck:varfont/consistent_axes>
✅ Family Check
  • ✅ PASS

    All looks good!

    [code: ok]

Ensure VFs with duplexed axes do not vary horizontal advance.

Check ID: <FontBakeryCheck:varfont/duplexed_axis_reflow>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    This font has no duplexed axes

    [code: no-relevant-axes]

Check variable font instances don't have duplicate names

Check ID: <FontBakeryCheck:varfont/duplicate_instance_names>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Ensure the font's instances are in the correct order.

Check ID: <FontBakeryCheck:varfont/instances_in_order>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Ensure VFs do not contain (yet) the ital axis.

Check ID: <FontBakeryCheck:varfont/unsupported_axes>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Font contains glyphs for whitespace characters?

Check ID: <FontBakeryCheck:whitespace_glyphs>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    Font contains glyphs for whitespace characters.

Whitespace glyphs have ink?

Check ID: <FontBakeryCheck:whitespace_ink>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    There is no whitespace glyph with ink.

Space and non-breaking space have the same width?

Check ID: <FontBakeryCheck:whitespace_widths>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    Space and non-breaking space have the same width.

Article Checks

⚠️

Validate size, and resolution of article images, and ensure article page has minimum length and includes visual assets.

Check ID: <FontBakeryCheck:googlefonts/article/images>
⚠️ Samaano[slnt,wdth,wght].ttf
  • ⚠️ WARN

    Family metadata at fonts/variable does not have an article.

    [code: lacks-article]

Metadata Checks

⚠️⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩

Validate METADATA.pb axes values are within gf_axisregistry bounds.

Check ID: <FontBakeryCheck:googlefonts/metadata/axisregistry_bounds>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: family_metadata

    [code: unfulfilled-conditions]

Validate METADATA.pb axes tags are defined in gf_axisregistry.

Check ID: <FontBakeryCheck:googlefonts/metadata/axisregistry_valid_tags>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: family_metadata

    [code: unfulfilled-conditions]

Does METADATA.pb copyright field contain broken links?

Check ID: <FontBakeryCheck:googlefonts/metadata/broken_links>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: family_metadata

    [code: unfulfilled-conditions]

METADATA.pb: Font styles are named canonically?

Check ID: <FontBakeryCheck:googlefonts/metadata/canonical_style_names>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: font_metadata

    [code: unfulfilled-conditions]

METADATA.pb: Check that font weight has a canonical value.

Check ID: <FontBakeryCheck:googlefonts/metadata/canonical_weight_value>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: font_metadata

    [code: unfulfilled-conditions]

Check samples can be rendered.

Check ID: <FontBakeryCheck:googlefonts/metadata/can_render_samples>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: family_metadata

    [code: unfulfilled-conditions]

Ensure METADATA.pb category field is valid.

Check ID: <FontBakeryCheck:googlefonts/metadata/category>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: family_metadata

    [code: unfulfilled-conditions]

Check if category on METADATA.pb matches what can be inferred from the family name.

Check ID: <FontBakeryCheck:googlefonts/metadata/category_hints>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: family_metadata

    [code: unfulfilled-conditions]

Validate VF axes match the ones declared on METADATA.pb.

Check ID: <FontBakeryCheck:googlefonts/metadata/consistent_axis_enumeration>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: family_metadata

    [code: unfulfilled-conditions]

METADATA.pb: Check URL on copyright string is the same as in repository_url field.

Check ID: <FontBakeryCheck:googlefonts/metadata/consistent_repo_urls>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: family_metadata

    [code: unfulfilled-conditions]

Validate 'date_added' field on METADATA.pb.

Check ID: <FontBakeryCheck:googlefonts/metadata/date_added>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: family_metadata

    [code: unfulfilled-conditions]

METADATA.pb: Designers are listed correctly on the Google Fonts catalog?

Check ID: <FontBakeryCheck:googlefonts/metadata/designer_profiles>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: family_metadata

    [code: unfulfilled-conditions]

Multiple values in font designer field in METADATA.pb must be separated by commas.

Check ID: <FontBakeryCheck:googlefonts/metadata/designer_values>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: family_metadata

    [code: unfulfilled-conditions]

At least one designer is declared in METADATA.pb

Check ID: <FontBakeryCheck:googlefonts/metadata/empty_designer>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    No applicable arguments

    [code: no-arguments]

Ensure METADATA.pb does not use escaped strings.

Check ID: <FontBakeryCheck:googlefonts/metadata/escaped_strings>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: metadata_file

    [code: unfulfilled-conditions]

Check font family directory name.

Check ID: <FontBakeryCheck:googlefonts/metadata/family_directory_name>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: family_metadata

    [code: unfulfilled-conditions]

Check that METADATA.pb family values are all the same.

Check ID: <FontBakeryCheck:googlefonts/metadata/familyname>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: family_metadata

    [code: unfulfilled-conditions]

METADATA.pb: Font filenames match font.filename entries?

Check ID: <FontBakeryCheck:googlefonts/metadata/filenames>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: family_metadata

    [code: unfulfilled-conditions]

Ensure there is a regular style defined in METADATA.pb.

Check ID: <FontBakeryCheck:googlefonts/metadata/has_regular>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: family_metadata

    [code: unfulfilled-conditions]

Check METADATA.pb includes production subsets.

Check ID: <FontBakeryCheck:googlefonts/metadata/includes_production_subsets>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: family_metadata, listed_on_gfonts_api

    [code: unfulfilled-conditions]

METADATA.pb font.filename and font.post_script_name fields have equivalent values?

Check ID: <FontBakeryCheck:googlefonts/metadata/match_filename_postscript>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: font_metadata, not is_variable_font

    [code: unfulfilled-conditions]

METADATA.pb font.full_name and font.post_script_name fields have equivalent values ?

Check ID: <FontBakeryCheck:googlefonts/metadata/match_fullname_postscript>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: font_metadata

    [code: unfulfilled-conditions]

METADATA.pb: Check font name is the same as family name.

Check ID: <FontBakeryCheck:googlefonts/metadata/match_name_familyname>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: family_metadata, font_metadata

    [code: unfulfilled-conditions]

METADATA.pb weight matches postScriptName for static fonts.

Check ID: <FontBakeryCheck:googlefonts/metadata/match_weight_postscript>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: font_metadata, not is_variable_font

    [code: unfulfilled-conditions]

METADATA.pb should contain at least "menu" and "latin" subsets.

Check ID: <FontBakeryCheck:googlefonts/metadata/menu_and_latin>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: family_metadata

    [code: unfulfilled-conditions]

METADATA.pb: Validate family.minisite_url field.

Check ID: <FontBakeryCheck:googlefonts/metadata/minisite_url>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: family_metadata

    [code: unfulfilled-conditions]

METADATA.pb font.name and font.full_name fields match the values declared on the name table?

Check ID: <FontBakeryCheck:googlefonts/metadata/nameid/family_and_full_names>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: font_metadata

    [code: unfulfilled-conditions]

METADATA.pb font.name value should be same as the family name declared on the name table.

Check ID: <FontBakeryCheck:googlefonts/metadata/nameid/font_name>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: font_metadata

    [code: unfulfilled-conditions]

Checks METADATA.pb font.post_script_name matches postscript name declared on the name table.

Check ID: <FontBakeryCheck:googlefonts/metadata/nameid/post_script_name>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: font_metadata

    [code: unfulfilled-conditions]

Check METADATA.pb parse correctly.

Check ID: <FontBakeryCheck:googlefonts/metadata/parses>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Font family at 'fonts/variable' lacks a METADATA.pb file.

    [code: file-not-found]

METADATA.pb: Check for primary_script

Check ID: <FontBakeryCheck:googlefonts/metadata/primary_script>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: family_metadata

    [code: unfulfilled-conditions]

METADATA.pb: Regular should be 400.

Check ID: <FontBakeryCheck:googlefonts/metadata/regular_is_400>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: family_metadata, has_regular_style

    [code: unfulfilled-conditions]

Check METADATA.pb file only contains a single CJK subset.

Check ID: <FontBakeryCheck:googlefonts/metadata/single_cjk_subset>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: family_metadata

    [code: unfulfilled-conditions]

METADATA.pb subsets should be alphabetically ordered.

Check ID: <FontBakeryCheck:googlefonts/metadata/subsets_order>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: family_metadata

    [code: unfulfilled-conditions]

Ensure METADATA.pb lists all font binaries.

Check ID: <FontBakeryCheck:googlefonts/metadata/undeclared_fonts>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: family_metadata

    [code: unfulfilled-conditions]

METADATA.pb: check if fonts field only has unique "full_name" values.

Check ID: <FontBakeryCheck:googlefonts/metadata/unique_full_name_values>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: family_metadata

    [code: unfulfilled-conditions]

METADATA.pb: check if fonts field only contains unique style:weight pairs.

Check ID: <FontBakeryCheck:googlefonts/metadata/unique_weight_style_pairs>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: family_metadata

    [code: unfulfilled-conditions]

Check for codepoints not covered by METADATA subsets.

Check ID: <FontBakeryCheck:googlefonts/metadata/unreachable_subsetting>
⚠️ Samaano[slnt,wdth,wght].ttf
  • ⚠️ WARN

    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: canadian-aboriginal, yi
    • U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, tifinagh, cherokee, coptic
    • U+0305 COMBINING OVERLINE: try adding one of: gothic, elbasan, coptic, math, glagolitic
    • U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic
    • U+0307 COMBINING DOT ABOVE: try adding one of: tifinagh, malayalam, duployan, canadian-aboriginal, hebrew, syriac, coptic, math, tai-le, old-permic, todhri
    • U+030A COMBINING RING ABOVE: try adding one of: duployan, syriac
    • U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: cherokee, osage
    • U+030C COMBINING CARON: try adding one of: tai-le, cherokee
    • U+030D COMBINING VERTICAL LINE ABOVE: try adding sunuwar
    • U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • U+0310 COMBINING CANDRABINDU: try adding one of: math, sunuwar
    • U+0311 COMBINING INVERTED BREVE: try adding one of: todhri, coptic
    • U+0312 COMBINING TURNED COMMA ABOVE: try adding math
    • U+0315 COMBINING COMMA ABOVE RIGHT: try adding math
    • U+031B COMBINING HORN: not included in any glyphset definition
    • U+0324 COMBINING DIAERESIS BELOW: try adding one of: duployan, cherokee, syriac
    • U+0325 COMBINING RING BELOW: try adding syriac
    • U+0326 COMBINING COMMA BELOW: try adding math
    • U+0327 COMBINING CEDILLA: try adding math
    • U+0328 COMBINING OGONEK: not included in any glyphset definition
    • U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding one of: sunuwar, syriac
    • U+032E COMBINING BREVE BELOW: try adding syriac
    • U+032F COMBINING INVERTED BREVE BELOW: try adding math
    • U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac
    • U+0331 COMBINING MACRON BELOW: try adding one of: tifinagh, sunuwar, gothic, syriac, cherokee, thai, caucasian-albanian
    • U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition
    • U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition
    • U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai
    • U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition
    • U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition
    • U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition
    • U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition
    • U+2016 DOUBLE VERTICAL LINE: try adding math
    • U+2021 DOUBLE DAGGER: try adding adlam
    • U+2030 PER MILLE SIGN: try adding adlam
    • U+203F UNDERTIE: not included in any glyphset definition
    • U+2042 ASTERISM: not included in any glyphset definition
    • U+2052 COMMERCIAL MINUS SIGN: not included in any glyphset definition
    • U+2070 SUPERSCRIPT ZERO: try adding math
    • U+2071 SUPERSCRIPT LATIN SMALL LETTER I: try adding math
    • U+2074 SUPERSCRIPT FOUR: try adding math
    • U+2075 SUPERSCRIPT FIVE: try adding math
    • U+2076 SUPERSCRIPT SIX: try adding math
    • U+2077 SUPERSCRIPT SEVEN: try adding math
    • U+2078 SUPERSCRIPT EIGHT: try adding math
    • U+2079 SUPERSCRIPT NINE: try adding math
    • U+207A SUPERSCRIPT PLUS SIGN: try adding math
    • U+207B SUPERSCRIPT MINUS: try adding math
    • U+207C SUPERSCRIPT EQUALS SIGN: try adding math
    • U+207D SUPERSCRIPT LEFT PARENTHESIS: try adding math
    • U+207E SUPERSCRIPT RIGHT PARENTHESIS: try adding math
    • U+207F SUPERSCRIPT LATIN SMALL LETTER N: try adding math
    • U+2080 SUBSCRIPT ZERO: try adding math
    • U+2081 SUBSCRIPT ONE: try adding math
    • U+2082 SUBSCRIPT TWO: try adding math
    • U+2083 SUBSCRIPT THREE: try adding math
    • U+2084 SUBSCRIPT FOUR: try adding math
    • U+2085 SUBSCRIPT FIVE: try adding math
    • U+2086 SUBSCRIPT SIX: try adding math
    • U+2087 SUBSCRIPT SEVEN: try adding math
    • U+2088 SUBSCRIPT EIGHT: try adding math
    • U+2089 SUBSCRIPT NINE: try adding math
    • U+208A SUBSCRIPT PLUS SIGN: try adding math
    • U+208B SUBSCRIPT MINUS: try adding math
    • U+208C SUBSCRIPT EQUALS SIGN: try adding math
    • U+208D SUBSCRIPT LEFT PARENTHESIS: try adding math
    • U+208E SUBSCRIPT RIGHT PARENTHESIS: try adding math
    • U+20C1 : not included in any glyphset definition
    • U+2126 OHM SIGN: try adding math
    • U+212E ESTIMATED SYMBOL: try adding math
    • U+2153 VULGAR FRACTION ONE THIRD: try adding symbols
    • U+2154 VULGAR FRACTION TWO THIRDS: try adding symbols
    • U+2190 LEFTWARDS ARROW: try adding one of: math, symbols
    • U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols
    • U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols
    • U+2195 UP DOWN ARROW: try adding one of: math, symbols
    • U+2196 NORTH WEST ARROW: try adding one of: math, symbols
    • U+2197 NORTH EAST ARROW: try adding one of: math, symbols
    • U+2198 SOUTH EAST ARROW: try adding one of: math, symbols
    • U+2199 SOUTH WEST ARROW: try adding one of: math, symbols
    • U+2202 PARTIAL DIFFERENTIAL: try adding math
    • U+2205 EMPTY SET: try adding math
    • U+2206 INCREMENT: try adding math
    • U+220F N-ARY PRODUCT: try adding math
    • U+2211 N-ARY SUMMATION: try adding math
    • U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols
    • U+221A SQUARE ROOT: try adding math
    • U+221E INFINITY: try adding math
    • U+222B INTEGRAL: try adding math
    • U+2248 ALMOST EQUAL TO: try adding math
    • U+2260 NOT EQUAL TO: try adding math
    • U+2264 LESS-THAN OR EQUAL TO: try adding math
    • U+2265 GREATER-THAN OR EQUAL TO: try adding math
    • U+22EF MIDLINE HORIZONTAL ELLIPSIS: try adding math
    • U+24B6 CIRCLED LATIN CAPITAL LETTER A: try adding symbols
    • U+24B9 CIRCLED LATIN CAPITAL LETTER D: try adding symbols
    • U+24D0 CIRCLED LATIN SMALL LETTER A: try adding symbols
    • U+25A0 BLACK SQUARE: try adding symbols
    • U+25A1 WHITE SQUARE: try adding symbols
    • U+25AA BLACK SMALL SQUARE: try adding symbols
    • U+25AB WHITE SMALL SQUARE: try adding symbols
    • U+25B2 BLACK UP-POINTING TRIANGLE: try adding symbols
    • U+25B3 WHITE UP-POINTING TRIANGLE: try adding one of: math, symbols
    • U+25B4 BLACK UP-POINTING SMALL TRIANGLE: try adding symbols
    • U+25B5 WHITE UP-POINTING SMALL TRIANGLE: try adding symbols
    • U+25B6 BLACK RIGHT-POINTING TRIANGLE: try adding symbols
    • U+25B7 WHITE RIGHT-POINTING TRIANGLE: try adding one of: math, symbols
    • U+25B8 BLACK RIGHT-POINTING SMALL TRIANGLE: try adding symbols
    • U+25B9 WHITE RIGHT-POINTING SMALL TRIANGLE: try adding symbols
    • U+25BC BLACK DOWN-POINTING TRIANGLE: try adding symbols
    • U+25BD WHITE DOWN-POINTING TRIANGLE: try adding one of: math, symbols
    • U+25BE BLACK DOWN-POINTING SMALL TRIANGLE: try adding symbols
    • U+25BF WHITE DOWN-POINTING SMALL TRIANGLE: try adding symbols
    • U+25C0 BLACK LEFT-POINTING TRIANGLE: try adding symbols
    • U+25C1 WHITE LEFT-POINTING TRIANGLE: try adding one of: math, symbols
    • U+25C2 BLACK LEFT-POINTING SMALL TRIANGLE: try adding symbols
    • U+25C3 WHITE LEFT-POINTING SMALL TRIANGLE: try adding symbols
    • U+25C6 BLACK DIAMOND: try adding symbols
    • U+25C7 WHITE DIAMOND: try adding symbols
    • U+25CA LOZENGE: try adding one of: math, symbols
    • U+25CB WHITE CIRCLE: try adding symbols
    • U+25CF BLACK CIRCLE: try adding symbols
    • U+25E6 WHITE BULLET: try adding symbols
    • U+27E8 MATHEMATICAL LEFT ANGLE BRACKET: try adding math
    • U+27E9 MATHEMATICAL RIGHT ANGLE BRACKET: try adding math
    • U+E0FC : not included in any glyphset definition
    • U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition
    • U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition

    Or you can add the above codepoints to one of the subsets supported by the font: cyrillic-ext, devanagari, greek, greek-ext, latin, latin-ext, tamil, vietnamese

    [code: unreachable-subsetting]

Check for METADATA subsets with zero support.

Check ID: <FontBakeryCheck:googlefonts/metadata/unsupported_subsets>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: family_metadata

    [code: unfulfilled-conditions]

METADATA.pb font.filename field contains font name in right format?

Check ID: <FontBakeryCheck:googlefonts/metadata/valid_filename_values>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: family_metadata

    [code: unfulfilled-conditions]

METADATA.pb font.full_name field contains font name in right format?

Check ID: <FontBakeryCheck:googlefonts/metadata/valid_full_name_values>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: font_metadata

    [code: unfulfilled-conditions]

Check name ID 25 to end with "Italic" for Italic VFs.

Check ID: <FontBakeryCheck:googlefonts/metadata/valid_nameid25>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

METADATA.pb font.post_script_name field contains font name in right format?

Check ID: <FontBakeryCheck:googlefonts/metadata/valid_post_script_name_values>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: font_metadata

    [code: unfulfilled-conditions]

Check METADATA.pb font weights are correct.

Check ID: <FontBakeryCheck:googlefonts/metadata/weightclass>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: font_metadata

    [code: unfulfilled-conditions]

Glyphset Checks

💥

Shapes languages in all GF glyphsets.

Check ID: <FontBakeryCheck:googlefonts/glyphsets/shape_languages>
💥 Samaano[slnt,wdth,wght].ttf
  • 💥 ERROR

    Failed with TypeError: argument 'lang': 'NoneType' object cannot be converted to 'Language'

      File "/home/runner/work/samaano-fonts/samaano-fonts/venv-test/lib/python3.10/site-packages/fontbakery/checkrunner.py", line 223, in _run_check
        subresults = list(subresults)
      File "/home/runner/work/samaano-fonts/samaano-fonts/venv-test/lib/python3.10/site-packages/fontbakery/checks/vendorspecific/googlefonts/glyphsets/shape_languages.py", line 49, in check_glyphsets_shape_languages
        reporter = shaperglot_checker.check(shaperglot_languages[language_code])
    
    
    [code: failed-check]

Description Checks

⏩⏩⏩⏩⏩⏩⏩⏩ℹ️

Does DESCRIPTION file contain broken links?

Check ID: <FontBakeryCheck:googlefonts/description/broken_links>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: description_and_article_html

    [code: unfulfilled-conditions]

DESCRIPTION.en_us.html should end in a linebreak.

Check ID: <FontBakeryCheck:googlefonts/description/eof_linebreak>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: description

    [code: unfulfilled-conditions]

On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.

Check ID: <FontBakeryCheck:googlefonts/description/family_update>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: description

    [code: unfulfilled-conditions]

Does DESCRIPTION file contain a upstream Git repo URL?

Check ID: <FontBakeryCheck:googlefonts/description/git_url>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: description_html

    [code: unfulfilled-conditions]

Check for presence of an ARTICLE.en_us.html file

Check ID: <FontBakeryCheck:googlefonts/description/has_article>
ℹ️ Samaano[slnt,wdth,wght].ttf
  • ℹ️ INFO

    This font doesn't have an ARTICLE.en_us.html file.

    [code: missing-article]

Check the description doesn't contain unsupported html elements

Check ID: <FontBakeryCheck:googlefonts/description/has_unsupported_elements>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: description_and_article

    [code: unfulfilled-conditions]

DESCRIPTION.en_us.html must have more than 200 bytes.

Check ID: <FontBakeryCheck:googlefonts/description/min_length>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: description

    [code: unfulfilled-conditions]

URLs on DESCRIPTION file must not display http(s) prefix.

Check ID: <FontBakeryCheck:googlefonts/description/urls>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: description_and_article_html

    [code: unfulfilled-conditions]

Is this a proper HTML snippet?

Check ID: <FontBakeryCheck:googlefonts/description/valid_html>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: description_and_article

    [code: unfulfilled-conditions]

Family Checks

Fonts have equal codepoint coverage

Check ID: <FontBakeryCheck:googlefonts/family/equal_codepoint_coverage>
⏩ Family Check
  • ⏩ SKIP

    Unfulfilled Conditions: stylenames_are_canonical

    [code: unfulfilled-conditions]

Ensure Italic styles have Roman counterparts.

Check ID: <FontBakeryCheck:googlefonts/family/italics_have_roman_counterparts>
✅ Family Check
  • ✅ PASS

    All looks good!

    [code: ok]

All tabular figures must have the same width across the RIBBI-family.

Check ID: <FontBakeryCheck:googlefonts/family/tnum_horizontal_metrics>
✅ Family Check
  • ✅ PASS

    All looks good!

    [code: ok]

Name table checks

Check family name for GF Guide compliance.

Check ID: <FontBakeryCheck:googlefonts/family_name_compliance>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Name table entries should not contain line-breaks.

Check ID: <FontBakeryCheck:googlefonts/name/line_breaks>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Licensing Checks

⏩⏩⏩⏩

Check font has a license.

Check ID: <FontBakeryCheck:googlefonts/family/has_license>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: gfonts_repo_structure

    [code: unfulfilled-conditions]

Copyright notices match canonical pattern in fonts

Check ID: <FontBakeryCheck:googlefonts/font_copyright>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Check OFL body text is correct.

Check ID: <FontBakeryCheck:googlefonts/license/OFL_body_text>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Check license file has good copyright string.

Check ID: <FontBakeryCheck:googlefonts/license/OFL_copyright>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

METADATA.pb: Copyright notice is the same in all fonts?

Check ID: <FontBakeryCheck:googlefonts/metadata/copyright>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: family_metadata

    [code: unfulfilled-conditions]

METADATA.pb license is "APACHE2", "UFL" or "OFL"?

Check ID: <FontBakeryCheck:googlefonts/metadata/license>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: family_metadata

    [code: unfulfilled-conditions]

Copyright notice on METADATA.pb should not contain 'Reserved Font Name'.

Check ID: <FontBakeryCheck:googlefonts/metadata/reserved_font_name>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: font_metadata

    [code: unfulfilled-conditions]

Check copyright namerecords match license file.

Check ID: <FontBakeryCheck:googlefonts/name/license>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

License URL matches License text on name table?

Check ID: <FontBakeryCheck:googlefonts/name/license_url>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    Font has a valid license URL in NAME table.

Name table strings must not contain the string 'Reserved Font Name'.

Check ID: <FontBakeryCheck:googlefonts/name/rfn>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Repository Checks

⏩⏩⏩

Directory name in GFonts repo structure must match NameID 1 of the regular.

Check ID: <FontBakeryCheck:googlefonts/repo/dirname_matches_nameid_1>
⏩ Family Check
  • ⏩ SKIP

    Unfulfilled Conditions: gfonts_repo_structure

    [code: unfulfilled-conditions]

A font repository should not include FontBakery report files

Check ID: <FontBakeryCheck:googlefonts/repo/fb_report>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Check upstream.yaml file contains all required fields

Check ID: <FontBakeryCheck:googlefonts/repo/upstream_yaml_has_required_fields>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: upstream_yaml

    [code: unfulfilled-conditions]

A static fonts directory, if present, must contain manually hinted fonts

Check ID: <FontBakeryCheck:googlefonts/repo/vf_has_static_fonts>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: gfonts_repo_structure

    [code: unfulfilled-conditions]

A font repository should not include ZIP files

Check ID: <FontBakeryCheck:googlefonts/repo/zip_files>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Shaping Checks

⚠️⏩⏩⏩

Ensure dotted circle glyph is present and can attach marks.

Check ID: <FontBakeryCheck:dotted_circle>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All marks were anchored to dotted circle

Check that no collisions are found while shaping

Check ID: <FontBakeryCheck:shaping/collides>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Shaping test directory not defined in configuration file

Check that no forbidden glyphs are found while shaping

Check ID: <FontBakeryCheck:shaping/forbidden>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Shaping test directory not defined in configuration file

Check that texts shape as per expectation

Check ID: <FontBakeryCheck:shaping/regression>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Shaping test directory not defined in configuration file

Ensure soft_dotted characters lose their dot when combined with marks that replace the dot.

Check ID: <FontBakeryCheck:soft_dotted>
⚠️ Samaano[slnt,wdth,wght].ttf
  • ⚠️ WARN

    The dot of soft dotted characters used in orthographies must disappear in the following strings: i̍ i̐ i᷆ i᷇ ɨ̀ ɨ́ ɨ̂ ɨ̃ ɨ̄ ɨ̈ ɨ̋ ɨ̌ ɨ̏ ɨ̧̀ ɨ̧́ ɨ̧̂ ɨ̧̌ ɨ̱̀ ɨ̱́ ɨ̱̈ ḭ̀ ḭ́ ḭ̄

    The dot of soft dotted characters should disappear in other cases, for example: i̅ i̇ i̒ i᷄ i᷅ i̛̅ i̛̇ i̛̊ i̛̋ i̛̍ i̛̐ i̛̒ i̛᷄ i̛᷅ i̛᷆ i̛᷇ i̤̅ i̤̇ i̤̊ i̤̋

    [code: soft-dotted]

Outline Checks

⚠️⏩⏩⏩⏩

Are there any misaligned on-curve points?

Check ID: <FontBakeryCheck:outline_alignment_miss>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    So many Y-coordinates of points were close to boundaries that this was probably by design.

Do any segments have colinear vectors?

Check ID: <FontBakeryCheck:outline_colinear_vectors>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: not is_variable_font

    [code: unfulfilled-conditions]

Check the direction of the outermost contour in each glyph

Check ID: <FontBakeryCheck:outline_direction>
⚠️ Samaano[slnt,wdth,wght].ttf
  • ⚠️ WARN

    The following glyphs have a counter-clockwise outer contour:

    * glottalstopreversed (U+0295) has a counter-clockwise outer contour
    
    * glottalstopreversed (U+0295) has a counter-clockwise outer contour
    
    * glottalstopreversed (U+0295) has a counter-clockwise outer contour
    
    * glottalstopreversed (U+0295) has a counter-clockwise outer contour
    
    * lambda (U+03BB) has a counter-clockwise outer contour
    
    * lambda (U+03BB) has a counter-clockwise outer contour
    
    * uni0BB8 (U+0BB8) has a counter-clockwise outer contour
    
    [code: ccw-outer-contour]

Do outlines contain any jaggy segments?

Check ID: <FontBakeryCheck:outline_jaggy_segments>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: not is_variable_font

    [code: unfulfilled-conditions]

Do outlines contain any semi-vertical or semi-horizontal lines?

Check ID: <FontBakeryCheck:outline_semi_vertical>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: not is_variable_font

    [code: unfulfilled-conditions]

Are any segments inordinately short?

Check ID: <FontBakeryCheck:outline_short_segments>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: not is_variable_font

    [code: unfulfilled-conditions]

Font File Checks

🔥🔥⚠️⏩⏩⏩⏩⏩ℹ️ℹ️ℹ️

Check if the axes match between the font and the Google Fonts version.

Check ID: <FontBakeryCheck:googlefonts/axes_match>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: remote_style

    [code: unfulfilled-conditions]

Validate defaults on fvar table match registered fallback names in GFAxisRegistry.

Check ID: <FontBakeryCheck:googlefonts/axisregistry/fvar_axis_defaults>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Checking file is named canonically.

Check ID: <FontBakeryCheck:googlefonts/canonical_filename>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    Font filename is correct, "Samaano[slnt,wdth,wght].ttf".

Check font follows the Google Fonts CJK vertical metric schema

Check ID: <FontBakeryCheck:googlefonts/cjk_vertical_metrics>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: is_cjk_font

    [code: unfulfilled-conditions]

Check if the vertical metrics of a CJK family are similar to the same family hosted on Google Fonts.

Check ID: <FontBakeryCheck:googlefonts/cjk_vertical_metrics_regressions>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: is_cjk_font, regular_remote_style

    [code: unfulfilled-conditions]

Ensure font has the expected color font tables.

Check ID: <FontBakeryCheck:googlefonts/colorfont_tables>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Check font names are correct

Check ID: <FontBakeryCheck:googlefonts/font_names>
🔥 Samaano[slnt,wdth,wght].ttf
  • 🔥 FAIL

    Font names are incorrect:

    nameID current expected
    Family Name Samaano Bold Samaano
    Subfamily Name Bold Bold
    Full Name Samaano Bold Samaano Bold
    Postscript Name Samaano-Bold Samaano-Bold
    Typographic Family Name Samaano N/A
    Typographic Subfamily Name Bold N/A
    [code: bad-names]

Checking OS/2 fsType does not impose restrictions.

Check ID: <FontBakeryCheck:googlefonts/fstype>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Check variable font instances

Check ID: <FontBakeryCheck:googlefonts/fvar_instances>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?

Check ID: <FontBakeryCheck:googlefonts/gasp>
ℹ️ Samaano[slnt,wdth,wght].ttf
  • ℹ️ INFO

    These are the ppm ranges declared on the gasp table:

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

    [code: ranges]

Check Google Fonts glyph coverage.

Check ID: <FontBakeryCheck:googlefonts/glyph_coverage>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Font has ttfautohint params?

Check ID: <FontBakeryCheck:googlefonts/has_ttfautohint_params>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Font appears to our heuristic as not hinted using ttfautohint.

    [code: not-hinted]

Ensure fonts have ScriptLangTags declared on the 'meta' table.

Check ID: <FontBakeryCheck:googlefonts/meta/script_lang_tags>
⚠️ Samaano[slnt,wdth,wght].ttf
  • ⚠️ WARN

    This font file does not have a 'meta' table.

    [code: lacks-meta-table]

Description strings in the name table must not exceed 200 characters.

Check ID: <FontBakeryCheck:googlefonts/name/description_max_length>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Make sure family name does not begin with a digit.

Check ID: <FontBakeryCheck:googlefonts/name/familyname_first_char>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Font has all mandatory 'name' table entries?

Check ID: <FontBakeryCheck:googlefonts/name/mandatory_entries>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Version format is correct in 'name' table?

Check ID: <FontBakeryCheck:googlefonts/name/version_format>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Font has old ttfautohint applied?

Check ID: <FontBakeryCheck:googlefonts/old_ttfautohint>
ℹ️ Samaano[slnt,wdth,wght].ttf
  • ℹ️ INFO

    Could not detect which version of ttfautohint was used in this font. It is typically specified as a comment in the font version entries of the 'name' table. Such font version strings are currently: ['Version 2.400']

    [code: version-not-detected]

Ensure font can render its own name.

Check ID: <FontBakeryCheck:googlefonts/render_own_name>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Check axis ordering on the STAT table.

Check ID: <FontBakeryCheck:googlefonts/STAT/axis_order>
ℹ️ Family Check
  • ℹ️ INFO

    None of the fonts lack a STAT table.

    And these are the most common STAT axis orderings:
    ('wdth-wght-slnt', 1)
    
    [code: summary]

Validate STAT particle names and values match the fallback names in GFAxisRegistry.

Check ID: <FontBakeryCheck:googlefonts/STAT/axisregistry>
🔥 Samaano[slnt,wdth,wght].ttf
  • 🔥 FAIL

    On the font variation axis 'slnt', the name 'Oblique' is not among the expected ones (Default) according to the Google Fonts Axis Registry.

    [code: invalid-name]

Stricter unitsPerEm criteria for Google Fonts.

Check ID: <FontBakeryCheck:googlefonts/unitsperem>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

OS/2.fsSelection bit 7 (USE_TYPO_METRICS) is set in all fonts.

Check ID: <FontBakeryCheck:googlefonts/use_typo_metrics>
✅ Family Check
  • ✅ PASS

    All looks good!

    [code: ok]

Check a static ttf can be generated from a variable font.

Check ID: <FontBakeryCheck:googlefonts/varfont/generate_static>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    fontTools.varLib.mutator generated a static font instance

Check that variable fonts have an HVAR table.

Check ID: <FontBakeryCheck:googlefonts/varfont/has_HVAR>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Checking OS/2 achVendID.

Check ID: <FontBakeryCheck:googlefonts/vendor_id>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Check font follows the Google Fonts vertical metric schema

Check ID: <FontBakeryCheck:googlefonts/vertical_metrics>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]

Check if the vertical metrics of a family are similar to the same family hosted on Google Fonts.

Check ID: <FontBakeryCheck:googlefonts/vertical_metrics_regressions>
⏩ Samaano[slnt,wdth,wght].ttf
  • ⏩ SKIP

    Unfulfilled Conditions: regular_remote_style

    [code: unfulfilled-conditions]

Check the OS/2 usWeightClass is appropriate for the font's best SubFamily name.

Check ID: <FontBakeryCheck:googlefonts/weightclass>
✅ Samaano[slnt,wdth,wght].ttf
  • ✅ PASS

    All looks good!

    [code: ok]