예제 #1
0
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
예제 #2
0
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
예제 #3
0
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}