summaryrefslogtreecommitdiffstats
path: root/contrib/python/fonttools/fontTools/varLib/interpolatable.py
diff options
context:
space:
mode:
authorrobot-contrib <[email protected]>2023-11-30 09:51:41 +0300
committerrobot-contrib <[email protected]>2023-11-30 10:16:12 +0300
commitd3b4d830e105623b4cc96655c4dbb2d73f825989 (patch)
treedf2a42a8615d7c1bc9d7fd682c8c8f992a17b681 /contrib/python/fonttools/fontTools/varLib/interpolatable.py
parent468826fff1465595d80da778532b253674e1e1c3 (diff)
Update contrib/python/fonttools to 4.44.3
Diffstat (limited to 'contrib/python/fonttools/fontTools/varLib/interpolatable.py')
-rw-r--r--contrib/python/fonttools/fontTools/varLib/interpolatable.py40
1 files changed, 38 insertions, 2 deletions
diff --git a/contrib/python/fonttools/fontTools/varLib/interpolatable.py b/contrib/python/fonttools/fontTools/varLib/interpolatable.py
index c3f01f46e00..05ed3f768eb 100644
--- a/contrib/python/fonttools/fontTools/varLib/interpolatable.py
+++ b/contrib/python/fonttools/fontTools/varLib/interpolatable.py
@@ -11,10 +11,14 @@ from fontTools.pens.pointPen import AbstractPointPen, SegmentToPointPen
from fontTools.pens.recordingPen import RecordingPen
from fontTools.pens.statisticsPen import StatisticsPen
from fontTools.pens.momentsPen import OpenContourError
+from fontTools.varLib.models import piecewiseLinearMap
from collections import defaultdict
import math
import itertools
import sys
+import logging
+
+log = logging.getLogger("fontTools.varLib.interpolatable")
def _rot_list(l, k):
@@ -429,9 +433,14 @@ def main(args=None):
nargs="+",
help="Input a single variable font / DesignSpace / Glyphs file, or multiple TTF/UFO files",
)
+ parser.add_argument("-v", "--verbose", action="store_true", help="Run verbosely.")
args = parser.parse_args(args)
+ from fontTools import configLogger
+
+ configLogger(level=("INFO" if args.verbose else "ERROR"))
+
glyphs = args.glyphs.split() if args.glyphs else None
from os.path import basename
@@ -460,6 +469,24 @@ def main(args=None):
font = TTFont(args.inputs[0])
if "gvar" in font:
# Is variable font
+
+ axisMapping = {}
+ fvar = font["fvar"]
+ for axis in fvar.axes:
+ axisMapping[axis.axisTag] = {
+ -1: axis.minValue,
+ 0: axis.defaultValue,
+ 1: axis.maxValue,
+ }
+ if "avar" in font:
+ avar = font["avar"]
+ for axisTag, segments in avar.segments.items():
+ fvarMapping = axisMapping[axisTag].copy()
+ for location, value in segments.items():
+ axisMapping[axisTag][value] = piecewiseLinearMap(
+ location, fvarMapping
+ )
+
gvar = font["gvar"]
glyf = font["glyf"]
# Gather all glyphs at their "master" locations
@@ -486,10 +513,18 @@ def main(args=None):
glyphname, glyphsets[locTuple], ttGlyphSets[locTuple], glyf
)
- names = ["()"]
+ names = ["''"]
fonts = [font.getGlyphSet()]
for locTuple in sorted(glyphsets.keys(), key=lambda v: (len(v), v)):
- names.append(str(locTuple))
+ name = (
+ "'"
+ + " ".join(
+ "%s=%s" % (k, piecewiseLinearMap(v, axisMapping[k]))
+ for k, v in locTuple
+ )
+ + "'"
+ )
+ names.append(name)
fonts.append(glyphsets[locTuple])
args.ignore_missing = True
args.inputs = []
@@ -525,6 +560,7 @@ def main(args=None):
for gn in diff:
glyphset[gn] = None
+ log.info("Running on %d glyphsets", len(glyphsets))
problems_gen = test_gen(
glyphsets, glyphs=glyphs, names=names, ignore_missing=args.ignore_missing
)