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
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
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
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
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)