[varc] Add ConditionSets

This commit is contained in:
Behdad Esfahbod 2024-03-20 15:36:32 -06:00
parent c155632e8f
commit 74f870f4ef
9 changed files with 287 additions and 291 deletions

View File

@ -2693,6 +2693,22 @@ def prune_post_subset(self, font, options):
if comp.axisIndicesIndex is not None: if comp.axisIndicesIndex is not None:
comp.axisIndicesIndex = mapping[comp.axisIndicesIndex] comp.axisIndicesIndex = mapping[comp.axisIndicesIndex]
conditionSetList = table.ConditionSetList
if conditionSetList is not None:
conditionSets = conditionSetList.ConditionSet
usedIndices = set()
for glyph in table.VarCompositeGlyphs.VarCompositeGlyph:
for comp in glyph.components:
if comp.conditionSetIndex is not None:
usedIndices.add(comp.conditionSetIndex)
usedIndices = sorted(usedIndices)
conditionSetList.ConditionSet = _list_subset(conditionSets, usedIndices)
mapping = {old: new for new, old in enumerate(usedIndices)}
for glyph in table.VarCompositeGlyphs.VarCompositeGlyph:
for comp in glyph.components:
if comp.conditionSetIndex is not None:
comp.conditionSetIndex = mapping[comp.conditionSetIndex]
return True return True

View File

@ -3168,6 +3168,25 @@ otData = [
), ),
], ],
), ),
(
"ConditionSetList",
[
(
"uint32",
"ConditionSetCount",
None,
None,
"Number of condition-set tables in the ConditionSet array",
),
(
"LOffset",
"ConditionSet",
"ConditionSetCount",
0,
"Array of condition-set tables.",
),
],
),
( (
"ConditionSet", "ConditionSet",
[ [
@ -3377,6 +3396,7 @@ otData = [
), ),
("LOffset", "Coverage", None, None, ""), ("LOffset", "Coverage", None, None, ""),
("LOffset", "MultiVarStore", None, None, "(may be NULL)"), ("LOffset", "MultiVarStore", None, None, "(may be NULL)"),
("LOffset", "ConditionSetList", None, None, "(may be NULL)"),
("LOffset", "AxisIndicesList", None, None, "(may be NULL)"), ("LOffset", "AxisIndicesList", None, None, "(may be NULL)"),
("LOffset", "VarCompositeGlyphs", None, None, ""), ("LOffset", "VarCompositeGlyphs", None, None, ""),
], ],

View File

@ -60,7 +60,7 @@ class VarComponentFlags(IntFlag):
HAVE_TRANSLATE_Y = 1 << 5 HAVE_TRANSLATE_Y = 1 << 5
HAVE_ROTATION = 1 << 6 HAVE_ROTATION = 1 << 6
USE_MY_METRICS = 1 << 7 HAVE_CONDITION = 1 << 7
HAVE_SCALE_X = 1 << 8 HAVE_SCALE_X = 1 << 8
HAVE_SCALE_Y = 1 << 9 HAVE_SCALE_Y = 1 << 9
@ -158,6 +158,7 @@ class VarComponent:
def populateDefaults(self, propagator=None): def populateDefaults(self, propagator=None):
self.flags = 0 self.flags = 0
self.glyphName = None self.glyphName = None
self.conditionSetIndex = None
self.axisIndicesIndex = None self.axisIndicesIndex = None
self.axisValues = () self.axisValues = ()
self.axisValuesVarIndex = NO_VARIATION_INDEX self.axisValuesVarIndex = NO_VARIATION_INDEX
@ -174,6 +175,9 @@ class VarComponent:
i += gidSize i += gidSize
self.glyphName = font.glyphOrder[glyphID] self.glyphName = font.glyphOrder[glyphID]
if flags & VarComponentFlags.HAVE_CONDITION:
self.conditionSetIndex, i = _read_uint32var(data, i)
if flags & VarComponentFlags.HAVE_AXES: if flags & VarComponentFlags.HAVE_AXES:
self.axisIndicesIndex, i = _read_uint32var(data, i) self.axisIndicesIndex, i = _read_uint32var(data, i)
else: else:
@ -244,6 +248,10 @@ class VarComponent:
flags &= ~VarComponentFlags.GID_IS_24BIT flags &= ~VarComponentFlags.GID_IS_24BIT
data.append(_packer[2](glyphID)) data.append(_packer[2](glyphID))
if self.conditionSetIndex is not None:
flags |= VarComponentFlags.HAVE_CONDITION
data.append(_write_uint32var(self.conditionSetIndex))
numAxes = len(self.axisValues) numAxes = len(self.axisValues)
if numAxes: if numAxes:
@ -293,6 +301,8 @@ class VarComponent:
write("glyphName", self.glyphName) write("glyphName", self.glyphName)
if self.conditionSetIndex is not None:
write("conditionSetIndex", self.conditionSetIndex)
if self.axisIndicesIndex is not None: if self.axisIndicesIndex is not None:
write("axisIndicesIndex", self.axisIndicesIndex) write("axisIndicesIndex", self.axisIndicesIndex)
if ( if (
@ -332,6 +342,8 @@ class VarComponent:
if name == "glyphName": if name == "glyphName":
self.glyphName = v self.glyphName = v
elif name == "conditionSetIndex":
self.conditionSetIndex = safeEval(v)
elif name == "axisIndicesIndex": elif name == "axisIndicesIndex":
self.axisIndicesIndex = safeEval(v) self.axisIndicesIndex = safeEval(v)
elif name == "axisValues": elif name == "axisValues":

View File

@ -299,6 +299,28 @@ class _TTGlyphVARC(_TTGlyph):
) )
for comp in glyph.components: for comp in glyph.components:
if comp.flags & VarComponentFlags.HAVE_CONDITION:
conditionSet = varc.ConditionSetList.ConditionSet[
comp.conditionSetIndex
]
# Evaluate condition
show = True
for condition in conditionSet.ConditionTable:
if condition.Format == 1:
axisIndex = condition.AxisIndex
axisTag = fvarAxes[axisIndex].axisTag
axisValue = self.glyphSet.location[axisTag]
minValue = condition.FilterRangeMinValue
maxValue = condition.FilterRangeMaxValue
if not (minValue <= axisValue <= maxValue):
show = False
break
else:
show = False # Unkonwn condition format
if not show:
continue
location = {} location = {}
if comp.axisIndicesIndex is not None: if comp.axisIndicesIndex is not None:
axisIndices = varc.AxisIndicesList.Item[comp.axisIndicesIndex] axisIndices = varc.AxisIndicesList.Item[comp.axisIndicesIndex]

Binary file not shown.

View File

@ -58,12 +58,12 @@
<hmtx> <hmtx>
<mtx name=".notdef" width="500" lsb="0"/> <mtx name=".notdef" width="500" lsb="0"/>
<mtx name="glyph00003" width="460" lsb="0"/> <mtx name="glyph00003" width="460" lsb="0"/>
<mtx name="glyph00004" width="460" lsb="0"/> <mtx name="glyph00004" width="460" lsb="-3"/>
<mtx name="glyph00005" width="460" lsb="0"/> <mtx name="glyph00005" width="460" lsb="0"/>
<mtx name="glyph00006" width="460" lsb="0"/> <mtx name="glyph00006" width="460" lsb="340"/>
<mtx name="glyph00007" width="460" lsb="0"/> <mtx name="glyph00007" width="460" lsb="0"/>
<mtx name="glyph00008" width="460" lsb="340"/> <mtx name="glyph00008" width="460" lsb="0"/>
<mtx name="glyph00009" width="460" lsb="-3"/> <mtx name="glyph00009" width="460" lsb="0"/>
<mtx name="glyph00010" width="460" lsb="45"/> <mtx name="glyph00010" width="460" lsb="45"/>
<mtx name="uniAC00" width="460" lsb="0"/> <mtx name="uniAC00" width="460" lsb="0"/>
<mtx name="uniAC01" width="460" lsb="0"/> <mtx name="uniAC01" width="460" lsb="0"/>
@ -94,31 +94,7 @@
<TTGlyph name="glyph00003"/><!-- contains no outline data --> <TTGlyph name="glyph00003"/><!-- contains no outline data -->
<TTGlyph name="glyph00004"/><!-- contains no outline data --> <TTGlyph name="glyph00004" xMin="-3" yMin="-17" xMax="420" yMax="349">
<TTGlyph name="glyph00005"/><!-- contains no outline data -->
<TTGlyph name="glyph00006"/><!-- contains no outline data -->
<TTGlyph name="glyph00007"/><!-- contains no outline data -->
<TTGlyph name="glyph00008" xMin="340" yMin="-41" xMax="450" yMax="402">
<contour>
<pt x="358" y="157" on="1"/>
<pt x="450" y="157" on="1"/>
<pt x="450" y="192" on="1"/>
<pt x="358" y="192" on="1"/>
</contour>
<contour>
<pt x="340" y="-41" on="1"/>
<pt x="378" y="-41" on="1"/>
<pt x="378" y="402" on="1"/>
<pt x="340" y="402" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="glyph00009" xMin="-3" yMin="-17" xMax="420" yMax="349">
<contour> <contour>
<pt x="3" y="-17" on="1"/> <pt x="3" y="-17" on="1"/>
<pt x="100" y="-6" on="0"/> <pt x="100" y="-6" on="0"/>
@ -140,6 +116,30 @@
<instructions/> <instructions/>
</TTGlyph> </TTGlyph>
<TTGlyph name="glyph00005"/><!-- contains no outline data -->
<TTGlyph name="glyph00006" xMin="340" yMin="-41" xMax="450" yMax="402">
<contour>
<pt x="358" y="157" on="1"/>
<pt x="450" y="157" on="1"/>
<pt x="450" y="192" on="1"/>
<pt x="358" y="192" on="1"/>
</contour>
<contour>
<pt x="340" y="-41" on="1"/>
<pt x="378" y="-41" on="1"/>
<pt x="378" y="402" on="1"/>
<pt x="340" y="402" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="glyph00007"/><!-- contains no outline data -->
<TTGlyph name="glyph00008"/><!-- contains no outline data -->
<TTGlyph name="glyph00009"/><!-- contains no outline data -->
<TTGlyph name="glyph00010" xMin="45" yMin="-17" xMax="420" yMax="349"> <TTGlyph name="glyph00010" xMin="45" yMin="-17" xMax="420" yMax="349">
<contour> <contour>
<pt x="420" y="-17" on="1"/> <pt x="420" y="-17" on="1"/>
@ -161,6 +161,36 @@
</glyf> </glyf>
<name> <name>
<namerecord nameID="1" platformID="1" platEncID="0" langID="0x0" unicode="True">
rcjk
</namerecord>
<namerecord nameID="2" platformID="1" platEncID="0" langID="0x0" unicode="True">
varc
</namerecord>
<namerecord nameID="256" platformID="1" platEncID="0" langID="0x0" unicode="True">
Weight
</namerecord>
<namerecord nameID="257" platformID="1" platEncID="0" langID="0x0" unicode="True">
OpticalSize
</namerecord>
<namerecord nameID="258" platformID="1" platEncID="0" langID="0x0" unicode="True">
0000
</namerecord>
<namerecord nameID="259" platformID="1" platEncID="0" langID="0x0" unicode="True">
0001
</namerecord>
<namerecord nameID="260" platformID="1" platEncID="0" langID="0x0" unicode="True">
0002
</namerecord>
<namerecord nameID="261" platformID="1" platEncID="0" langID="0x0" unicode="True">
0003
</namerecord>
<namerecord nameID="262" platformID="1" platEncID="0" langID="0x0" unicode="True">
0004
</namerecord>
<namerecord nameID="263" platformID="1" platEncID="0" langID="0x0" unicode="True">
0005
</namerecord>
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409"> <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
rcjk rcjk
</namerecord> </namerecord>
@ -191,30 +221,6 @@
<namerecord nameID="263" platformID="3" platEncID="1" langID="0x409"> <namerecord nameID="263" platformID="3" platEncID="1" langID="0x409">
0005 0005
</namerecord> </namerecord>
<namerecord nameID="264" platformID="3" platEncID="1" langID="0x409">
0006
</namerecord>
<namerecord nameID="265" platformID="3" platEncID="1" langID="0x409">
0007
</namerecord>
<namerecord nameID="266" platformID="3" platEncID="1" langID="0x409">
0008
</namerecord>
<namerecord nameID="267" platformID="3" platEncID="1" langID="0x409">
0009
</namerecord>
<namerecord nameID="268" platformID="3" platEncID="1" langID="0x409">
0010
</namerecord>
<namerecord nameID="269" platformID="3" platEncID="1" langID="0x409">
0011
</namerecord>
<namerecord nameID="270" platformID="3" platEncID="1" langID="0x409">
0012
</namerecord>
<namerecord nameID="271" platformID="3" platEncID="1" langID="0x409">
0013
</namerecord>
</name> </name>
<post> <post>
@ -235,10 +241,10 @@
<Glyph value="uniAC00"/> <Glyph value="uniAC00"/>
<Glyph value="uniAC01"/> <Glyph value="uniAC01"/>
<Glyph value="glyph00003"/> <Glyph value="glyph00003"/>
<Glyph value="glyph00004"/>
<Glyph value="glyph00005"/> <Glyph value="glyph00005"/>
<Glyph value="glyph00006"/>
<Glyph value="glyph00007"/> <Glyph value="glyph00007"/>
<Glyph value="glyph00008"/>
<Glyph value="glyph00009"/>
</Coverage> </Coverage>
<MultiVarStore Format="1"> <MultiVarStore Format="1">
<Format value="1"/> <Format value="1"/>
@ -285,88 +291,88 @@
<VarRegionIndex index="0" value="0"/> <VarRegionIndex index="0" value="0"/>
<VarRegionIndex index="1" value="1"/> <VarRegionIndex index="1" value="1"/>
<VarRegionIndex index="2" value="2"/> <VarRegionIndex index="2" value="2"/>
<Item index="0" value="[-964, 0, 406, 0, 16384, 0, 0, 0, 0]"/> <Item index="0" value="[0, -327, 0, 1704, 0, 0, 0, 0, 0]"/>
<Item index="1" value="[-295, -327, 0, 1092, 273, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0]"/> <Item index="1" value="[0, 0, 0, 8, 0, 0]"/>
<Item index="2" value="[0, 0, 0, 6, 0, 0]"/> <Item index="2" value="[-295, -327, 0, 1092, 273, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0]"/>
<Item index="3" value="[-328, 0, 2185, 0, 1546, 0, 0, 0, 0]"/> <Item index="3" value="[0, 0, 0, 6, 0, 0]"/>
<Item index="4" value="[0, -5, -26, 0, 0, 0]"/> <Item index="4" value="[-964, 0, 406, 0, 16384, 0, 0, 0, 0]"/>
<Item index="5" value="[0, -327, 0, 1704, 0, 0, 0, 0, 0]"/> <Item index="5" value="[-328, 0, 2185, 0, 1546, 0, 0, 0, 0]"/>
<Item index="6" value="[0, 0, 0, 8, 0, 0]"/> <Item index="6" value="[0, -5, -26, 0, 0, 0]"/>
</MultiVarData> </MultiVarData>
</MultiVarStore> </MultiVarStore>
<AxisIndicesList> <AxisIndicesList>
<Item index="0" value="[2, 3, 4]"/> <Item index="0" value="[2, 3, 4]"/>
<Item index="1" value="[2, 3, 4, 5, 6]"/> <Item index="1" value="[4]"/>
<Item index="2" value="[4]"/> <Item index="2" value="[2, 3, 4, 5, 6]"/>
</AxisIndicesList> </AxisIndicesList>
<VarCompositeGlyphs> <VarCompositeGlyphs>
<VarCompositeGlyph index="0"> <VarCompositeGlyph index="0">
<VarComponent index="0"> <VarComponent index="0">
<glyphName value="glyph00007"/> <glyphName value="glyph00003"/>
</VarComponent> </VarComponent>
<VarComponent index="1"> <VarComponent index="1">
<glyphName value="glyph00003"/> <glyphName value="glyph00005"/>
</VarComponent> </VarComponent>
</VarCompositeGlyph> </VarCompositeGlyph>
<VarCompositeGlyph index="1"> <VarCompositeGlyph index="1">
<VarComponent index="0"> <VarComponent index="0">
<glyphName value="glyph00005"/> <glyphName value="glyph00007"/>
</VarComponent> </VarComponent>
<VarComponent index="1"> <VarComponent index="1">
<glyphName value="glyph00004"/> <glyphName value="glyph00008"/>
</VarComponent> </VarComponent>
<VarComponent index="2"> <VarComponent index="2">
<glyphName value="glyph00006"/> <glyphName value="glyph00009"/>
</VarComponent> </VarComponent>
</VarCompositeGlyph> </VarCompositeGlyph>
<VarCompositeGlyph index="2"> <VarCompositeGlyph index="2">
<VarComponent index="0"> <VarComponent index="0">
<glyphName value="glyph00008"/> <glyphName value="glyph00004"/>
<axisIndicesIndex value="2"/> <axisIndicesIndex value="0"/>
<axisValues value="[0.2159]"/> <axisValues value="[-0.258, 0.05, -0.5178]"/>
<translateX value="-6.0"/> <axisValuesVarIndex value="0"/>
<transformVarIndex value="1"/>
<translateX value="-5.0"/>
<translateY value="12.0"/>
</VarComponent> </VarComponent>
</VarCompositeGlyph> </VarCompositeGlyph>
<VarCompositeGlyph index="3"> <VarCompositeGlyph index="3">
<VarComponent index="0"> <VarComponent index="0">
<glyphName value="glyph00008"/> <glyphName value="glyph00006"/>
<axisIndicesIndex value="0"/> <axisIndicesIndex value="1"/>
<axisValues value="[-0.8047, 0.0, 0.4839]"/> <axisValues value="[0.2159]"/>
<axisValuesVarIndex value="0"/> <translateX value="-6.0"/>
<translateX value="-3.0"/>
</VarComponent> </VarComponent>
</VarCompositeGlyph> </VarCompositeGlyph>
<VarCompositeGlyph index="4"> <VarCompositeGlyph index="4">
<VarComponent index="0"> <VarComponent index="0">
<glyphName value="glyph00009"/> <glyphName value="glyph00004"/>
<axisIndicesIndex value="1"/> <axisIndicesIndex value="2"/>
<axisValues value="[-0.54, 0.04, -0.5178, 0.0, 0.0]"/> <axisValues value="[-0.54, 0.04, -0.5178, 0.0, 0.0]"/>
<axisValuesVarIndex value="1"/> <axisValuesVarIndex value="2"/>
<transformVarIndex value="2"/> <transformVarIndex value="3"/>
<translateX value="-5.0"/> <translateX value="-5.0"/>
<translateY value="24.0"/> <translateY value="24.0"/>
</VarComponent> </VarComponent>
</VarCompositeGlyph> </VarCompositeGlyph>
<VarCompositeGlyph index="5"> <VarCompositeGlyph index="5">
<VarComponent index="0"> <VarComponent index="0">
<glyphName value="glyph00010"/> <glyphName value="glyph00006"/>
<axisIndicesIndex value="0"/> <axisIndicesIndex value="0"/>
<axisValues value="[-0.776, -0.3566, 0.0]"/> <axisValues value="[-0.8047, 0.0, 0.4839]"/>
<axisValuesVarIndex value="3"/> <axisValuesVarIndex value="4"/>
<transformVarIndex value="4"/> <translateX value="-3.0"/>
<translateX value="53.0"/>
<translateY value="-231.0"/>
</VarComponent> </VarComponent>
</VarCompositeGlyph> </VarCompositeGlyph>
<VarCompositeGlyph index="6"> <VarCompositeGlyph index="6">
<VarComponent index="0"> <VarComponent index="0">
<glyphName value="glyph00009"/> <glyphName value="glyph00010"/>
<axisIndicesIndex value="0"/> <axisIndicesIndex value="0"/>
<axisValues value="[-0.258, 0.05, -0.5178]"/> <axisValues value="[-0.776, -0.3566, 0.0]"/>
<axisValuesVarIndex value="5"/> <axisValuesVarIndex value="5"/>
<transformVarIndex value="6"/> <transformVarIndex value="6"/>
<translateX value="-5.0"/> <translateX value="53.0"/>
<translateY value="12.0"/> <translateY value="-231.0"/>
</VarComponent> </VarComponent>
</VarCompositeGlyph> </VarCompositeGlyph>
</VarCompositeGlyphs> </VarCompositeGlyphs>
@ -453,201 +459,12 @@
<MaxValue>1.0</MaxValue> <MaxValue>1.0</MaxValue>
<AxisNameID>263</AxisNameID> <AxisNameID>263</AxisNameID>
</Axis> </Axis>
<!-- 0006 -->
<Axis>
<AxisTag>0006</AxisTag>
<Flags>0x0</Flags>
<MinValue>-1.0</MinValue>
<DefaultValue>0.0</DefaultValue>
<MaxValue>1.0</MaxValue>
<AxisNameID>264</AxisNameID>
</Axis>
<!-- 0007 -->
<Axis>
<AxisTag>0007</AxisTag>
<Flags>0x0</Flags>
<MinValue>-1.0</MinValue>
<DefaultValue>0.0</DefaultValue>
<MaxValue>1.0</MaxValue>
<AxisNameID>265</AxisNameID>
</Axis>
<!-- 0008 -->
<Axis>
<AxisTag>0008</AxisTag>
<Flags>0x0</Flags>
<MinValue>-1.0</MinValue>
<DefaultValue>0.0</DefaultValue>
<MaxValue>1.0</MaxValue>
<AxisNameID>266</AxisNameID>
</Axis>
<!-- 0009 -->
<Axis>
<AxisTag>0009</AxisTag>
<Flags>0x0</Flags>
<MinValue>-1.0</MinValue>
<DefaultValue>0.0</DefaultValue>
<MaxValue>1.0</MaxValue>
<AxisNameID>267</AxisNameID>
</Axis>
<!-- 0010 -->
<Axis>
<AxisTag>0010</AxisTag>
<Flags>0x0</Flags>
<MinValue>-1.0</MinValue>
<DefaultValue>0.0</DefaultValue>
<MaxValue>1.0</MaxValue>
<AxisNameID>268</AxisNameID>
</Axis>
<!-- 0011 -->
<Axis>
<AxisTag>0011</AxisTag>
<Flags>0x0</Flags>
<MinValue>-1.0</MinValue>
<DefaultValue>0.0</DefaultValue>
<MaxValue>1.0</MaxValue>
<AxisNameID>269</AxisNameID>
</Axis>
<!-- 0012 -->
<Axis>
<AxisTag>0012</AxisTag>
<Flags>0x0</Flags>
<MinValue>-1.0</MinValue>
<DefaultValue>0.0</DefaultValue>
<MaxValue>1.0</MaxValue>
<AxisNameID>270</AxisNameID>
</Axis>
<!-- 0013 -->
<Axis>
<AxisTag>0013</AxisTag>
<Flags>0x0</Flags>
<MinValue>-1.0</MinValue>
<DefaultValue>0.0</DefaultValue>
<MaxValue>1.0</MaxValue>
<AxisNameID>271</AxisNameID>
</Axis>
</fvar> </fvar>
<gvar> <gvar>
<version value="1"/> <version value="1"/>
<reserved value="0"/> <reserved value="0"/>
<glyphVariations glyph="glyph00008"> <glyphVariations glyph="glyph00004">
<tuple>
<coord axis="wght" value="1.0"/>
<delta pt="0" x="0" y="-15"/>
<delta pt="1" x="10" y="-15"/>
<delta pt="2" x="10" y="15"/>
<delta pt="3" x="0" y="15"/>
<delta pt="4" x="-25" y="-10"/>
<delta pt="5" x="10" y="-10"/>
<delta pt="6" x="10" y="10"/>
<delta pt="7" x="-25" y="10"/>
<delta pt="8" x="0" y="0"/>
<delta pt="9" x="0" y="0"/>
<delta pt="10" x="0" y="0"/>
<delta pt="11" x="0" y="0"/>
</tuple>
<tuple>
<coord axis="0000" value="-1.0"/>
<delta pt="0" x="0" y="0"/>
<delta pt="1" x="0" y="0"/>
<delta pt="2" x="0" y="0"/>
<delta pt="3" x="0" y="0"/>
<delta pt="4" x="0" y="229"/>
<delta pt="5" x="0" y="229"/>
<delta pt="6" x="0" y="0"/>
<delta pt="7" x="0" y="0"/>
<delta pt="8" x="0" y="0"/>
<delta pt="9" x="0" y="0"/>
<delta pt="10" x="0" y="0"/>
<delta pt="11" x="0" y="0"/>
</tuple>
<tuple>
<coord axis="0002" value="1.0"/>
<delta pt="0" x="0" y="202"/>
<delta pt="1" x="0" y="202"/>
<delta pt="2" x="0" y="202"/>
<delta pt="3" x="0" y="202"/>
<delta pt="4" x="0" y="0"/>
<delta pt="5" x="0" y="0"/>
<delta pt="6" x="0" y="0"/>
<delta pt="7" x="0" y="0"/>
<delta pt="8" x="0" y="0"/>
<delta pt="9" x="0" y="0"/>
<delta pt="10" x="0" y="0"/>
<delta pt="11" x="0" y="0"/>
</tuple>
<tuple>
<coord axis="0001" value="1.0"/>
<delta pt="0" x="0" y="0"/>
<delta pt="1" x="0" y="0"/>
<delta pt="2" x="0" y="0"/>
<delta pt="3" x="0" y="0"/>
<delta pt="4" x="0" y="6"/>
<delta pt="5" x="0" y="6"/>
<delta pt="6" x="0" y="0"/>
<delta pt="7" x="0" y="0"/>
<delta pt="8" x="0" y="0"/>
<delta pt="9" x="0" y="0"/>
<delta pt="10" x="0" y="0"/>
<delta pt="11" x="0" y="0"/>
</tuple>
<tuple>
<coord axis="0003" value="-1.0"/>
<delta pt="0" x="0" y="0"/>
<delta pt="1" x="-50" y="0"/>
<delta pt="2" x="-50" y="0"/>
<delta pt="3" x="0" y="0"/>
<delta pt="4" x="0" y="0"/>
<delta pt="5" x="0" y="0"/>
<delta pt="6" x="0" y="0"/>
<delta pt="7" x="0" y="0"/>
<delta pt="8" x="0" y="0"/>
<delta pt="9" x="0" y="0"/>
<delta pt="10" x="0" y="0"/>
<delta pt="11" x="0" y="0"/>
</tuple>
<tuple>
<coord axis="wght" value="1.0"/>
<coord axis="0000" value="-1.0"/>
<delta pt="0" x="0" y="0"/>
<delta pt="1" x="0" y="0"/>
<delta pt="2" x="0" y="0"/>
<delta pt="3" x="0" y="0"/>
<delta pt="4" x="0" y="0"/>
<delta pt="5" x="0" y="0"/>
<delta pt="6" x="0" y="0"/>
<delta pt="7" x="0" y="0"/>
<delta pt="8" x="0" y="0"/>
<delta pt="9" x="0" y="0"/>
<delta pt="10" x="0" y="0"/>
<delta pt="11" x="0" y="0"/>
</tuple>
<tuple>
<coord axis="wght" value="1.0"/>
<coord axis="0002" value="1.0"/>
<delta pt="0" x="0" y="0"/>
<delta pt="1" x="0" y="0"/>
<delta pt="2" x="0" y="0"/>
<delta pt="3" x="0" y="0"/>
<delta pt="4" x="0" y="0"/>
<delta pt="5" x="0" y="0"/>
<delta pt="6" x="0" y="0"/>
<delta pt="7" x="0" y="0"/>
<delta pt="8" x="0" y="0"/>
<delta pt="9" x="0" y="0"/>
<delta pt="10" x="0" y="0"/>
<delta pt="11" x="0" y="0"/>
</tuple>
</glyphVariations>
<glyphVariations glyph="glyph00009">
<tuple> <tuple>
<coord axis="wght" value="1.0"/> <coord axis="wght" value="1.0"/>
<delta pt="0" x="5" y="-10"/> <delta pt="0" x="5" y="-10"/>
@ -1080,6 +897,115 @@
<delta pt="19" x="0" y="0"/> <delta pt="19" x="0" y="0"/>
</tuple> </tuple>
</glyphVariations> </glyphVariations>
<glyphVariations glyph="glyph00006">
<tuple>
<coord axis="wght" value="1.0"/>
<delta pt="0" x="0" y="-15"/>
<delta pt="1" x="10" y="-15"/>
<delta pt="2" x="10" y="15"/>
<delta pt="3" x="0" y="15"/>
<delta pt="4" x="-25" y="-10"/>
<delta pt="5" x="10" y="-10"/>
<delta pt="6" x="10" y="10"/>
<delta pt="7" x="-25" y="10"/>
<delta pt="8" x="0" y="0"/>
<delta pt="9" x="0" y="0"/>
<delta pt="10" x="0" y="0"/>
<delta pt="11" x="0" y="0"/>
</tuple>
<tuple>
<coord axis="0000" value="-1.0"/>
<delta pt="0" x="0" y="0"/>
<delta pt="1" x="0" y="0"/>
<delta pt="2" x="0" y="0"/>
<delta pt="3" x="0" y="0"/>
<delta pt="4" x="0" y="229"/>
<delta pt="5" x="0" y="229"/>
<delta pt="6" x="0" y="0"/>
<delta pt="7" x="0" y="0"/>
<delta pt="8" x="0" y="0"/>
<delta pt="9" x="0" y="0"/>
<delta pt="10" x="0" y="0"/>
<delta pt="11" x="0" y="0"/>
</tuple>
<tuple>
<coord axis="0002" value="1.0"/>
<delta pt="0" x="0" y="202"/>
<delta pt="1" x="0" y="202"/>
<delta pt="2" x="0" y="202"/>
<delta pt="3" x="0" y="202"/>
<delta pt="4" x="0" y="0"/>
<delta pt="5" x="0" y="0"/>
<delta pt="6" x="0" y="0"/>
<delta pt="7" x="0" y="0"/>
<delta pt="8" x="0" y="0"/>
<delta pt="9" x="0" y="0"/>
<delta pt="10" x="0" y="0"/>
<delta pt="11" x="0" y="0"/>
</tuple>
<tuple>
<coord axis="0001" value="1.0"/>
<delta pt="0" x="0" y="0"/>
<delta pt="1" x="0" y="0"/>
<delta pt="2" x="0" y="0"/>
<delta pt="3" x="0" y="0"/>
<delta pt="4" x="0" y="6"/>
<delta pt="5" x="0" y="6"/>
<delta pt="6" x="0" y="0"/>
<delta pt="7" x="0" y="0"/>
<delta pt="8" x="0" y="0"/>
<delta pt="9" x="0" y="0"/>
<delta pt="10" x="0" y="0"/>
<delta pt="11" x="0" y="0"/>
</tuple>
<tuple>
<coord axis="0003" value="-1.0"/>
<delta pt="0" x="0" y="0"/>
<delta pt="1" x="-50" y="0"/>
<delta pt="2" x="-50" y="0"/>
<delta pt="3" x="0" y="0"/>
<delta pt="4" x="0" y="0"/>
<delta pt="5" x="0" y="0"/>
<delta pt="6" x="0" y="0"/>
<delta pt="7" x="0" y="0"/>
<delta pt="8" x="0" y="0"/>
<delta pt="9" x="0" y="0"/>
<delta pt="10" x="0" y="0"/>
<delta pt="11" x="0" y="0"/>
</tuple>
<tuple>
<coord axis="wght" value="1.0"/>
<coord axis="0000" value="-1.0"/>
<delta pt="0" x="0" y="0"/>
<delta pt="1" x="0" y="0"/>
<delta pt="2" x="0" y="0"/>
<delta pt="3" x="0" y="0"/>
<delta pt="4" x="0" y="0"/>
<delta pt="5" x="0" y="0"/>
<delta pt="6" x="0" y="0"/>
<delta pt="7" x="0" y="0"/>
<delta pt="8" x="0" y="0"/>
<delta pt="9" x="0" y="0"/>
<delta pt="10" x="0" y="0"/>
<delta pt="11" x="0" y="0"/>
</tuple>
<tuple>
<coord axis="wght" value="1.0"/>
<coord axis="0002" value="1.0"/>
<delta pt="0" x="0" y="0"/>
<delta pt="1" x="0" y="0"/>
<delta pt="2" x="0" y="0"/>
<delta pt="3" x="0" y="0"/>
<delta pt="4" x="0" y="0"/>
<delta pt="5" x="0" y="0"/>
<delta pt="6" x="0" y="0"/>
<delta pt="7" x="0" y="0"/>
<delta pt="8" x="0" y="0"/>
<delta pt="9" x="0" y="0"/>
<delta pt="10" x="0" y="0"/>
<delta pt="11" x="0" y="0"/>
</tuple>
</glyphVariations>
<glyphVariations glyph="glyph00010"> <glyphVariations glyph="glyph00010">
<tuple> <tuple>
<coord axis="wght" value="1.0"/> <coord axis="wght" value="1.0"/>

Binary file not shown.

View File

@ -9,7 +9,7 @@ DATA_DIR = os.path.join(CURR_DIR, "data")
class VarCompositeTest(unittest.TestCase): class VarCompositeTest(unittest.TestCase):
def test_trim_varComposite_glyph(self): def test_basic(self):
font_path = os.path.join(DATA_DIR, "..", "..", "data", "varc-ac00-ac01.ttf") font_path = os.path.join(DATA_DIR, "..", "..", "data", "varc-ac00-ac01.ttf")
font = TTFont(font_path) font = TTFont(font_path)
varc = font["VARC"] varc = font["VARC"]
@ -18,10 +18,10 @@ class VarCompositeTest(unittest.TestCase):
"uniAC00", "uniAC00",
"uniAC01", "uniAC01",
"glyph00003", "glyph00003",
"glyph00004",
"glyph00005", "glyph00005",
"glyph00006",
"glyph00007", "glyph00007",
"glyph00008",
"glyph00009",
] ]
font_path = os.path.join(DATA_DIR, "..", "..", "data", "varc-6868.ttf") font_path = os.path.join(DATA_DIR, "..", "..", "data", "varc-6868.ttf")
@ -31,11 +31,11 @@ class VarCompositeTest(unittest.TestCase):
assert varc.table.Coverage.glyphs == [ assert varc.table.Coverage.glyphs == [
"uni6868", "uni6868",
"glyph00002", "glyph00002",
"glyph00003", "glyph00005",
"glyph00004", "glyph00007",
] ]
def test_varComposite_basic(self): def test_roundtrip(self):
font_path = os.path.join(DATA_DIR, "..", "..", "data", "varc-ac00-ac01.ttf") font_path = os.path.join(DATA_DIR, "..", "..", "data", "varc-ac00-ac01.ttf")
font = TTFont(font_path) font = TTFont(font_path)
tables = [ tables = [

View File

@ -226,7 +226,7 @@ class TTGlyphSetTest(object):
( (
"addVarComponent", "addVarComponent",
( (
"glyph00007", "glyph00003",
DecomposedTransform( DecomposedTransform(
translateX=0, translateX=0,
translateY=0, translateY=0,
@ -244,7 +244,7 @@ class TTGlyphSetTest(object):
( (
"addVarComponent", "addVarComponent",
( (
"glyph00003", "glyph00005",
DecomposedTransform( DecomposedTransform(
translateX=0, translateX=0,
translateY=0, translateY=0,