From: Marc Foley Date: Thu, 13 Apr 2023 15:06:46 +0000 (+0100) Subject: build_name_table: set bits as well X-Git-Tag: v0.4.1^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=37b137ed409eb7d8cb12182fdcb589edd9282de1;p=thirdparty%2Fgoogle%2Ffonts.git build_name_table: set bits as well --- diff --git a/Lib/axisregistry/__init__.py b/Lib/axisregistry/__init__.py index e900b871f7..d1baecd2d2 100644 --- a/Lib/axisregistry/__init__.py +++ b/Lib/axisregistry/__init__.py @@ -250,13 +250,31 @@ def build_stat(ttFont, sibling_ttFonts=[]): def build_name_table(ttFont, family_name=None, style_name=None, siblings=[]): + from fontTools.varLib.instancer import setRibbiBits + log.info("Building name table") name_table = ttFont["name"] family_name = family_name if family_name else name_table.getBestFamilyName() style_name = style_name if style_name else name_table.getBestSubFamilyName() if is_variable(ttFont): - return build_vf_name_table(ttFont, family_name, siblings=siblings) - return build_static_name_table_v1(ttFont, family_name, style_name) + build_vf_name_table(ttFont, family_name, siblings=siblings) + else: + build_static_name_table_v1(ttFont, family_name, style_name) + + # Set bits + style_name = name_table.getBestSubFamilyName() + # usWeightClass + weight_seen = False + for weight in sorted(GF_STATIC_STYLES, key=lambda k: len(k), reverse=True): + if weight in style_name: + weight_seen = True + ttFont["OS/2"].usWeightClass = GF_STATIC_STYLES[weight] + break + if not weight_seen: + log.warning( + f"No known weight found for stylename {style_name}. Cannot set OS2.usWeightClass" + ) + setRibbiBits(ttFont) def _fvar_instance_collisions(ttFont, siblings=[]): diff --git a/tests/test_names.py b/tests/test_names.py index 18543a38b0..bfc3b38ab3 100644 --- a/tests/test_names.py +++ b/tests/test_names.py @@ -525,3 +525,23 @@ def test_build_variations_ps_name(fp, result): build_variations_ps_name(ttFont) variation_ps_name = ttFont["name"].getName(25, 3, 1, 0x409).toUnicode() assert variation_ps_name == result + + +@pytest.mark.parametrize( + "fp, style_name, result", + [ + (mavenpro_fp, "Regular", 400), + (mavenpro_fp, "Italic", 400), + (mavenpro_fp, "Black Italic", 900), + (mavenpro_fp, "ExtraBold Italic", 800), + (mavenpro_fp, "ExtraBold", 800), + (mavenpro_fp, "Bold", 700), + (mavenpro_fp, "Bold Italic", 700), + (mavenpro_fp, "Thin Italic", 100), + (mavenpro_fp, "Thin", 100), + ], +) +def test_us_weight_class(fp, style_name, result): + ttFont = TTFont(fp) + build_name_table(ttFont, style_name=style_name) + assert ttFont["OS/2"].usWeightClass == result