Before this change, the AAT lookups were alphabetically sorted by glyph name, but it seems more natural to write XML in the usual glyph order. No changes to the binary format (which already was in glyph order); this only affects how XML output is produced.
85 lines
2.9 KiB
Python
85 lines
2.9 KiB
Python
from __future__ import print_function, division, absolute_import, unicode_literals
|
|
from fontTools.misc.py23 import *
|
|
from fontTools.misc.testTools import FakeFont, getXML, parseXML
|
|
from fontTools.misc.textTools import deHexStr, hexStr
|
|
from fontTools.ttLib import newTable
|
|
import unittest
|
|
|
|
|
|
PROP_FORMAT_0_DATA = deHexStr(
|
|
'0001 0000 0000 ' # 0: Version=1.0, Format=0
|
|
'0005 ' # 6: DefaultProperties=European number terminator
|
|
) # 8: <end>
|
|
assert(len(PROP_FORMAT_0_DATA) == 8)
|
|
|
|
|
|
PROP_FORMAT_0_XML = [
|
|
'<Version value="1.0"/>',
|
|
'<GlyphProperties Format="0">',
|
|
' <DefaultProperties value="5"/>',
|
|
'</GlyphProperties>',
|
|
]
|
|
|
|
|
|
PROP_FORMAT_1_DATA = deHexStr(
|
|
'0003 0000 0001 ' # 0: Version=3.0, Format=1
|
|
'0000 ' # 6: DefaultProperties=left-to-right; non-whitespace
|
|
'0008 0003 0004 ' # 8: LookupFormat=8, FirstGlyph=3, GlyphCount=4
|
|
'000B ' # 14: Properties[C]=other neutral
|
|
'000A ' # 16: Properties[D]=whitespace
|
|
'600B ' # 18: Properties[E]=other neutral; hanging punct
|
|
'0005 ' # 20: Properties[F]=European number terminator
|
|
) # 22: <end>
|
|
assert(len(PROP_FORMAT_1_DATA) == 22)
|
|
|
|
|
|
PROP_FORMAT_1_XML = [
|
|
'<Version value="3.0"/>',
|
|
'<GlyphProperties Format="1">',
|
|
' <DefaultProperties value="0"/>',
|
|
' <Properties>',
|
|
' <Lookup glyph="C" value="11"/>',
|
|
' <Lookup glyph="D" value="10"/>',
|
|
' <Lookup glyph="E" value="24587"/>',
|
|
' <Lookup glyph="F" value="5"/>',
|
|
' </Properties>',
|
|
'</GlyphProperties>',
|
|
]
|
|
|
|
|
|
class PROPTest(unittest.TestCase):
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
cls.maxDiff = None
|
|
cls.font = FakeFont(['.notdef', 'A', 'B', 'C', 'D', 'E', 'F', 'G'])
|
|
|
|
def test_decompile_toXML_format0(self):
|
|
table = newTable('prop')
|
|
table.decompile(PROP_FORMAT_0_DATA, self.font)
|
|
self.assertEqual(getXML(table.toXML, self.font), PROP_FORMAT_0_XML)
|
|
|
|
def test_compile_fromXML_format0(self):
|
|
table = newTable('prop')
|
|
for name, attrs, content in parseXML(PROP_FORMAT_0_XML):
|
|
table.fromXML(name, attrs, content, font=self.font)
|
|
self.assertEqual(hexStr(table.compile(self.font)),
|
|
hexStr(PROP_FORMAT_0_DATA))
|
|
|
|
def test_decompile_toXML_format1(self):
|
|
table = newTable('prop')
|
|
table.decompile(PROP_FORMAT_1_DATA, self.font)
|
|
self.assertEqual(getXML(table.toXML, self.font), PROP_FORMAT_1_XML)
|
|
|
|
def test_compile_fromXML_format1(self):
|
|
table = newTable('prop')
|
|
for name, attrs, content in parseXML(PROP_FORMAT_1_XML):
|
|
table.fromXML(name, attrs, content, font=self.font)
|
|
self.assertEqual(hexStr(table.compile(self.font)),
|
|
hexStr(PROP_FORMAT_1_DATA))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
import sys
|
|
sys.exit(unittest.main())
|