示例#1
0
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
示例#2
0
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
示例#3
0
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)
示例#4
0
def buildVarDevTable(store_builder, master_values):
    if _all_equal(master_values):
        return None
    varIdx = store_builder.storeMasters(master_values)
    return builder.buildVarDevTable(varIdx)
示例#5
0
def buildVarDevTable(store_builder, master_values):
	if _all_equal(master_values):
		return None
	varIdx = store_builder.storeMasters(master_values)
	return builder.buildVarDevTable(varIdx)
示例#6
0
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)