Merge pull request #27 from olivierberten/os2_v5

Support for OS/2 table version 5 as proposed by Microsoft
This commit is contained in:
Behdad Esfahbod 2013-11-25 04:12:44 -08:00
commit 6f3772bcb4

View File

@ -80,12 +80,19 @@ OS2_format_2_addition = OS2_format_1_addition + """
usMaxContex: H usMaxContex: H
""" """
OS2_format_5_addition = OS2_format_2_addition + """
usLowerOpticalPointSize: H
usUpperOpticalPointSize: H
"""
bigendian = " > # big endian\n" bigendian = " > # big endian\n"
OS2_format_1 = OS2_format_0 + OS2_format_1_addition OS2_format_1 = OS2_format_0 + OS2_format_1_addition
OS2_format_2 = OS2_format_0 + OS2_format_2_addition OS2_format_2 = OS2_format_0 + OS2_format_2_addition
OS2_format_5 = OS2_format_0 + OS2_format_5_addition
OS2_format_1_addition = bigendian + OS2_format_1_addition OS2_format_1_addition = bigendian + OS2_format_1_addition
OS2_format_2_addition = bigendian + OS2_format_2_addition OS2_format_2_addition = bigendian + OS2_format_2_addition
OS2_format_5_addition = bigendian + OS2_format_5_addition
class table_O_S_2f_2(DefaultTable.DefaultTable): class table_O_S_2f_2(DefaultTable.DefaultTable):
@ -102,6 +109,8 @@ class table_O_S_2f_2(DefaultTable.DefaultTable):
elif len(data) == sstruct.calcsize(OS2_format_2_addition): elif len(data) == sstruct.calcsize(OS2_format_2_addition):
if self.version not in (2, 3, 4): if self.version not in (2, 3, 4):
self.version = 1 self.version = 1
elif len(data) == sstruct.calcsize(OS2_format_5_addition):
self.version = 5
else: else:
from fontTools import ttLib from fontTools import ttLib
raise ttLib.TTLibError, "unknown format for OS/2 table (incorrect length): version %s" % (self.version, len(data)) raise ttLib.TTLibError, "unknown format for OS/2 table (incorrect length): version %s" % (self.version, len(data))
@ -109,6 +118,8 @@ class table_O_S_2f_2(DefaultTable.DefaultTable):
sstruct.unpack2(OS2_format_1_addition, data, self) sstruct.unpack2(OS2_format_1_addition, data, self)
elif self.version in (2, 3, 4): elif self.version in (2, 3, 4):
sstruct.unpack2(OS2_format_2_addition, data, self) sstruct.unpack2(OS2_format_2_addition, data, self)
elif self.version == 5:
sstruct.unpack2(OS2_format_5_addition, data, self)
elif self.version <> 0: elif self.version <> 0:
from fontTools import ttLib from fontTools import ttLib
raise ttLib.TTLibError, "unknown format for OS/2 table: version %s" % self.version raise ttLib.TTLibError, "unknown format for OS/2 table: version %s" % self.version
@ -123,6 +134,8 @@ class table_O_S_2f_2(DefaultTable.DefaultTable):
data = sstruct.pack(OS2_format_1, self) data = sstruct.pack(OS2_format_1, self)
elif self.version in (2, 3, 4): elif self.version in (2, 3, 4):
data = sstruct.pack(OS2_format_2, self) data = sstruct.pack(OS2_format_2, self)
elif self.version == 5:
data = sstruct.pack(OS2_format_5, self)
else: else:
from fontTools import ttLib from fontTools import ttLib
raise ttLib.TTLibError, "unknown format for OS/2 table: version %s" % self.version raise ttLib.TTLibError, "unknown format for OS/2 table: version %s" % self.version
@ -134,6 +147,8 @@ class table_O_S_2f_2(DefaultTable.DefaultTable):
format = OS2_format_1 format = OS2_format_1
elif self.version in (2, 3, 4): elif self.version in (2, 3, 4):
format = OS2_format_2 format = OS2_format_2
elif self.version == 5:
format = OS2_format_5
else: else:
format = OS2_format_0 format = OS2_format_0
formatstring, names, fixes = sstruct.getformat(format) formatstring, names, fixes = sstruct.getformat(format)