Esempio n. 1
0
def _add_stat(font, axes):
    # for now we just get the axis tags and nameIDs from the fvar,
    # so we can reuse the same nameIDs which were defined in there.
    # TODO make use of 'axes' once it adds style attributes info:
    # https://github.com/LettError/designSpaceDocument/issues/8

    if "STAT" in font:
        return

    fvarTable = font['fvar']

    STAT = font["STAT"] = newTable('STAT')
    stat = STAT.table = ot.STAT()
    stat.Version = 0x00010001

    axisRecords = []
    for i, a in enumerate(fvarTable.axes):
        axis = ot.AxisRecord()
        axis.AxisTag = Tag(a.axisTag)
        axis.AxisNameID = a.axisNameID
        axis.AxisOrdering = i
        axisRecords.append(axis)

    axisRecordArray = ot.AxisRecordArray()
    axisRecordArray.Axis = axisRecords
    # XXX these should not be hard-coded but computed automatically
    stat.DesignAxisRecordSize = 8
    stat.DesignAxisCount = len(axisRecords)
    stat.DesignAxisRecord = axisRecordArray

    # for the elided fallback name, we default to the base style name.
    # TODO make this user-configurable via designspace document
    stat.ElidedFallbackNameID = 2
Esempio n. 2
0
def _add_stat(font, axes):

    if "STAT" in font:
        return

    nameTable = font['name']

    STAT = font["STAT"] = newTable('STAT')
    stat = STAT.table = ot.STAT()
    stat.Version = 0x00010000

    axisRecords = []
    for i, a in enumerate(axes.values()):
        axis = ot.AxisRecord()
        axis.AxisTag = Tag(a.tag)
        # Meh. Reuse fvar nameID!
        axis.AxisNameID = nameTable.addName(tounicode(a.labelname['en']))
        axis.AxisOrdering = i
        axisRecords.append(axis)

    axisRecordArray = ot.AxisRecordArray()
    axisRecordArray.Axis = axisRecords
    # XXX these should not be hard-coded but computed automatically
    stat.DesignAxisRecordSize = 8
    stat.DesignAxisCount = len(axisRecords)
    stat.DesignAxisRecord = axisRecordArray
Esempio n. 3
0
def _buildAxisRecords(axes, nameTable):
    axisRecords = []
    axisValues = []
    for axisRecordIndex, axisDict in enumerate(axes):
        axis = ot.AxisRecord()
        axis.AxisTag = axisDict["tag"]
        axis.AxisNameID = _addName(nameTable, axisDict["name"])
        axis.AxisOrdering = axisDict.get("ordering", axisRecordIndex)
        axisRecords.append(axis)

        for axisVal in axisDict.get("values", ()):
            axisValRec = ot.AxisValue()
            axisValRec.AxisIndex = axisRecordIndex
            axisValRec.Flags = axisVal.get("flags", 0)
            axisValRec.ValueNameID = _addName(nameTable, axisVal['name'])

            if "value" in axisVal:
                axisValRec.Value = axisVal["value"]
                if "linkedValue" in axisVal:
                    axisValRec.Format = 3
                    axisValRec.LinkedValue = axisVal["linkedValue"]
                else:
                    axisValRec.Format = 1
            elif "nominalValue" in axisVal:
                axisValRec.Format = 2
                axisValRec.NominalValue = axisVal["nominalValue"]
                axisValRec.RangeMinValue = axisVal.get("rangeMinValue", AXIS_VALUE_NEGATIVE_INFINITY)
                axisValRec.RangeMaxValue = axisVal.get("rangeMaxValue", AXIS_VALUE_POSITIVE_INFINITY)
            else:
                raise ValueError("Can't determine format for AxisValue")

            axisValues.append(axisValRec)
    return axisRecords, axisValues
Esempio n. 4
0
def _new_axis_record(tag: str, name_id: int, ordering: Optional[int]):
    if ordering is None:
        raise ValueError("ordering must be an integer.")
    axis_record = otTables.AxisRecord()
    axis_record.AxisTag = fontTools.misc.py23.Tag(tag)
    axis_record.AxisNameID = name_id
    axis_record.AxisOrdering = ordering
    return axis_record
Esempio n. 5
0
def append_stat_axis(stat, tag, namerecord_id):
    """Add a STAT axis if the tag does not exist already."""
    has_tags = []
    axises = stat.table.DesignAxisRecord.Axis
    for axis in axises:
        has_tags.append(axis.AxisTag)

    if tag in has_tags:
        raise Exception('{} has already been declared in the STAT table')

    axis_record = otTables.AxisRecord()
    axis_record.AxisTag = tag
    axis_record.AxisNameID = namerecord_id
    axis_record.AxisOrdering = len(axises)
    axises.append(axis_record)