aboutsummaryrefslogtreecommitdiff
path: root/Lib/fontTools/varLib/interpolatable.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/fontTools/varLib/interpolatable.py')
-rw-r--r--Lib/fontTools/varLib/interpolatable.py71
1 files changed, 60 insertions, 11 deletions
diff --git a/Lib/fontTools/varLib/interpolatable.py b/Lib/fontTools/varLib/interpolatable.py
index a9583a18..f86b6f9b 100644
--- a/Lib/fontTools/varLib/interpolatable.py
+++ b/Lib/fontTools/varLib/interpolatable.py
@@ -16,12 +16,12 @@ import itertools
import sys
def _rot_list(l, k):
- """Rotate list by k items forward. Ie. item at position 0 will be
- at position k in returned list. Negative k is allowed."""
- n = len(l)
- k %= n
- if not k: return l
- return l[n-k:] + l[:n-k]
+ """Rotate list by k items forward. Ie. item at position 0 will be
+ at position k in returned list. Negative k is allowed."""
+ n = len(l)
+ k %= n
+ if not k: return l
+ return l[n-k:] + l[:n-k]
class PerContourPen(BasePen):
@@ -361,20 +361,69 @@ def main(args=None):
from os.path import basename
- names = [basename(filename).rsplit(".", 1)[0] for filename in args.inputs]
-
fonts = []
+ names = []
+
+ if len(args.inputs) == 1:
+ if args.inputs[0].endswith('.designspace'):
+ from fontTools.designspaceLib import DesignSpaceDocument
+ designspace = DesignSpaceDocument.fromfile(args.inputs[0])
+ args.inputs = [master.path for master in designspace.sources]
+
+ elif args.inputs[0].endswith('.glyphs'):
+ from glyphsLib import GSFont, to_ufos
+ gsfont = GSFont(args.inputs[0])
+ fonts.extend(to_ufos(gsfont))
+ names = ['%s-%s' % (f.info.familyName, f.info.styleName) for f in fonts]
+ args.inputs = []
+
+ elif args.inputs[0].endswith('.ttf'):
+ from fontTools.ttLib import TTFont
+ font = TTFont(args.inputs[0])
+ if 'gvar' in font:
+ # Is variable font
+ gvar = font['gvar']
+ # Gather all "master" locations
+ locs = set()
+ for variations in gvar.variations.values():
+ for var in variations:
+ loc = []
+ for tag,val in sorted(var.axes.items()):
+ loc.append((tag,val[1]))
+ locs.add(tuple(loc))
+ # Rebuild locs as dictionaries
+ new_locs = [{}]
+ for loc in sorted(locs, key=lambda v: (len(v), v)):
+ names.append(str(loc))
+ l = {}
+ for tag,val in loc:
+ l[tag] = val
+ new_locs.append(l)
+ locs = new_locs
+ del new_locs
+ # locs is all master locations now
+
+ for loc in locs:
+ fonts.append(font.getGlyphSet(location=loc, normalized=True))
+
+ args.inputs = []
+
+
for filename in args.inputs:
if filename.endswith(".ufo"):
from fontTools.ufoLib import UFOReader
-
fonts.append(UFOReader(filename))
else:
from fontTools.ttLib import TTFont
-
fonts.append(TTFont(filename))
- glyphsets = [font.getGlyphSet() for font in fonts]
+ names.append(basename(filename).rsplit(".", 1)[0])
+
+ if hasattr(fonts[0], 'getGlyphSet'):
+ glyphsets = [font.getGlyphSet() for font in fonts]
+ else:
+ glyphsets = fonts
+
problems = test(glyphsets, glyphs=glyphs, names=names)
if args.json:
import json