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_deepcopyExceptFonts(): ds = DesignSpaceDocument() ds.addSourceDescriptor(font=object()) ds.addSourceDescriptor(font=object()) ds_copy = ds.deepcopyExceptFonts() assert ds.tostring() == ds_copy.tostring() assert ds.sources[0].font is ds_copy.sources[0].font assert ds.sources[1].font is ds_copy.sources[1].font
def test_addSourceDescriptor(): ds = DesignSpaceDocument() source = ds.addSourceDescriptor(name="TestSource", location={"Weight": 400}) assert ds.sources[0] is source assert isinstance(source, SourceDescriptor) assert source.name == "TestSource" assert source.location == {"Weight": 400}