Ejemplo n.º 1
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
    if records:
        MVAR = font["MVAR"] = newTable('MVAR')
        mvar = MVAR.table = ot.MVAR()
        mvar.Version = 0x00010000
        mvar.Reserved = 0
        mvar.VarStore = store_builder.finish()
        # 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)
Ejemplo n.º 2
0
 def __init__(self, model, axisTags):
     self.model = model
     self.store_builder = builder.OnlineVarStoreBuilder(axisTags)
     self.store_builder.setModel(model)