def buildVarCoDesignSpaceDocument(ufo, ufoPath, axes, axisNames): from fontTools.designspaceLib import DesignSpaceDocument globalAxisNames = set(axes.keys()) globalAxes = [ dict( name=axisNames[axisTag], tag=axisTag, minimum=minValue, default=defaultValue, maximum=maxValue, ) for axisTag, (minValue, defaultValue, maxValue) in axes.items() ] globalAxisMapping = { axis["tag"]: (axis["name"], axis["minimum"], axis["maximum"]) for axis in globalAxes } doc = DesignSpaceDocument() localAxes = set() for layerName in ufo.layers.keys(): if layerName == "public.default": location = {} layerName = None else: location = parseLayerName(layerName) for axisName, axisValue in location.items(): if axisName not in globalAxisNames: localAxes.add(axisName) unnormalizedLocation = {} for axisName, axisValue in location.items(): if axisName in globalAxisMapping: axisName, minimum, maximum = globalAxisMapping[axisName] axisValue = minimum + (maximum - minimum) * axisValue unnormalizedLocation[axisName] = axisValue doc.addSourceDescriptor(path=ufoPath, layerName=layerName, location=unnormalizedLocation) for axisDict in globalAxes: doc.addAxisDescriptor(**axisDict) for axisName in sorted(localAxes): assert axisName.startswith("V") assert len(axisName) == 4 doc.addAxisDescriptor(name=axisName, tag=axisName, minimum=-1, default=0, maximum=1, hidden=True) return doc
def test_addAxisDescriptor_discrete(): ds = DesignSpaceDocument() axis = ds.addAxisDescriptor( name="Italic", tag="ital", values=[0, 1], default=0, hidden=True, map=[(0, -12), (1, 0)], axisOrdering=3, axisLabels=[ AxisLabelDescriptor( name="Roman", userValue=0, elidable=True, olderSibling=True, linkedUserValue=1, labelNames={"fr": "Romain"}, ) ], ) assert ds.axes[0] is axis assert_descriptors_equal( [axis], [ DiscreteAxisDescriptor( tag="ital", name="Italic", values=[0, 1], default=0, hidden=True, map=[(0, -12), (1, 0)], axisOrdering=3, axisLabels=[ AxisLabelDescriptor( name="Roman", userValue=0, elidable=True, olderSibling=True, linkedUserValue=1, labelNames={"fr": "Romain"}, ) ], ) ], )
def test_addAxisDescriptor(): ds = DesignSpaceDocument() axis = ds.addAxisDescriptor(name="Weight", tag="wght", minimum=100, default=400, maximum=900) assert ds.axes[0] is axis assert isinstance(axis, AxisDescriptor) assert axis.name == "Weight" assert axis.tag == "wght" assert axis.minimum == 100 assert axis.default == 400 assert axis.maximum == 900