aboutsummaryrefslogtreecommitdiff
path: root/Lib/fontTools/varLib/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/fontTools/varLib/models.py')
-rw-r--r--Lib/fontTools/varLib/models.py20
1 files changed, 20 insertions, 0 deletions
diff --git a/Lib/fontTools/varLib/models.py b/Lib/fontTools/varLib/models.py
index 8ea1432a..653b75ff 100644
--- a/Lib/fontTools/varLib/models.py
+++ b/Lib/fontTools/varLib/models.py
@@ -339,6 +339,26 @@ class VariationModel(object):
return self.interpolateFromDeltasAndScalars(deltas, scalars)
+def piecewiseLinearMap(v, mapping):
+ keys = mapping.keys()
+ if not keys:
+ return v
+ if v in keys:
+ return mapping[v]
+ k = min(keys)
+ if v < k:
+ return v + mapping[k] - k
+ k = max(keys)
+ if v > k:
+ return v + mapping[k] - k
+ # Interpolate
+ a = max(k for k in keys if k < v)
+ b = min(k for k in keys if k > v)
+ va = mapping[a]
+ vb = mapping[b]
+ return va + (vb - va) * (v - a) / (b - a)
+
+
def main(args):
from fontTools import configLogger