"""Rudimentary support for loading MutatorMath .designspace files.""" from __future__ import print_function, division, absolute_import from fontTools.misc.py23 import * try: import xml.etree.cElementTree as ET except ImportError: import xml.etree.ElementTree as ET __all__ = ['load', 'loads'] def _xmlParseLocation(et): loc = {} for dim in et.find('location'): assert dim.tag == 'dimension' name = dim.attrib['name'] value = float(dim.attrib['xvalue']) assert name not in loc loc[name] = value return loc def _loadItem(et): item = dict(et.attrib) for elt in et: if elt.tag == 'location': value = _xmlParseLocation(et) else: value = {} if 'copy' in elt.attrib: value['copy'] = bool(int(elt.attrib['copy'])) # TODO load more?! item[elt.tag] = value return item def _load(et): masters = [] ds = et.getroot() for et in ds.find('sources'): masters.append(_loadItem(et)) instances = [] for instance in ds.find('instances'): instances.append(_loadItem(et)) return masters, instances def load(filename): """Load designspace from a file name or object. Returns two items: list of masters (aka sources) and list of instances.""" return _load(ET.parse(filename)) def loads(string): """Load designspace from a string.""" return _load(ET.fromstring(string))