2016-12-21 07:33:55 +00:00
|
|
|
from fontTools.misc.testTools import FakeFont, getXML, parseXML
|
|
|
|
from fontTools.misc.textTools import deHexStr, hexStr
|
|
|
|
from fontTools.ttLib.tables._f_v_a_r import Axis
|
|
|
|
from fontTools.ttLib import newTable, TTFont
|
|
|
|
import unittest
|
|
|
|
|
|
|
|
|
|
|
|
MVAR_DATA = deHexStr(
|
|
|
|
"0001 0000 " # 0: version=1.0
|
2017-01-10 11:01:06 -08:00
|
|
|
"0000 0008 " # 4: reserved=0, valueRecordSize=8
|
2021-04-21 14:37:47 -07:00
|
|
|
"0009 " # 8: valueRecordCount=9
|
|
|
|
"0054 " # 10: offsetToItemVariationStore=84
|
2016-12-21 07:33:55 +00:00
|
|
|
"6861 7363 " # 12: ValueRecord.valueTag="hasc"
|
|
|
|
"0000 " # 16: ValueRecord.deltaSetOuterIndex
|
|
|
|
"0003 " # 18: ValueRecord.deltaSetInnerIndex
|
|
|
|
"6863 6C61 " # 20: ValueRecord.valueTag="hcla"
|
|
|
|
"0000 " # 24: ValueRecord.deltaSetOuterIndex
|
|
|
|
"0003 " # 26: ValueRecord.deltaSetInnerIndex
|
|
|
|
"6863 6C64 " # 28: ValueRecord.valueTag="hcld"
|
|
|
|
"0000 " # 32: ValueRecord.deltaSetOuterIndex
|
|
|
|
"0003 " # 34: ValueRecord.deltaSetInnerIndex
|
|
|
|
"6864 7363 " # 36: ValueRecord.valueTag="hdsc"
|
|
|
|
"0000 " # 40: ValueRecord.deltaSetOuterIndex
|
|
|
|
"0000 " # 42: ValueRecord.deltaSetInnerIndex
|
|
|
|
"686C 6770 " # 44: ValueRecord.valueTag="hlgp"
|
|
|
|
"0000 " # 48: ValueRecord.deltaSetOuterIndex
|
|
|
|
"0002 " # 50: ValueRecord.deltaSetInnerIndex
|
|
|
|
"7362 796F " # 52: ValueRecord.valueTag="sbyo"
|
|
|
|
"0000 " # 56: ValueRecord.deltaSetOuterIndex
|
|
|
|
"0001 " # 58: ValueRecord.deltaSetInnerIndex
|
|
|
|
"7370 796F " # 60: ValueRecord.valueTag="spyo"
|
|
|
|
"0000 " # 64: ValueRecord.deltaSetOuterIndex
|
|
|
|
"0002 " # 66: ValueRecord.deltaSetInnerIndex
|
2021-04-21 14:37:47 -07:00
|
|
|
"7465 7374 " # 68: ValueRecord.valueTag="test"
|
|
|
|
"0000 " # 72: ValueRecord.deltaSetOuterIndex
|
|
|
|
"0002 " # 74: ValueRecord.deltaSetInnerIndex
|
|
|
|
"7465 7332 " # 76: ValueRecord.valueTag="tes2"
|
|
|
|
"0000 " # 78: ValueRecord.deltaSetOuterIndex
|
|
|
|
"0002 " # 82: ValueRecord.deltaSetInnerIndex
|
|
|
|
"0001 " # 84: VarStore.format=1
|
|
|
|
"0000 000C " # 86: VarStore.offsetToVariationRegionList=12
|
|
|
|
"0001 " # 90: VarStore.itemVariationDataCount=1
|
|
|
|
"0000 0016 " # 92: VarStore.itemVariationDataOffsets[0]=22
|
|
|
|
"0001 " # 96: VarRegionList.axisCount=1
|
|
|
|
"0001 " # 98: VarRegionList.regionCount=1
|
|
|
|
"0000 " # 100: variationRegions[0].regionAxes[0].startCoord=0.0
|
|
|
|
"4000 " # 102: variationRegions[0].regionAxes[0].peakCoord=1.0
|
|
|
|
"4000 " # 104: variationRegions[0].regionAxes[0].endCoord=1.0
|
|
|
|
"0004 " # 106: VarData.ItemCount=4
|
|
|
|
"0001 " # 108: VarData.NumShorts=1
|
|
|
|
"0001 " # 110: VarData.VarRegionCount=1
|
|
|
|
"0000 " # 112: VarData.VarRegionIndex[0]=0
|
|
|
|
"FF38 " # 114: VarData.deltaSets[0]=-200
|
|
|
|
"FFCE " # 116: VarData.deltaSets[0]=-50
|
|
|
|
"0064 " # 118: VarData.deltaSets[0]=100
|
|
|
|
"00C8 " # 120: VarData.deltaSets[0]=200
|
2016-12-21 07:33:55 +00:00
|
|
|
)
|
|
|
|
|
2016-12-21 13:24:51 +00:00
|
|
|
MVAR_XML = [
|
|
|
|
'<Version value="0x00010000"/>',
|
2017-01-10 11:01:06 -08:00
|
|
|
'<Reserved value="0"/>',
|
2016-12-21 13:24:51 +00:00
|
|
|
'<ValueRecordSize value="8"/>',
|
2021-04-21 14:37:47 -07:00
|
|
|
"<!-- ValueRecordCount=9 -->",
|
2016-12-21 13:24:51 +00:00
|
|
|
'<VarStore Format="1">',
|
|
|
|
' <Format value="1"/>',
|
|
|
|
" <VarRegionList>",
|
|
|
|
" <!-- RegionAxisCount=1 -->",
|
|
|
|
" <!-- RegionCount=1 -->",
|
|
|
|
' <Region index="0">',
|
|
|
|
' <VarRegionAxis index="0">',
|
|
|
|
' <StartCoord value="0.0"/>',
|
|
|
|
' <PeakCoord value="1.0"/>',
|
|
|
|
' <EndCoord value="1.0"/>',
|
|
|
|
" </VarRegionAxis>",
|
|
|
|
" </Region>",
|
|
|
|
" </VarRegionList>",
|
|
|
|
" <!-- VarDataCount=1 -->",
|
|
|
|
' <VarData index="0">',
|
|
|
|
" <!-- ItemCount=4 -->",
|
|
|
|
' <NumShorts value="1"/>',
|
|
|
|
" <!-- VarRegionCount=1 -->",
|
|
|
|
' <VarRegionIndex index="0" value="0"/>',
|
|
|
|
' <Item index="0" value="[-200]"/>',
|
|
|
|
' <Item index="1" value="[-50]"/>',
|
|
|
|
' <Item index="2" value="[100]"/>',
|
|
|
|
' <Item index="3" value="[200]"/>',
|
|
|
|
" </VarData>",
|
|
|
|
"</VarStore>",
|
|
|
|
'<ValueRecord index="0">',
|
|
|
|
' <ValueTag value="hasc"/>',
|
|
|
|
' <VarIdx value="3"/>',
|
|
|
|
"</ValueRecord>",
|
|
|
|
'<ValueRecord index="1">',
|
|
|
|
' <ValueTag value="hcla"/>',
|
|
|
|
' <VarIdx value="3"/>',
|
|
|
|
"</ValueRecord>",
|
|
|
|
'<ValueRecord index="2">',
|
|
|
|
' <ValueTag value="hcld"/>',
|
|
|
|
' <VarIdx value="3"/>',
|
|
|
|
"</ValueRecord>",
|
|
|
|
'<ValueRecord index="3">',
|
|
|
|
' <ValueTag value="hdsc"/>',
|
|
|
|
' <VarIdx value="0"/>',
|
|
|
|
"</ValueRecord>",
|
|
|
|
'<ValueRecord index="4">',
|
|
|
|
' <ValueTag value="hlgp"/>',
|
|
|
|
' <VarIdx value="2"/>',
|
|
|
|
"</ValueRecord>",
|
|
|
|
'<ValueRecord index="5">',
|
|
|
|
' <ValueTag value="sbyo"/>',
|
|
|
|
' <VarIdx value="1"/>',
|
|
|
|
"</ValueRecord>",
|
|
|
|
'<ValueRecord index="6">',
|
|
|
|
' <ValueTag value="spyo"/>',
|
|
|
|
' <VarIdx value="2"/>',
|
|
|
|
"</ValueRecord>",
|
2021-04-21 14:37:47 -07:00
|
|
|
'<ValueRecord index="7">',
|
|
|
|
' <ValueTag value="test"/>',
|
|
|
|
' <VarIdx value="2"/>',
|
|
|
|
"</ValueRecord>",
|
|
|
|
'<ValueRecord index="8">',
|
|
|
|
' <ValueTag value="tes2"/>',
|
|
|
|
' <VarIdx value="2"/>',
|
|
|
|
"</ValueRecord>",
|
2016-12-21 13:24:51 +00:00
|
|
|
]
|
2016-12-21 07:33:55 +00:00
|
|
|
|
|
|
|
|
|
|
|
class MVARTest(unittest.TestCase):
|
2016-12-21 13:40:57 +00:00
|
|
|
@classmethod
|
|
|
|
def setUpClass(cls):
|
|
|
|
cls.maxDiff = None
|
|
|
|
|
2016-12-21 07:33:55 +00:00
|
|
|
def test_decompile_toXML(self):
|
|
|
|
mvar = newTable("MVAR")
|
|
|
|
font = TTFont()
|
|
|
|
mvar.decompile(MVAR_DATA, font)
|
|
|
|
self.assertEqual(getXML(mvar.toXML), MVAR_XML)
|
|
|
|
|
2021-04-21 14:37:47 -07:00
|
|
|
def test_decompile_toXML_lazy(self):
|
|
|
|
mvar = newTable("MVAR")
|
|
|
|
font = TTFont(lazy=True)
|
|
|
|
mvar.decompile(MVAR_DATA, font)
|
|
|
|
self.assertEqual(getXML(mvar.toXML), MVAR_XML)
|
|
|
|
|
2016-12-21 07:33:55 +00:00
|
|
|
def test_compile_fromXML(self):
|
|
|
|
mvar = newTable("MVAR")
|
|
|
|
font = TTFont()
|
|
|
|
for name, attrs, content in parseXML(MVAR_XML):
|
|
|
|
mvar.fromXML(name, attrs, content, font=font)
|
|
|
|
data = MVAR_DATA
|
|
|
|
self.assertEqual(hexStr(mvar.compile(font)), hexStr(data))
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
2017-01-11 13:05:35 +00:00
|
|
|
import sys
|
2022-12-13 11:26:36 +00:00
|
|
|
|
2017-01-11 13:05:35 +00:00
|
|
|
sys.exit(unittest.main())
|