def makeAnchor(anchor, ff): """Creates an OpenType anchor object from. If the anchor position contains a variable scalar, these variable scalars are saved in the ``GDEF`` variation store. Args: anchor: a tuple of x,y position. These elements may be numbers or :py:class:`VariableScalar` objects. Returns: an ``otTables.Anchor`` object. """ x, y = anchor if isinstance(x, VariableScalar): x_def, x_index = x.add_to_variation_store(ff.varstorebuilder) else: x_def, x_index = int(x), None if isinstance(y, VariableScalar): y_def, y_index = y.add_to_variation_store(ff.varstorebuilder) else: y_def, y_index = int(y), None anchor = otl.buildAnchor(x_def, y_def) if x_index is not None and x_index != 0xFFFFFFFF: anchor.XDeviceTable = buildVarDevTable(x_index) anchor.Format = 3 if y_index is not None and x_index != 0xFFFFFFFF: anchor.YDeviceTable = buildVarDevTable(y_index) anchor.Format = 3 return anchor
def toOTValueRecord(self, ff, pairPosContext=False): """Converts the ValueRecord to an ``OTLValueRecord`` object. If the value record contains any variable scalars, they are saved to the GDEF variation store.""" otl_value = OTLValueRecord() if pairPosContext and not self: self.XAdvance = 0 for item in ["xPlacement", "yPlacement", "xAdvance", "yAdvance"]: itemvalue = getattr(self, item) if not itemvalue: continue item = item[0].upper() + item[1:] if isinstance(itemvalue, VariableScalar): itemvalue, index = itemvalue.add_to_variation_store(ff.varstorebuilder) if index != 0xFFFF: setattr(otl_value, item[0:4]+"Device", buildVarDevTable(index)) setattr(otl_value, item, itemvalue) return otl_value
def buildVarDevTable(store_builder, master_values): if allEqual(master_values): return master_values[0], None base, varIdx = store_builder.storeMasters(master_values) return base, builder.buildVarDevTable(varIdx)
def buildVarDevTable(store_builder, master_values): if _all_equal(master_values): return None varIdx = store_builder.storeMasters(master_values) return builder.buildVarDevTable(varIdx)
def buildVarDevTable(store_builder, master_values): if _all_equal(master_values): return None varIdx = store_builder.storeMasters(master_values) return builder.buildVarDevTable(varIdx)
def buildVarDevTable(store_builder, master_values): if _all_equal(master_values): return master_values[0], None base, varIdx = store_builder.storeMasters(master_values) return base, builder.buildVarDevTable(varIdx)