diff options
Diffstat (limited to 'Lib/fontTools/designspaceLib/split.py')
-rw-r--r-- | Lib/fontTools/designspaceLib/split.py | 44 |
1 files changed, 42 insertions, 2 deletions
diff --git a/Lib/fontTools/designspaceLib/split.py b/Lib/fontTools/designspaceLib/split.py index 408de70a..0b7cdf4b 100644 --- a/Lib/fontTools/designspaceLib/split.py +++ b/Lib/fontTools/designspaceLib/split.py @@ -11,6 +11,7 @@ from typing import Any, Callable, Dict, Iterator, List, Tuple, cast from fontTools.designspaceLib import ( AxisDescriptor, + AxisMappingDescriptor, DesignSpaceDocument, DiscreteAxisDescriptor, InstanceDescriptor, @@ -225,6 +226,44 @@ def _extractSubSpace( ) ) + subDoc.axisMappings = mappings = [] + subDocAxes = {axis.name for axis in subDoc.axes} + for mapping in doc.axisMappings: + if not all(axis in subDocAxes for axis in mapping.inputLocation.keys()): + continue + if not all(axis in subDocAxes for axis in mapping.outputLocation.keys()): + LOGGER.error( + "In axis mapping from input %s, some output axes are not in the variable-font: %s", + mapping.inputLocation, + mapping.outputLocation, + ) + continue + + mappingAxes = set() + mappingAxes.update(mapping.inputLocation.keys()) + mappingAxes.update(mapping.outputLocation.keys()) + for axis in doc.axes: + if axis.name not in mappingAxes: + continue + range = userRegion[axis.name] + if ( + range.minimum != axis.minimum + or (range.default is not None and range.default != axis.default) + or range.maximum != axis.maximum + ): + LOGGER.error( + "Limiting axis ranges used in <mapping> elements not supported: %s", + axis.name, + ) + continue + + mappings.append( + AxisMappingDescriptor( + inputLocation=mapping.inputLocation, + outputLocation=mapping.outputLocation, + ) + ) + # Don't include STAT info # subDoc.locationLabels = doc.locationLabels @@ -352,9 +391,10 @@ def _extractSubSpace( def _conditionSetFrom(conditionSet: List[Dict[str, Any]]) -> ConditionSet: c: Dict[str, Range] = {} for condition in conditionSet: + minimum, maximum = condition.get("minimum"), condition.get("maximum") c[condition["name"]] = Range( - condition.get("minimum", -math.inf), - condition.get("maximum", math.inf), + minimum if minimum is not None else -math.inf, + maximum if maximum is not None else math.inf, ) return c |