Skip to content

Commit efdc552

Browse files
authored
Merge pull request #1169 from daltonmaag/check-extraneous-axes
SubsetMerger: check extraneous donor axes are at their default location
2 parents 6c2f6ac + 08cb433 commit efdc552

2 files changed

Lines changed: 45 additions & 4 deletions

File tree

Lib/gftools/subsetmerger.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -255,9 +255,10 @@ def is_compatible(
255255
) -> bool:
256256
input_userspace_location = input_descriptor.userspace_location
257257
my_userspace_location = descriptor.userspace_location
258-
common_axis_tags = set(input_userspace_location.keys()).intersection(
259-
set(my_userspace_location.keys())
260-
)
258+
input_axis_tags = set(input_userspace_location.keys())
259+
donor_axis_tags = set(my_userspace_location.keys())
260+
common_axis_tags = input_axis_tags.intersection(donor_axis_tags)
261+
extraneous_donor_axis_tags = donor_axis_tags - input_axis_tags
261262
# Assume a source is good for this location unless proved otherwise.
262263
# This is useful for merging single-master donors into a multiple
263264
# master font.
@@ -268,7 +269,10 @@ def is_compatible(
268269
f"{input_userspace_location[axis_tag]} != {my_userspace_location[axis_tag]}"
269270
)
270271
return False
271-
return True
272+
return all(
273+
my_userspace_location[axis_tag] == descriptor.ds.getAxisByTag(axis_tag).default
274+
for axis_tag in extraneous_donor_axis_tags
275+
)
272276

273277

274278
class SubsetMerger:

tests/test_subset_merger.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from fontTools.designspaceLib import DesignSpaceDocument
2+
from gftools import subsetmerger
3+
from gftools.subsetmerger import DonorMasterDescriptor, InputDescriptor
4+
from ufoLib2 import Font
5+
6+
7+
def test_descriptor_compatibility():
8+
input_ds = DesignSpaceDocument()
9+
input_ds.addAxisDescriptor(
10+
name="Weight", tag="wght", minimum=100, maximum=300, default=200
11+
)
12+
master = input_ds.addSourceDescriptor(location={"Weight": 100})
13+
input_descriptor = InputDescriptor(input_ds, master, Font())
14+
15+
donor_ds_incompat = DesignSpaceDocument()
16+
donor_ds_incompat.addAxisDescriptor(
17+
name="Weight", tag="wght", minimum=100, maximum=300, default=200
18+
)
19+
donor_ds_incompat.addAxisDescriptor(
20+
name="Width", tag="wdth", minimum=100, maximum=300, default=200
21+
)
22+
master = donor_ds_incompat.addSourceDescriptor(
23+
# Width is at non-default location
24+
location={"Weight": 100, "Width": 100}
25+
)
26+
27+
assert not subsetmerger.is_compatible(
28+
DonorMasterDescriptor(donor_ds_incompat, master, Font()),
29+
input_descriptor,
30+
)
31+
32+
# Width is now at default location
33+
master.location["Width"] = 200
34+
assert subsetmerger.is_compatible(
35+
DonorMasterDescriptor(donor_ds_incompat, master, Font()),
36+
input_descriptor,
37+
)

0 commit comments

Comments
 (0)