diff -urN fonttools-20050315/Lib/fontTools/fondLib.py fonttools-20050624/Lib/fontTools/fondLib.py --- fonttools-20050315/Lib/fontTools/fondLib.py 2002-10-29 19:19:25.000000000 +0330 +++ fonttools-20050624/Lib/fontTools/fondLib.py 2005-06-24 14:05:16.000000000 +0430 @@ -12,6 +12,7 @@ DEBUG = 0 headerformat = """ + > ffFlags: h ffFamID: h ffFirstChar: h @@ -127,9 +128,9 @@ def _getheader(self): data = self.FOND.data sstruct.unpack(headerformat, data[:28], self) - self.ffProperty = struct.unpack("9h", data[28:46]) - self.ffIntl = struct.unpack("hh", data[46:50]) - self.ffVersion, = struct.unpack("h", data[50:FONDheadersize]) + self.ffProperty = struct.unpack(">9h", data[28:46]) + self.ffIntl = struct.unpack(">hh", data[46:50]) + self.ffVersion, = struct.unpack(">h", data[50:FONDheadersize]) if DEBUG: self._rawheader = data[:FONDheadersize] @@ -137,9 +138,9 @@ def _buildheader(self): header = sstruct.pack(headerformat, self) - header = header + apply(struct.pack, ("9h",) + self.ffProperty) - header = header + apply(struct.pack, ("hh",) + self.ffIntl) - header = header + struct.pack("h", self.ffVersion) + header = header + apply(struct.pack, (">9h",) + self.ffProperty) + header = header + apply(struct.pack, (">hh",) + self.ffIntl) + header = header + struct.pack(">h", self.ffVersion) if DEBUG: print "header is the same?", self._rawheader == header and 'yes.' or 'no.' if self._rawheader <> header: @@ -149,12 +150,12 @@ def _getfontassociationtable(self): data = self.FOND.data offset = FONDheadersize - numberofentries, = struct.unpack("h", data[offset:offset+2]) + numberofentries, = struct.unpack(">h", data[offset:offset+2]) numberofentries = numberofentries + 1 size = numberofentries * 6 self.fontAssoc = [] for i in range(offset + 2, offset + size, 6): - self.fontAssoc.append(struct.unpack("3h", data[i:i+6])) + self.fontAssoc.append(struct.unpack(">3h", data[i:i+6])) self._endoffontassociationtable = offset + size + 2 if DEBUG: @@ -162,9 +163,9 @@ self.parsedthings.append((offset, self._endoffontassociationtable, 'fontassociationtable')) def _buildfontassociationtable(self): - data = struct.pack("h", len(self.fontAssoc) - 1) + data = struct.pack(">h", len(self.fontAssoc) - 1) for size, stype, ID in self.fontAssoc: - data = data + struct.pack("3h", size, stype, ID) + data = data + struct.pack(">3h", size, stype, ID) if DEBUG: print "font association table is the same?", self._rawfontassociationtable == data and 'yes.' or 'no.' @@ -194,10 +195,10 @@ return boxes = {} data = self._rawoffsettable[6:] - numstyles = struct.unpack("h", data[:2])[0] + 1 + numstyles = struct.unpack(">h", data[:2])[0] + 1 data = data[2:] for i in range(numstyles): - style, l, b, r, t = struct.unpack("hhhhh", data[:10]) + style, l, b, r, t = struct.unpack(">hhhhh", data[:10]) boxes[style] = (l, b, r, t) data = data[10:] self.boundingBoxes = boxes @@ -206,9 +207,9 @@ if self.boundingBoxes and self._rawoffsettable[:6] == '\0\0\0\0\0\6': boxes = self.boundingBoxes.items() boxes.sort() - data = '\0\0\0\0\0\6' + struct.pack("h", len(boxes) - 1) + data = '\0\0\0\0\0\6' + struct.pack(">h", len(boxes) - 1) for style, (l, b, r, t) in boxes: - data = data + struct.pack("hhhhh", style, l, b, r, t) + data = data + struct.pack(">hhhhh", style, l, b, r, t) self._rawoffsettable = data def _getglyphwidthtable(self): @@ -217,15 +218,15 @@ return data = self.FOND.data offset = self.ffWTabOff - numberofentries, = struct.unpack("h", data[offset:offset+2]) + numberofentries, = struct.unpack(">h", data[offset:offset+2]) numberofentries = numberofentries + 1 count = offset + 2 for i in range(numberofentries): - stylecode, = struct.unpack("h", data[count:count+2]) + stylecode, = struct.unpack(">h", data[count:count+2]) widthtable = self.widthTables[stylecode] = [] count = count + 2 for j in range(3 + self.ffLastChar - self.ffFirstChar): - width, = struct.unpack("h", data[count:count+2]) + width, = struct.unpack(">h", data[count:count+2]) widthtable.append(width) count = count + 2 @@ -238,15 +239,15 @@ self._rawglyphwidthtable = "" return numberofentries = len(self.widthTables) - data = struct.pack('h', numberofentries - 1) + data = struct.pack('>h', numberofentries - 1) tables = self.widthTables.items() tables.sort() for stylecode, table in tables: - data = data + struct.pack('h', stylecode) + data = data + struct.pack('>h', stylecode) if len(table) <> (3 + self.ffLastChar - self.ffFirstChar): raise error, "width table has wrong length" for width in table: - data = data + struct.pack('h', width) + data = data + struct.pack('>h', width) if DEBUG: print "glyph width table is the same?", self._rawglyphwidthtable == data and 'yes.' or 'no.' self._rawglyphwidthtable = data @@ -257,17 +258,17 @@ return data = self.FOND.data offset = self.ffKernOff - numberofentries, = struct.unpack("h", data[offset:offset+2]) + numberofentries, = struct.unpack(">h", data[offset:offset+2]) numberofentries = numberofentries + 1 count = offset + 2 for i in range(numberofentries): - stylecode, = struct.unpack("h", data[count:count+2]) + stylecode, = struct.unpack(">h", data[count:count+2]) count = count + 2 - numberofpairs, = struct.unpack("h", data[count:count+2]) + numberofpairs, = struct.unpack(">h", data[count:count+2]) count = count + 2 kerntable = self.kernTables[stylecode] = [] for j in range(numberofpairs): - firstchar, secondchar, kerndistance = struct.unpack("cch", data[count:count+4]) + firstchar, secondchar, kerndistance = struct.unpack(">cch", data[count:count+4]) kerntable.append((ord(firstchar), ord(secondchar), kerndistance)) count = count + 4 @@ -281,14 +282,14 @@ self.ffKernOff = 0 return numberofentries = len(self.kernTables) - data = [struct.pack('h', numberofentries - 1)] + data = [struct.pack('>h', numberofentries - 1)] tables = self.kernTables.items() tables.sort() for stylecode, table in tables: - data.append(struct.pack('h', stylecode)) - data.append(struct.pack('h', len(table))) # numberofpairs + data.append(struct.pack('>h', stylecode)) + data.append(struct.pack('>h', len(table))) # numberofpairs for firstchar, secondchar, kerndistance in table: - data.append(struct.pack("cch", chr(firstchar), chr(secondchar), kerndistance)) + data.append(struct.pack(">cch", chr(firstchar), chr(secondchar), kerndistance)) data = string.join(data, '') @@ -308,9 +309,9 @@ return data = self.FOND.data self.fondClass, self.glyphTableOffset, self.styleMappingReserved, = \ - struct.unpack("hll", data[offset:offset+10]) - self.styleIndices = struct.unpack('48b', data[offset + 10:offset + 58]) - stringcount, = struct.unpack('h', data[offset+58:offset+60]) + struct.unpack(">hll", data[offset:offset+10]) + self.styleIndices = struct.unpack('>48b', data[offset + 10:offset + 58]) + stringcount, = struct.unpack('>h', data[offset+58:offset+60]) count = offset + 60 for i in range(stringcount): @@ -331,14 +332,14 @@ if not self.styleIndices: self._rawstylemappingtable = "" return - data = struct.pack("hll", self.fondClass, self.glyphTableOffset, + data = struct.pack(">hll", self.fondClass, self.glyphTableOffset, self.styleMappingReserved) self._packstylestrings() - data = data + apply(struct.pack, ("48b",) + self.styleIndices) + data = data + apply(struct.pack, (">48b",) + self.styleIndices) stringcount = len(self.styleStrings) - data = data + struct.pack("h", stringcount) + data = data + struct.pack(">h", stringcount) for string in self.styleStrings: data = data + chr(len(string)) + string @@ -401,7 +402,7 @@ data = self._rawstylemappingtable if not data: return - data = data[:2] + struct.pack("l", self.glyphTableOffset) + data[6:] + data = data[:2] + struct.pack(">l", self.glyphTableOffset) + data[6:] self._rawstylemappingtable = data def _getglyphencodingsubtable(self): @@ -410,7 +411,7 @@ return offset = self.ffStylOff + self.glyphTableOffset data = self.FOND.data - numberofentries, = struct.unpack("h", data[offset:offset+2]) + numberofentries, = struct.unpack(">h", data[offset:offset+2]) count = offset + 2 for i in range(numberofentries): glyphcode = ord(data[count]) @@ -430,7 +431,7 @@ self._rawglyphencodingsubtable = "" return numberofentries = len(self.glyphEncoding) - data = struct.pack("h", numberofentries) + data = struct.pack(">h", numberofentries) items = self.glyphEncoding.items() items.sort() for glyphcode, glyphname in items: diff -urN fonttools-20050315/Lib/fontTools/misc/psCharStrings.py fonttools-20050624/Lib/fontTools/misc/psCharStrings.py --- fonttools-20050315/Lib/fontTools/misc/psCharStrings.py 2005-02-24 00:52:27.000000000 +0330 +++ fonttools-20050624/Lib/fontTools/misc/psCharStrings.py 2005-05-07 13:11:12.000000000 +0430 @@ -780,7 +780,8 @@ # def op_hflex(self, index): dx1, dx2, dy2, dx3, dx4, dx5, dx6 = self.popall() - dy1 = dy3 = dy4 = dy5 = dy6 = 0 + dy1 = dy3 = dy4 = dy6 = 0 + dy5 = -dy2 self.rCurveTo((dx1, dy1), (dx2, dy2), (dx3, dy3)) self.rCurveTo((dx4, dy4), (dx5, dy5), (dx6, dy6)) def op_flex(self, index): @@ -789,7 +790,9 @@ self.rCurveTo((dx4, dy4), (dx5, dy5), (dx6, dy6)) def op_hflex1(self, index): dx1, dy1, dx2, dy2, dx3, dx4, dx5, dy5, dx6 = self.popall() - dy3 = dy4 = dy6 = 0 + dy3 = dy4 = 0 + dy6 = -(dy1 + dy2 + dy3 + dy4 + dy5) + self.rCurveTo((dx1, dy1), (dx2, dy2), (dx3, dy3)) self.rCurveTo((dx4, dy4), (dx5, dy5), (dx6, dy6)) def op_flex1(self, index): @@ -798,9 +801,9 @@ dy = dy1 + dy2 + dy3 + dy4 + dy5 if abs(dx) > abs(dy): dx6 = d6 - dy6 = 0 + dy6 = -dy else: - dx6 = 0 + dx6 = -dx dy6 = d6 self.rCurveTo((dx1, dy1), (dx2, dy2), (dx3, dy3)) self.rCurveTo((dx4, dy4), (dx5, dy5), (dx6, dy6)) diff -urN fonttools-20050315/Lib/fontTools/pens/basePen.py fonttools-20050624/Lib/fontTools/pens/basePen.py --- fonttools-20050315/Lib/fontTools/pens/basePen.py 2005-03-08 13:20:55.000000000 +0330 +++ fonttools-20050624/Lib/fontTools/pens/basePen.py 2005-04-10 17:48:42.000000000 +0430 @@ -162,8 +162,11 @@ of the base glyph and draws it onto self. """ from fontTools.pens.transformPen import TransformPen - glyph = self.glyphSet.get(glyphName) - if glyph is not None: + try: + glyph = self.glyphSet[glyphName] + except KeyError: + pass + else: tPen = TransformPen(self, transformation) glyph.draw(tPen)