aboutsummaryrefslogtreecommitdiff
path: root/Lib/fontTools/designspaceLib/split.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/fontTools/designspaceLib/split.py')
-rw-r--r--Lib/fontTools/designspaceLib/split.py44
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