def interpolate_layout(designspace_filename, loc, finder):

    masters, instances = designspace.load(designspace_filename)
    base_idx = None
    for i, m in enumerate(masters):
        if 'info' in m and m['info']['copy']:
            assert base_idx is None
            base_idx = i
    assert base_idx is not None, "Cannot find 'base' master; Add <info> element to one of the masters in the .designspace document."

    from pprint import pprint
    print("Index of base master:", base_idx)

    print("Building GX")
    print("Loading TTF masters")
    basedir = os.path.dirname(designspace_filename)
    master_ttfs = [
        finder(os.path.join(basedir, m['filename'])) for m in masters
    ]
    master_fonts = [TTFont(ttf_path) for ttf_path in master_ttfs]

    #font = master_fonts[base_idx]
    font = TTFont(master_ttfs[base_idx])

    master_locs = [o['location'] for o in masters]

    axis_tags = set(master_locs[0].keys())
    assert all(axis_tags == set(m.keys()) for m in master_locs)

    # Set up axes
    axes = {}
    for tag in axis_tags:
        default = master_locs[base_idx][tag]
        lower = min(m[tag] for m in master_locs)
        upper = max(m[tag] for m in master_locs)
        axes[tag] = (lower, default, upper)
    print("Axes:")
    pprint(axes)

    print("Location:", loc)
    print("Master locations:")
    pprint(master_locs)

    # Normalize locations
    loc = models.normalizeLocation(loc, axes)
    master_locs = [models.normalizeLocation(m, axes) for m in master_locs]

    print("Normalized location:", loc)
    print("Normalized master locations:")
    pprint(master_locs)

    # Assume single-model for now.
    model = models.VariationModel(master_locs)
    assert 0 == model.mapping[base_idx]

    merger = InstancerMerger(model, loc)

    print("Building variations tables")
    merge_tables(font, merger, master_fonts, axes, base_idx, ['GPOS'])
    return font
def interpolate_layout(designspace_filename, loc, finder):

	masters, instances = designspace.load(designspace_filename)
	base_idx = None
	for i,m in enumerate(masters):
		if 'info' in m and m['info']['copy']:
			assert base_idx is None
			base_idx = i
	assert base_idx is not None, "Cannot find 'base' master; Add <info> element to one of the masters in the .designspace document."

	from pprint import pprint
	print("Index of base master:", base_idx)

	print("Building GX")
	print("Loading TTF masters")
	basedir = os.path.dirname(designspace_filename)
	master_ttfs = [finder(os.path.join(basedir, m['filename'])) for m in masters]
	master_fonts = [TTFont(ttf_path) for ttf_path in master_ttfs]

	#font = master_fonts[base_idx]
	font = TTFont(master_ttfs[base_idx])

	master_locs = [o['location'] for o in masters]

	axis_tags = set(master_locs[0].keys())
	assert all(axis_tags == set(m.keys()) for m in master_locs)

	# Set up axes
	axes = {}
	for tag in axis_tags:
		default = master_locs[base_idx][tag]
		lower = min(m[tag] for m in master_locs)
		upper = max(m[tag] for m in master_locs)
		axes[tag] = (lower, default, upper)
	print("Axes:")
	pprint(axes)

	print("Location:", loc)
	print("Master locations:")
	pprint(master_locs)

	# Normalize locations
	loc = models.normalizeLocation(loc, axes)
	master_locs = [models.normalizeLocation(m, axes) for m in master_locs]

	print("Normalized location:", loc)
	print("Normalized master locations:")
	pprint(master_locs)

	# Assume single-model for now.
	model = models.VariationModel(master_locs)
	assert 0 == model.mapping[base_idx]

	merger = InstancerMerger(font, model, loc)

	print("Building variations tables")
	merge_tables(font, merger, master_fonts, axes, base_idx, ['GPOS'])
	return font
Example #3
0
def _merge_OTL(font, model, master_fonts, axisTags, base_idx):

    print("Merging OpenType Layout tables")
    merger = VariationMerger(model, axisTags)

    merge_tables(font, merger, master_fonts, axisTags, base_idx, ['GPOS'])
    store = merger.store_builder.finish()
    try:
        GDEF = font['GDEF'].table
        assert GDEF.Version <= 0x00010002
    except KeyError:
        font['GDEF'] = newTable('GDEF')
        GDEFTable = font["GDEF"] = newTable('GDEF')
        GDEF = GDEFTable.table = ot.GDEF()
    GDEF.Version = 0x00010003
    GDEF.VarStore = store
Example #4
0
def _merge_OTL(font, model, master_fonts, axisTags, base_idx):

	log.info("Merging OpenType Layout tables")
	merger = VariationMerger(model, axisTags, font)

	merge_tables(font, merger, master_fonts, axisTags, base_idx, ['GPOS'])
	store = merger.store_builder.finish()
	try:
		GDEF = font['GDEF'].table
		assert GDEF.Version <= 0x00010002
	except KeyError:
		font['GDEF']= newTable('GDEF')
		GDEFTable = font["GDEF"] = newTable('GDEF')
		GDEF = GDEFTable.table = ot.GDEF()
	GDEF.Version = 0x00010003
	GDEF.VarStore = store