[VARC] Use var-int encoding for AxisIndicesIndex
Slightly larger fonts, but more consistency, and freed a flag bit.
This commit is contained in:
parent
6a09096800
commit
297e0bd257
@ -49,10 +49,12 @@ log = logging.getLogger(__name__)
|
|||||||
|
|
||||||
|
|
||||||
class VarComponentFlags(IntFlag):
|
class VarComponentFlags(IntFlag):
|
||||||
AXIS_INDICES_INDEX_SIZE = 0x0003 # Keep it first; we rely on that.
|
USE_MY_METRICS = 0x0001
|
||||||
|
RESET_UNSPECIFIED_AXES = 0x0002
|
||||||
|
|
||||||
USE_MY_METRICS = 0x0004
|
GID_IS_24BIT = 0x0004
|
||||||
RESET_UNSPECIFIED_AXES = 0x0008
|
|
||||||
|
HAVE_AXES = 0x0008
|
||||||
|
|
||||||
AXIS_VALUES_HAVE_VARIATION = 0x0010
|
AXIS_VALUES_HAVE_VARIATION = 0x0010
|
||||||
TRANSFORM_HAS_VARIATION = 0x0020
|
TRANSFORM_HAS_VARIATION = 0x0020
|
||||||
@ -67,7 +69,7 @@ class VarComponentFlags(IntFlag):
|
|||||||
HAVE_TCENTER_X = 0x2000
|
HAVE_TCENTER_X = 0x2000
|
||||||
HAVE_TCENTER_Y = 0x4000
|
HAVE_TCENTER_Y = 0x4000
|
||||||
|
|
||||||
GID_IS_24BIT = 0x8000
|
RESERVED = 0x8000
|
||||||
|
|
||||||
|
|
||||||
VarTransformMappingValues = namedtuple(
|
VarTransformMappingValues = namedtuple(
|
||||||
@ -106,7 +108,7 @@ _unpacker = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def _read_var_length_number(data, i):
|
def _readVarInt32(data, i):
|
||||||
"""Read a variable-length number from data starting at index i.
|
"""Read a variable-length number from data starting at index i.
|
||||||
|
|
||||||
Return the number and the next index.
|
Return the number and the next index.
|
||||||
@ -129,7 +131,7 @@ def _read_var_length_number(data, i):
|
|||||||
] << 8 | data[i + 4], i + 5
|
] << 8 | data[i + 4], i + 5
|
||||||
|
|
||||||
|
|
||||||
def _write_var_length_number(v):
|
def _writeVarInt32(v):
|
||||||
"""Write a variable-length number.
|
"""Write a variable-length number.
|
||||||
|
|
||||||
Return the data.
|
Return the data.
|
||||||
@ -166,14 +168,10 @@ class VarComponent:
|
|||||||
i += gidSize
|
i += gidSize
|
||||||
self.glyphName = font.glyphOrder[glyphID]
|
self.glyphName = font.glyphOrder[glyphID]
|
||||||
|
|
||||||
axisIndicesIndexSize = flags & VarComponentFlags.AXIS_INDICES_INDEX_SIZE
|
if flags & VarComponentFlags.HAVE_AXES:
|
||||||
axisIndicesIndexSize = {0: 0, 1: 1, 2: 2, 3: 4}[axisIndicesIndexSize]
|
self.axisIndicesIndex, i = _readVarInt32(data, i)
|
||||||
self.axisIndicesIndex = (
|
else:
|
||||||
None
|
self.axisIndicesIndex = None
|
||||||
if axisIndicesIndexSize == 0
|
|
||||||
else _unpacker[axisIndicesIndexSize](data[i : i + axisIndicesIndexSize])
|
|
||||||
)
|
|
||||||
i += axisIndicesIndexSize
|
|
||||||
|
|
||||||
if self.axisIndicesIndex is None:
|
if self.axisIndicesIndex is None:
|
||||||
numAxes = 0
|
numAxes = 0
|
||||||
@ -186,11 +184,11 @@ class VarComponent:
|
|||||||
self.axisValues = tuple(axisValues)
|
self.axisValues = tuple(axisValues)
|
||||||
|
|
||||||
if flags & VarComponentFlags.AXIS_VALUES_HAVE_VARIATION:
|
if flags & VarComponentFlags.AXIS_VALUES_HAVE_VARIATION:
|
||||||
self.axisValuesVarIndex, i = _read_var_length_number(data, i)
|
self.axisValuesVarIndex, i = _readVarInt32(data, i)
|
||||||
else:
|
else:
|
||||||
self.axisValuesVarIndex = NO_VARIATION_INDEX
|
self.axisValuesVarIndex = NO_VARIATION_INDEX
|
||||||
if flags & VarComponentFlags.TRANSFORM_HAS_VARIATION:
|
if flags & VarComponentFlags.TRANSFORM_HAS_VARIATION:
|
||||||
self.transformVarIndex, i = _read_var_length_number(data, i)
|
self.transformVarIndex, i = _readVarInt32(data, i)
|
||||||
else:
|
else:
|
||||||
self.transformVarIndex = NO_VARIATION_INDEX
|
self.transformVarIndex = NO_VARIATION_INDEX
|
||||||
|
|
||||||
@ -234,35 +232,21 @@ class VarComponent:
|
|||||||
|
|
||||||
numAxes = len(self.axisValues)
|
numAxes = len(self.axisValues)
|
||||||
|
|
||||||
axisIndicesIndexSize = (
|
if numAxes:
|
||||||
0
|
flags |= VarComponentFlags.HAVE_AXES
|
||||||
if self.axisIndicesIndex == None
|
data.append(_writeVarInt32(self.axisIndicesIndex))
|
||||||
else 1
|
|
||||||
if self.axisIndicesIndex < 256
|
|
||||||
else 2
|
|
||||||
if self.axisIndicesIndex < 65536
|
|
||||||
else 3
|
|
||||||
)
|
|
||||||
assert (
|
|
||||||
axisIndicesIndexSize & VarComponentFlags.AXIS_INDICES_INDEX_SIZE
|
|
||||||
== axisIndicesIndexSize
|
|
||||||
)
|
|
||||||
flags &= ~VarComponentFlags.AXIS_INDICES_INDEX_SIZE
|
|
||||||
flags |= axisIndicesIndexSize
|
|
||||||
axisIndicesIndexSize = {0: 0, 1: 1, 2: 2, 3: 4}[axisIndicesIndexSize]
|
|
||||||
if axisIndicesIndexSize:
|
|
||||||
data.append(_packer[axisIndicesIndexSize](self.axisIndicesIndex))
|
|
||||||
|
|
||||||
data.append(TupleVariation.compileDeltaValues_(self.axisValues))
|
data.append(TupleVariation.compileDeltaValues_(self.axisValues))
|
||||||
|
else:
|
||||||
|
flags &= ~VarComponentFlags.HAVE_AXES
|
||||||
|
|
||||||
if self.axisValuesVarIndex != NO_VARIATION_INDEX:
|
if self.axisValuesVarIndex != NO_VARIATION_INDEX:
|
||||||
flags |= VarComponentFlags.AXIS_VALUES_HAVE_VARIATION
|
flags |= VarComponentFlags.AXIS_VALUES_HAVE_VARIATION
|
||||||
data.append(_write_var_length_number(self.axisValuesVarIndex))
|
data.append(_writeVarInt32(self.axisValuesVarIndex))
|
||||||
else:
|
else:
|
||||||
flags &= ~VarComponentFlags.AXIS_VALUES_HAVE_VARIATION
|
flags &= ~VarComponentFlags.AXIS_VALUES_HAVE_VARIATION
|
||||||
if self.transformVarIndex != NO_VARIATION_INDEX:
|
if self.transformVarIndex != NO_VARIATION_INDEX:
|
||||||
flags |= VarComponentFlags.TRANSFORM_HAS_VARIATION
|
flags |= VarComponentFlags.TRANSFORM_HAS_VARIATION
|
||||||
data.append(_write_var_length_number(self.transformVarIndex))
|
data.append(_writeVarInt32(self.transformVarIndex))
|
||||||
else:
|
else:
|
||||||
flags &= ~VarComponentFlags.TRANSFORM_HAS_VARIATION
|
flags &= ~VarComponentFlags.TRANSFORM_HAS_VARIATION
|
||||||
|
|
||||||
|
Binary file not shown.
@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="4.46">
|
<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="4.47">
|
||||||
|
|
||||||
<GlyphOrder>
|
<GlyphOrder>
|
||||||
<!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
|
<!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
|
||||||
@ -313,19 +313,19 @@
|
|||||||
<VarComponent index="2" glyphName="glyph00006" flags="0"/>
|
<VarComponent index="2" glyphName="glyph00006" flags="0"/>
|
||||||
</VarCompositeGlyph>
|
</VarCompositeGlyph>
|
||||||
<VarCompositeGlyph index="2">
|
<VarCompositeGlyph index="2">
|
||||||
<VarComponent index="0" glyphName="glyph00008" flags="65" axisIndicesIndex="2" axisValues="(3537,)" translateX="-6.0"/>
|
<VarComponent index="0" glyphName="glyph00008" flags="72" axisIndicesIndex="2" axisValues="(3537,)" translateX="-6.0"/>
|
||||||
</VarCompositeGlyph>
|
</VarCompositeGlyph>
|
||||||
<VarCompositeGlyph index="3">
|
<VarCompositeGlyph index="3">
|
||||||
<VarComponent index="0" glyphName="glyph00008" flags="81" axisIndicesIndex="0" axisValues="(-13184, 0, 7928)" axisValuesVarIndex="0" translateX="-3.0"/>
|
<VarComponent index="0" glyphName="glyph00008" flags="88" axisIndicesIndex="0" axisValues="(-13184, 0, 7928)" axisValuesVarIndex="0" translateX="-3.0"/>
|
||||||
</VarCompositeGlyph>
|
</VarCompositeGlyph>
|
||||||
<VarCompositeGlyph index="4">
|
<VarCompositeGlyph index="4">
|
||||||
<VarComponent index="0" glyphName="glyph00009" flags="241" axisIndicesIndex="1" axisValues="(-8847, 655, -8484, 0, 0)" axisValuesVarIndex="1" transformVarIndex="2" translateX="-5.0" translateY="24.0"/>
|
<VarComponent index="0" glyphName="glyph00009" flags="248" axisIndicesIndex="1" axisValues="(-8847, 655, -8484, 0, 0)" axisValuesVarIndex="1" transformVarIndex="2" translateX="-5.0" translateY="24.0"/>
|
||||||
</VarCompositeGlyph>
|
</VarCompositeGlyph>
|
||||||
<VarCompositeGlyph index="5">
|
<VarCompositeGlyph index="5">
|
||||||
<VarComponent index="0" glyphName="glyph00010" flags="241" axisIndicesIndex="0" axisValues="(-12714, -5843, 0)" axisValuesVarIndex="3" transformVarIndex="4" translateX="53.0" translateY="-231.0"/>
|
<VarComponent index="0" glyphName="glyph00010" flags="248" axisIndicesIndex="0" axisValues="(-12714, -5843, 0)" axisValuesVarIndex="3" transformVarIndex="4" translateX="53.0" translateY="-231.0"/>
|
||||||
</VarCompositeGlyph>
|
</VarCompositeGlyph>
|
||||||
<VarCompositeGlyph index="6">
|
<VarCompositeGlyph index="6">
|
||||||
<VarComponent index="0" glyphName="glyph00009" flags="241" axisIndicesIndex="0" axisValues="(-4227, 819, -8484)" axisValuesVarIndex="5" transformVarIndex="6" translateX="-5.0" translateY="12.0"/>
|
<VarComponent index="0" glyphName="glyph00009" flags="248" axisIndicesIndex="0" axisValues="(-4227, 819, -8484)" axisValuesVarIndex="5" transformVarIndex="6" translateX="-5.0" translateY="12.0"/>
|
||||||
</VarCompositeGlyph>
|
</VarCompositeGlyph>
|
||||||
</VarCompositeGlyphs>
|
</VarCompositeGlyphs>
|
||||||
</VARC>
|
</VARC>
|
||||||
|
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user