]> git.ipfire.org Git - thirdparty/google/fonts.git/commitdiff
build_stat: do not include linkedValues if they are outside of the axis range
authorMarc Foley <m.foley.88@gmail.com>
Fri, 14 Apr 2023 09:29:21 +0000 (10:29 +0100)
committerMarc Foley <m.foley.88@gmail.com>
Fri, 14 Apr 2023 09:29:21 +0000 (10:29 +0100)
Lib/axisregistry/__init__.py
tests/data/Wavefont[ROND,YALN,wght].ttf [new file with mode: 0644]
tests/data/Wavefont[ROND,YALN,wght]_STAT.ttx [new file with mode: 0644]
tests/test_names.py

index bade5a79fc602c05ebffadf28df33ebd8bb240ba..30278fa915b0dd2d53cad9071e933276ad22796a 100644 (file)
@@ -219,7 +219,9 @@ def build_stat(ttFont, sibling_ttFonts=[]):
                 }
             )
             if axis in LINKED_VALUES and fallback.value in LINKED_VALUES[axis]:
-                a["values"][-1]["linkedValue"] = LINKED_VALUES[axis][fallback.value]
+                linked_value = LINKED_VALUES[axis][fallback.value]
+                if any(f.value == linked_value for f in fallbacks):
+                    a["values"][-1]["linkedValue"] = linked_value
         res.append(a)
 
     for axis, fallback in fallbacks_in_names:
@@ -231,7 +233,8 @@ def build_stat(ttFont, sibling_ttFonts=[]):
             "values": [{"name": fallback.name, "value": fallback.value, "flags": 0x0}],
         }
         if axis in LINKED_VALUES and fallback.value in LINKED_VALUES[axis]:
-            a["values"][0]["linkedValue"] = LINKED_VALUES[axis][fallback.value]
+            linked_value = LINKED_VALUES[axis][fallback.value]
+            a["values"][0]["linkedValue"] = linked_value
         res.append(a)
 
     for axis, fallback in fallbacks_in_siblings:
diff --git a/tests/data/Wavefont[ROND,YALN,wght].ttf b/tests/data/Wavefont[ROND,YALN,wght].ttf
new file mode 100644 (file)
index 0000000..b04e280
Binary files /dev/null and b/tests/data/Wavefont[ROND,YALN,wght].ttf differ
diff --git a/tests/data/Wavefont[ROND,YALN,wght]_STAT.ttx b/tests/data/Wavefont[ROND,YALN,wght]_STAT.ttx
new file mode 100644 (file)
index 0000000..22645ba
--- /dev/null
@@ -0,0 +1,49 @@
+<Version value="0x00010001"/>
+<DesignAxisRecordSize value="8"/>
+<!-- DesignAxisCount=2 -->
+<DesignAxisRecord>
+  <Axis index="0">
+    <AxisTag value="ROND"/>
+    <AxisNameID value="256"/>  <!-- Roundness -->
+    <AxisOrdering value="0"/>
+  </Axis>
+  <Axis index="1">
+    <AxisTag value="wght"/>
+    <AxisNameID value="258"/>  <!-- Weight -->
+    <AxisOrdering value="1"/>
+  </Axis>
+</DesignAxisRecord>
+<!-- AxisValueCount=5 -->
+<AxisValueArray>
+  <AxisValue index="0" Format="1">
+    <AxisIndex value="0"/>
+    <Flags value="2"/>  <!-- ElidableAxisValueName -->
+    <ValueNameID value="267"/>  <!-- Default -->
+    <Value value="0.0"/>
+  </AxisValue>
+  <AxisValue index="1" Format="1">
+    <AxisIndex value="1"/>
+    <Flags value="0"/>
+    <ValueNameID value="259"/>  <!-- Thin -->
+    <Value value="100.0"/>
+  </AxisValue>
+  <AxisValue index="2" Format="1">
+    <AxisIndex value="1"/>
+    <Flags value="0"/>
+    <ValueNameID value="260"/>  <!-- ExtraLight -->
+    <Value value="200.0"/>
+  </AxisValue>
+  <AxisValue index="3" Format="1">
+    <AxisIndex value="1"/>
+    <Flags value="0"/>
+    <ValueNameID value="261"/>  <!-- Light -->
+    <Value value="300.0"/>
+  </AxisValue>
+  <AxisValue index="4" Format="1">
+    <AxisIndex value="1"/>
+    <Flags value="2"/>  <!-- ElidableAxisValueName -->
+    <ValueNameID value="2"/>  <!-- Regular -->
+    <Value value="400.0"/>
+  </AxisValue>
+</AxisValueArray>
+<ElidedFallbackNameID value="2"/>  <!-- Regular -->
\ No newline at end of file
index af65b5bb19bc1a8200f245856033ecc86f6c624f..d196b283dd270a0b865d2c34d28df4f027768447 100644 (file)
@@ -26,6 +26,7 @@ opensans_cond_roman_fp = os.path.join(DATA_DIR, "OpenSansCondensed[wght].ttf")
 opensans_cond_italic_fp = os.path.join(DATA_DIR, "OpenSansCondensed-Italic[wght].ttf")
 wonky_fp = os.path.join(DATA_DIR, "Wonky[wdth,wght].ttf")
 playfair_fp = os.path.join(DATA_DIR, "Playfair[opsz,wdth,wght].ttf")
+wavefont_fp = os.path.join(DATA_DIR, "Wavefont[ROND,YALN,wght].ttf")
 
 
 @pytest.fixture
@@ -294,7 +295,8 @@ def _test_names(ttFont, expected):
                 (17, 3, 1, 0x409): None,
             },
         ),
-        # Test opsz particle is kept
+        # Test opsz particle is kept.
+        # Fixes https://github.com/googlefonts/axisregistry/issues/130
         (
             playfair_fp,
             "Playfair",
@@ -457,6 +459,9 @@ def dump(table, ttFont=None):
             [opensans_roman_fp, opensans_italic_fp, opensans_cond_roman_fp],
         ),
         (wonky_fp, []),
+        # don't add a linkedValue for Regular to Bold since Bold doensn't exist
+        # Fixes https://github.com/googlefonts/axisregistry/issues/104
+        (wavefont_fp, []),
     ],
 )
 def test_stat(fp, sibling_fps):