def test_designspace_source_locations(tmpdir): """Check that opening UFOs from their source descriptor works with both the filename and the path attributes. """ designspace_path = os.path.join(str(tmpdir), 'test.designspace') light_ufo_path = os.path.join(str(tmpdir), 'light.ufo') bold_ufo_path = os.path.join(str(tmpdir), 'bold.ufo') designspace = DesignSpaceDocument() light_source = designspace.newSourceDescriptor() light_source.filename = 'light.ufo' designspace.addSource(light_source) bold_source = designspace.newSourceDescriptor() bold_source.path = bold_ufo_path designspace.addSource(bold_source) designspace.write(designspace_path) light = defcon.Font() light.info.ascender = 30 light.save(light_ufo_path) bold = defcon.Font() bold.info.ascender = 40 bold.save(bold_ufo_path) designspace = DesignSpaceDocument() designspace.read(designspace_path) font = to_glyphs(designspace) assert len(font.masters) == 2 assert font.masters[0].ascender == 30 assert font.masters[1].ascender == 40
def test_warn_diff_between_designspace_and_ufos(caplog, ufo_module): ufo = ufo_module.Font() ufo.info.familyName = "UFO Family Name" ufo.info.styleName = "UFO Style Name" # ufo.info.styleMapFamilyName = 'UFO Stylemap Family Name' # ufo.info.styleMapStyleName = 'bold' doc = DesignSpaceDocument() source = doc.newSourceDescriptor() source.font = ufo source.familyName = "DS Family Name" source.styleName = "DS Style Name" doc.addSource(source) font = to_glyphs(doc, minimize_ufo_diffs=True) assert any(record.levelname == "WARNING" for record in caplog.records) assert ( "The familyName is different between the UFO and the designspace source" in caplog.text) assert ( "The styleName is different between the UFO and the designspace source" in caplog.text) doc = to_designspace(font, ufo_module=ufo_module) source = doc.sources[0] # The UFO info will prevail assert ufo.info.familyName == "UFO Family Name" assert ufo.info.styleName == "UFO Style Name" assert source.font.info.familyName == "UFO Family Name" assert source.font.info.styleName == "UFO Style Name"
def buildVF(font, opts): for instance in font.instances: print(f" MASTER {instance.name}") build(instance, opts) if instance.name == "Regular": regular = instance ds = DesignSpaceDocument() for axisDef in font.customParameters["Axes"]: axis = ds.newAxisDescriptor() axis.tag = axisDef["Tag"] axis.name = axisDef["Name"] axis.maximum = max(i.axes[axis.tag] for i in font.instances) axis.minimum = min(i.axes[axis.tag] for i in font.instances) axis.default = regular.axes[axis.tag] ds.addAxis(axis) for instance in font.instances: source = ds.newSourceDescriptor() source.font = instance.font source.familyName = instance.familyName source.styleName = instance.name source.name = instance.fullName source.location = {a.name: instance.axes[a.tag] for a in ds.axes} ds.addSource(source) print(f" MERGE {font.familyName}") otf, _, _ = merge(ds) return otf
def test_warn_diff_between_designspace_and_ufos(caplog): ufo = defcon.Font() ufo.info.familyName = 'UFO Family Name' ufo.info.styleName = 'UFO Style Name' # ufo.info.styleMapFamilyName = 'UFO Stylemap Family Name' # ufo.info.styleMapStyleName = 'bold' doc = DesignSpaceDocument() source = doc.newSourceDescriptor() source.font = ufo source.familyName = 'DS Family Name' source.styleName = 'DS Style Name' doc.addSource(source) font = to_glyphs(doc, minimize_ufo_diffs=True) assert any(record.levelname == 'WARNING' for record in caplog.records) assert 'The familyName is different between the UFO and the designspace source' in caplog.text assert 'The styleName is different between the UFO and the designspace source' in caplog.text doc = to_designspace(font) source = doc.sources[0] # The UFO info will prevail assert ufo.info.familyName == 'UFO Family Name' assert ufo.info.styleName == 'UFO Style Name' assert source.font.info.familyName == 'UFO Family Name' assert source.font.info.styleName == 'UFO Style Name'
def test_designspace_source_locations(tmpdir, ufo_module): """Check that opening UFOs from their source descriptor works with both the filename and the path attributes. """ designspace_path = os.path.join(str(tmpdir), "test.designspace") light_ufo_path = os.path.join(str(tmpdir), "light.ufo") bold_ufo_path = os.path.join(str(tmpdir), "bold.ufo") designspace = DesignSpaceDocument() wght = AxisDescriptor() wght.minimum = 100 wght.maximum = 700 wght.default = 100 wght.name = "Weight" wght.tag = "wght" designspace.addAxis(wght) light_source = designspace.newSourceDescriptor() light_source.filename = "light.ufo" light_source.location = {"Weight": 100} designspace.addSource(light_source) bold_source = designspace.newSourceDescriptor() bold_source.path = bold_ufo_path bold_source.location = {"Weight": 700} designspace.addSource(bold_source) designspace.write(designspace_path) light = ufo_module.Font() light.info.ascender = 30 light.save(light_ufo_path) bold = ufo_module.Font() bold.info.ascender = 40 bold.save(bold_ufo_path) designspace = DesignSpaceDocument() designspace.read(designspace_path) font = to_glyphs(designspace, ufo_module=ufo_module) assert len(font.masters) == 2 assert font.masters[0].ascender == 30 assert font.masters[1].ascender == 40
def test_ufo_filename_is_kept_the_same(tmpdir, ufo_module): """Check that the filenames of existing UFOs are correctly written to the designspace document when doing UFOs -> Glyphs -> designspace. This only works when the option "minimize_ufo_diffs" is given, because keeping track of this information adds stuff to the Glyphs file. """ light_ufo_path = os.path.join(str(tmpdir), "light.ufo") bold_ufo_path = os.path.join(str(tmpdir), "subdir/bold.ufo") light = ufo_module.Font() light.info.ascender = 30 light.save(light_ufo_path) bold = ufo_module.Font() bold.info.ascender = 40 bold.save(bold_ufo_path) # First check: when going from UFOs -> Glyphs -> designspace font = to_glyphs([light, bold], minimize_ufo_diffs=True) designspace = to_designspace(font, ufo_module=ufo_module) assert designspace.sources[0].path == light_ufo_path assert designspace.sources[1].path == bold_ufo_path # Second check: going from designspace -> Glyphs -> designspace designspace_path = os.path.join(str(tmpdir), "test.designspace") designspace = DesignSpaceDocument() light_source = designspace.newSourceDescriptor() light_source.filename = "light.ufo" designspace.addSource(light_source) bold_source = designspace.newSourceDescriptor() bold_source.path = bold_ufo_path designspace.addSource(bold_source) designspace.write(designspace_path) font = to_glyphs([light, bold], minimize_ufo_diffs=True) assert designspace.sources[0].filename == "light.ufo" assert designspace.sources[1].filename == "subdir/bold.ufo"
def buildVF(opts): font = GSFont(opts.glyphs) glyphOrder = buildAltGlyphs(font) prepare(font) for instance in font.instances: print(f" MASTER {instance.name}") build(instance, opts, glyphOrder) if instance.name == "Regular": regular = instance ds = DesignSpaceDocument() for i, axisDef in enumerate(font.axes): axis = ds.newAxisDescriptor() axis.tag = axisDef.axisTag axis.name = axisDef.name axis.maximum = max(x.axes[i] for x in font.instances) axis.minimum = min(x.axes[i] for x in font.instances) axis.default = regular.axes[i] ds.addAxis(axis) for instance in font.instances: source = ds.newSourceDescriptor() source.font = instance.font source.familyName = instance.familyName source.styleName = instance.name source.name = instance.fullName source.location = { a.name: instance.axes[i] for i, a in enumerate(ds.axes) } ds.addSource(source) print(f" MERGE {font.familyName}") otf, _, _ = merge(ds) subroutinize(otf) if not opts.debug: otf["post"].formatType = 3.0 return otf