[varLib] Make designspace.load() return a dictionary instead of a tuple

This commit is contained in:
Miguel Sousa 2017-02-26 07:49:44 -08:00
parent 43efa63732
commit f061231049
5 changed files with 57 additions and 41 deletions

View File

@ -265,7 +265,11 @@ def build(designspace_filename, master_finder=lambda s:s, axisMap=None):
(axis-tag, axis-name).
"""
axes, masters, instances = designspace.load(designspace_filename)
ds = designspace.load(designspace_filename)
axes = ds['axes']
masters = ds['masters']
instances = ds['instances']
base_idx = None
for i,m in enumerate(masters):
if 'info' in m and m['info']['copy']:

View File

@ -61,6 +61,7 @@ def _loadAxis(et):
return item
def _load(et):
designspace = {}
ds = et.getroot()
axes = []
@ -68,20 +69,23 @@ def _load(et):
if ds_axes:
for et in ds_axes:
axes.append(_loadAxis(et))
designspace['axes'] = axes
masters = []
for et in ds.find('sources'):
masters.append(_loadItem(et))
designspace['masters'] = masters
instances = []
for et in ds.find('instances'):
instances.append(_loadItem(et))
designspace['instances'] = instances
return axes, masters, instances
return designspace
def load(filename):
"""Load designspace from a file name or object.
Returns three items:
Returns a dictionary containing three items:
- list of axes
- list of masters (aka sources)
- list of instances"""

View File

@ -12,7 +12,11 @@ import os.path
def interpolate_layout(designspace_filename, loc, finder):
axes, masters, instances = designspace.load(designspace_filename)
ds = designspace.load(designspace_filename)
axes = ds['axes']
masters = ds['masters']
instances = ds['instances']
base_idx = None
for i,m in enumerate(masters):
if 'info' in m and m['info']['copy']:

View File

@ -1,3 +1,6 @@
- [varLib] designspace.load() now returns a dictionary, instead of a tuple,
and supports <axes> element (#864)
3.7.2 (released 2017-02-17)
---------------------------

View File

@ -10,45 +10,46 @@ class DesignspaceTest(unittest.TestCase):
self.assertEqual(
designspace.load(_getpath("VarLibTest.designspace")),
# axes
([{'map': [{'input': 0.0, 'output': 10.0},
{'input': 401.0, 'output': 66.0},
{'input': 1000.0, 'output': 990.0}],
'name': 'weight',
'default': 0.0,
'tag': 'wght',
'maximum': 1000.0,
'minimum': 0.0},
{'default': 250.0,
'minimum': 0.0,
'tag': 'wdth',
'maximum': 1000.0,
'name': 'width'},
{'name': 'contrast',
'default': 0.0,
'tag': 'cntr',
'maximum': 100.0,
'minimum': 0.0,
'labelname': {'de': 'Kontrast', 'en': 'Contrast'}}],
{'instances':
[{'info': {},
'familyname': 'VarLibTest',
'filename': 'instance/VarLibTest-Medium.ufo',
'kerning': {},
'location': {'weight': 0.5},
'stylename': 'Medium'}],
# masters (aka sources)
[{'info': {'copy': True},
'name': 'master_1',
'lib': {'copy': True},
'filename': 'VarLibTest-Light.ufo',
'location': {'weight': 0.0},
'groups': {'copy': True}},
{'location': {'weight': 1.0},
'name': 'master_2',
'filename': 'VarLibTest-Bold.ufo'}],
'masters':
[{'info': {'copy': True},
'name': 'master_1',
'lib': {'copy': True},
'filename': 'VarLibTest-Light.ufo',
'location': {'weight': 0.0},
'groups': {'copy': True}},
{'location': {'weight': 1.0},
'name': 'master_2',
'filename': 'VarLibTest-Bold.ufo'}],
# instances
[{'info': {},
'familyname': 'VarLibTest',
'filename': 'instance/VarLibTest-Medium.ufo',
'kerning': {},
'location': {'weight': 0.5},
'stylename': 'Medium'}])
'axes':
[{'map': [{'input': 0.0, 'output': 10.0},
{'input': 401.0, 'output': 66.0},
{'input': 1000.0, 'output': 990.0}],
'name': 'weight',
'default': 0.0,
'tag': 'wght',
'maximum': 1000.0,
'minimum': 0.0},
{'default': 250.0,
'minimum': 0.0,
'tag': 'wdth',
'maximum': 1000.0,
'name': 'width'},
{'name': 'contrast',
'default': 0.0,
'tag': 'cntr',
'maximum': 100.0,
'minimum': 0.0,
'labelname': {'de': 'Kontrast', 'en': 'Contrast'}}]
}
)