~ubuntu-branches/ubuntu/maverick/fonttools/maverick

« back to all changes in this revision

Viewing changes to Lib/fontTools/ttLib/tables/V_O_R_G_.py

  • Committer: Bazaar Package Importer
  • Author(s): Paul Wise
  • Date: 2008-07-24 00:03:02 UTC
  • mfrom: (2.1.8 intrepid)
  • Revision ID: james.westby@ubuntu.com-20080724000302-0tediu4ysxkn6dyy
Tags: 2.2-2
* Fix dependencies to use Numpy instead of Numeric (Closes: #492010)
* Drop unneeded quilt build-dependency
* Support noopt in DEB_BUILD_OPTIONS
* Complies with policy 3.8.0, update Standards-Version

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import operator
1
2
import DefaultTable
2
3
import struct
3
4
from fontTools.ttLib import sfnt
4
5
from fontTools.misc.textTools import safeEval, readHex
5
 
from types import TupleType, StringType
 
6
from types import IntType, StringType
6
7
 
7
8
 
8
9
class table_V_O_R_G_(DefaultTable.DefaultTable):
13
14
        """
14
15
 
15
16
        def decompile(self, data, ttFont):
 
17
                self.getGlyphName = ttFont.getGlyphName # for use in get/set item functions, for access by GID
16
18
                self.majorVersion, self.minorVersion, self.defaultVertOriginY, self.numVertOriginYMetrics = struct.unpack(">HHhH", data[:8])
17
 
                assert (self.majorVersion <= 1), "Major version of VORG table is higher than I knwo how to handle"
 
19
                assert (self.majorVersion <= 1), "Major version of VORG table is higher than I know how to handle"
18
20
                data = data[8:]
19
 
                self.VOriginRecords = {}
 
21
                vids = []
 
22
                gids = []
 
23
                pos = 0
20
24
                for i in range(self.numVertOriginYMetrics):
21
 
                        gid, vOrigin = struct.unpack(">Hh", data[:4])
22
 
                        glyphName = ttFont.getGlyphName(gid)
23
 
                        self.VOriginRecords[glyphName] = vOrigin
24
 
                        data = data[4:]
 
25
                        gid, vOrigin = struct.unpack(">Hh", data[pos:pos+4])
 
26
                        pos += 4
 
27
                        gids.append(gid)
 
28
                        vids.append(vOrigin)
 
29
 
 
30
                self.VOriginRecords = vOrig = {}
 
31
                glyphOrder = ttFont.getGlyphOrder()
 
32
                try:
 
33
                        names = map(operator.getitem, [glyphOrder]*self.numVertOriginYMetrics, gids )
 
34
                except IndexError:
 
35
                        getGlyphName = self.getGlyphName
 
36
                        names = map(getGlyphName, gids )
 
37
 
 
38
                map(operator.setitem, [vOrig]*self.numVertOriginYMetrics, names, vids)
 
39
 
25
40
 
26
41
        def compile(self, ttFont):
27
 
                glyphNames = self.VOriginRecords.keys()
28
 
                self.numVertOriginYMetrics = len(glyphNames)
29
 
                data = struct.pack(">HHhH", self.majorVersion, self.minorVersion, self.defaultVertOriginY, self.numVertOriginYMetrics)
30
 
                vOriginTable = []
31
 
                for glyphName in glyphNames:
32
 
                        try:
33
 
                                gid = ttFont.getGlyphID(glyphName)
34
 
                        except:
35
 
                                assert 0, "VORG table contains a glyph name not in ttFont.getGlyphNames(): " + str(glyphName)
36
 
                        vOriginTable.append([gid, self.VOriginRecords[glyphName]])
37
 
                vOriginTable.sort()
38
 
                for entry in vOriginTable:
39
 
                        data = data + struct.pack(">Hh", entry[0], entry[1])
 
42
                vorgs = self.VOriginRecords.values()
 
43
                names = self.VOriginRecords.keys()
 
44
                nameMap = ttFont.getReverseGlyphMap()
 
45
                lenRecords = len(vorgs) 
 
46
                try:
 
47
                        gids = map(operator.getitem, [nameMap]*lenRecords, names)
 
48
                except KeyError:
 
49
                        nameMap = ttFont.getReverseGlyphMap(rebuild=1)
 
50
                        gids = map(operator.getitem, [nameMap]*lenRecords, names)
 
51
                vOriginTable = map(None, gids, vorgs)
 
52
                self.numVertOriginYMetrics = lenRecords
 
53
                vOriginTable.sort() # must be in ascending GID order
 
54
                dataList = [ struct.pack(">Hh", rec[0], rec[1]) for rec in vOriginTable]
 
55
                header = struct.pack(">HHhH", self.majorVersion, self.minorVersion, self.defaultVertOriginY, self.numVertOriginYMetrics)
 
56
                dataList.insert(0, header)
 
57
                data = "".join(dataList)
40
58
                return data
41
59
 
42
60
        def toXML(self, writer, ttFont):
62
80
                        vOriginRec.toXML(writer, ttFont)
63
81
 
64
82
        def fromXML(self, (name, attrs, content), ttFont):
 
83
                if not hasattr(self, "VOriginRecords"):
 
84
                        self.VOriginRecords = {}
 
85
                self.getGlyphName = ttFont.getGlyphName # for use in get/set item functions, for access by GID
65
86
                if name == "VOriginRecord":
66
87
                        for element in content:
67
88
                                if isinstance(element, StringType):
68
89
                                        continue
69
 
                        if not hasattr(self, "VOriginRecords"):
70
 
                                self.VOriginRecords = {}
71
90
                        vOriginRec = VOriginRecord()
72
91
                        for element in content:
73
92
                                if isinstance(element, StringType):
78
97
                        value =  safeEval(attrs["value"])
79
98
                        setattr(self, name, value)
80
99
 
81
 
        def __getitem__(self, name):
82
 
                if not self.VOriginRecords.has_key(name):
 
100
 
 
101
        def __getitem__(self, glyphSelector):
 
102
                if type(glyphSelector) == IntType:
 
103
                        # its a gid, convert to glyph name
 
104
                        glyphSelector = self.getGlyphName(glyphSelector)
 
105
 
 
106
                if not self.VOriginRecords.has_key(glyphSelector):
83
107
                        return self.defaultVertOriginY
84
108
                        
85
 
                return self.VOriginRecords[name]
86
 
 
87
 
        def __setitem__(self, name, value):
 
109
                return self.VOriginRecords[glyphSelector]
 
110
 
 
111
        def __setitem__(self, glyphSelector, value):
 
112
                if type(glyphSelector) == IntType:
 
113
                        # its a gid, convert to glyph name
 
114
                        glyphSelector = self.getGlyphName(glyphSelector)
 
115
 
88
116
                if  value != self.defaultVertOriginY:
89
 
                        self.VOriginRecords[name] = value
90
 
                elif self.VOriginRecords.has_key(name):
91
 
                        del self.VOriginRecords[name]
92
 
 
 
117
                        self.VOriginRecords[glyphSelector] = value
 
118
                elif self.VOriginRecords.has_key(glyphSelector):
 
119
                        del self.VOriginRecords[glyphSelector]
93
120
 
94
121
class VOriginRecord:
95
122