• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1from fontTools.misc.testTools import FakeFont, getXML, parseXML
2from fontTools.misc.textTools import deHexStr, hexStr
3from fontTools.ttLib import newTable
4import unittest
5
6
7# On macOS X 10.12.6, the first font in /System/Library/Fonts/PingFang.ttc
8# has a ‘cidg’ table with a similar structure as this test data, just larger.
9CIDG_DATA = deHexStr(
10    "0000 0000 "  #   0: Format=0, Flags=0
11    "0000 0098 "  #   4: StructLength=152
12    "0000 "  #   8: Registry=0
13    "41 64 6F 62 65 "  #  10: RegistryName="Adobe"
14    + ("00" * 59)
15    + "0002 "  #  15: <padding>  #  74: Order=2
16    "43 4E 53 31 "  #  76: Order="CNS1"
17    + ("00" * 60)
18    + "0000 "  #  80: <padding>  # 140: SupplementVersion=0
19    "0004 "  # 142: Count
20    "0000 "  # 144: GlyphID[0]=.notdef
21    "FFFF "  # 146: CIDs[1]=<None>
22    "0003 "  # 148: CIDs[2]=C
23    "0001 "  # 150: CIDs[3]=A
24)  # 152: <end>
25assert len(CIDG_DATA) == 152, len(CIDG_DATA)
26
27
28CIDG_XML = [
29    '<CIDGlyphMapping Format="0">',
30    '  <DataFormat value="0"/>',
31    "  <!-- StructLength=152 -->",
32    '  <Registry value="0"/>',
33    '  <RegistryName value="Adobe"/>',
34    '  <Order value="2"/>',
35    '  <OrderName value="CNS1"/>',
36    '  <SupplementVersion value="0"/>',
37    "  <Mapping>",
38    '    <CID cid="0" glyph=".notdef"/>',
39    '    <CID cid="2" glyph="C"/>',
40    '    <CID cid="3" glyph="A"/>',
41    "  </Mapping>",
42    "</CIDGlyphMapping>",
43]
44
45
46class GCIDTest(unittest.TestCase):
47    @classmethod
48    def setUpClass(cls):
49        cls.maxDiff = None
50        cls.font = FakeFont([".notdef", "A", "B", "C", "D"])
51
52    def testDecompileToXML(self):
53        table = newTable("cidg")
54        table.decompile(CIDG_DATA, self.font)
55        self.assertEqual(getXML(table.toXML, self.font), CIDG_XML)
56
57    def testCompileFromXML(self):
58        table = newTable("cidg")
59        for name, attrs, content in parseXML(CIDG_XML):
60            table.fromXML(name, attrs, content, font=self.font)
61        self.assertEqual(hexStr(table.compile(self.font)), hexStr(CIDG_DATA))
62
63
64if __name__ == "__main__":
65    import sys
66
67    sys.exit(unittest.main())
68