Beispiel #1
0
def _add_MVAR(font, model, master_ttfs, axisTags):

    log.info("Generating MVAR")

    store_builder = varStore.OnlineVarStoreBuilder(axisTags)
    store_builder.setModel(model)

    records = []
    lastTableTag = None
    fontTable = None
    tables = None
    for tag, (tableTag, itemName) in sorted(MVAR_ENTRIES.items(),
                                            key=lambda kv: kv[1]):
        if tableTag != lastTableTag:
            tables = fontTable = None
            if tableTag in font:
                # TODO Check all masters have same table set?
                fontTable = font[tableTag]
                tables = [master[tableTag] for master in master_ttfs]
            lastTableTag = tableTag
        if tables is None:
            continue

        # TODO support gasp entries

        master_values = [getattr(table, itemName) for table in tables]
        if _all_equal(master_values):
            base, varIdx = master_values[0], None
        else:
            base, varIdx = store_builder.storeMasters(master_values)
        setattr(fontTable, itemName, base)

        if varIdx is None:
            continue
        log.info('	%s: %s.%s	%s', tag, tableTag, itemName, master_values)
        rec = ot.MetricsValueRecord()
        rec.ValueTag = tag
        rec.VarIdx = varIdx
        records.append(rec)

    assert "MVAR" not in font
    if records:
        store = store_builder.finish()
        # Optimize
        mapping = store.optimize()
        for rec in records:
            rec.VarIdx = mapping[rec.VarIdx]

        MVAR = font["MVAR"] = newTable('MVAR')
        mvar = MVAR.table = ot.MVAR()
        mvar.Version = 0x00010000
        mvar.Reserved = 0
        mvar.VarStore = store
        # XXX these should not be hard-coded but computed automatically
        mvar.ValueRecordSize = 8
        mvar.ValueRecordCount = len(records)
        mvar.ValueRecord = sorted(records, key=lambda r: r.ValueTag)
Beispiel #2
0
def _add_MVAR(font, model, master_ttfs, axisTags):

	log.info("Generating MVAR")

	store_builder = varStore.OnlineVarStoreBuilder(axisTags)
	store_builder.setModel(model)

	records = []
	lastTableTag = None
	fontTable = None
	tables = None
	for tag, (tableTag, itemName) in sorted(MVAR_ENTRIES.items(), key=lambda kv: kv[1]):
		if tableTag != lastTableTag:
			tables = fontTable = None
			if tableTag in font:
				# TODO Check all masters have same table set?
				fontTable = font[tableTag]
				tables = [master[tableTag] for master in master_ttfs]
			lastTableTag = tableTag
		if tables is None:
			continue

		# TODO support gasp entries

		master_values = [getattr(table, itemName) for table in tables]
		if _all_equal(master_values):
			base, varIdx = master_values[0], None
		else:
			base, varIdx = store_builder.storeMasters(master_values)
		setattr(fontTable, itemName, base)

		if varIdx is None:
			continue
		log.info('	%s: %s.%s	%s', tag, tableTag, itemName, master_values)
		rec = ot.MetricsValueRecord()
		rec.ValueTag = tag
		rec.VarIdx = varIdx
		records.append(rec)

	assert "MVAR" not in font
	if records:
		store = store_builder.finish()
		# Optimize
		mapping = store.optimize()
		for rec in records:
			rec.VarIdx = mapping[rec.VarIdx]

		MVAR = font["MVAR"] = newTable('MVAR')
		mvar = MVAR.table = ot.MVAR()
		mvar.Version = 0x00010000
		mvar.Reserved = 0
		mvar.VarStore = store
		# XXX these should not be hard-coded but computed automatically
		mvar.ValueRecordSize = 8
		mvar.ValueRecordCount = len(records)
		mvar.ValueRecord = sorted(records, key=lambda r: r.ValueTag)
Beispiel #3
0
def _add_MVAR(font, model, master_ttfs, axisTags):

    log.info("Generating MVAR")

    store_builder = builder.OnlineVarStoreBuilder(axisTags)
    store_builder.setModel(model)

    records = []
    lastTableTag = None
    fontTable = None
    tables = None
    for tag, (tableTag, itemName) in sorted(_MVAR_entries.items(),
                                            key=lambda kv: kv[1]):
        if tableTag != lastTableTag:
            tables = fontTable = None
            if tableTag in font:
                # TODO Check all masters have same table set?
                fontTable = font[tableTag]
                tables = [master[tableTag] for master in master_ttfs]
            lastTableTag = tableTag
        if tables is None:
            continue

        # TODO support gasp entries

        master_values = [getattr(table, itemName) for table in tables]
        if _all_equal(master_values):
            base, varIdx = master_values[0], None
        else:
            base, varIdx = store_builder.storeMasters(master_values)
        setattr(fontTable, itemName, base)

        if varIdx is None:
            continue
        log.info('	%s: %s.%s	%s', tag, tableTag, itemName, master_values)
        rec = ot.MetricsValueRecord()
        rec.ValueTag = tag
        rec.VarIdx = varIdx
        records.append(rec)

    assert "MVAR" not in font
    MVAR = font["MVAR"] = newTable('MVAR')
    mvar = MVAR.table = ot.MVAR()
    mvar.Version = 0x00010000
    mvar.Reserved = 0
    mvar.VarStore = store_builder.finish()
    mvar.ValueRecord = sorted(records, key=lambda r: r.ValueTag)