py23 Use fixedToFloat() for fixed version numbers

This commit is contained in:
Behdad Esfahbod 2013-11-28 18:49:30 -05:00
parent 1336105c31
commit 3fa26d783f
4 changed files with 14 additions and 11 deletions

View File

@ -48,6 +48,7 @@ calcsize(format)
from __future__ import print_function, division
from fontTools.misc.py23 import *
from fontTools.misc.fixedTools import fixedToFloat as fi2fl, floatToFixed as fl2fi
import struct
import re
@ -67,7 +68,7 @@ def pack(format, object):
value = object[name]
if name in fixes:
# fixed point conversion
value = int(round(value*fixes[name]))
value = fl2fi(value, fixes[name])
elif isinstance(value, basestring):
value = tobytes(value)
elements.append(value)
@ -89,7 +90,7 @@ def unpack(format, data, object=None):
value = elements[i]
if name in fixes:
# fixed point conversion
value = value / fixes[name]
value = fi2fl(value, fixes[name])
elif isinstance(value, bytes):
try:
value = tostr(value)
@ -163,7 +164,7 @@ def getformat(format):
raise Error("fixed point must be 8, 16 or 32 bits long")
formatchar = _fixedpointmappings[bits]
assert m.group(5) == "F"
fixes[name] = float(1 << after)
fixes[name] = after
formatstring = formatstring + formatchar
_formatcache[format] = formatstring, names, fixes
return formatstring, names, fixes

View File

@ -2,6 +2,7 @@ from __future__ import print_function, division
from fontTools.misc.py23 import *
from fontTools.ttLib import sfnt
from fontTools.misc.textTools import safeEval, readHex
from fontTools.misc.fixedTools import fixedToFloat as fi2fl, floatToFixed as fl2fi
from . import DefaultTable
import struct
import warnings
@ -21,7 +22,7 @@ class table__k_e_r_n(DefaultTable.DefaultTable):
if (len(data) >= 8) and (version == 1):
# AAT Apple's "new" format. Hm.
version, nTables = struct.unpack(">LL", data[:8])
self.version = version / 0x10000
self.version = fi2fl(version, 16)
data = data[8:]
apple = True
else:
@ -53,7 +54,7 @@ class table__k_e_r_n(DefaultTable.DefaultTable):
nTables = 0
if self.version == 1.0:
# AAT Apple's "new" format.
data = struct.pack(">ll", self.version * 0x10000, nTables)
data = struct.pack(">ll", fl2fi(self.version, 16), nTables)
else:
data = struct.pack(">HH", self.version, nTables)
if hasattr(self, "kernTables"):

View File

@ -1,6 +1,7 @@
from __future__ import print_function, division
from fontTools.misc.py23 import *
from fontTools.misc.textTools import safeEval
from fontTools.misc.fixedTools import fixedToFloat as fi2fl, floatToFixed as fl2fi
from .otBase import ValueRecordFactory
@ -95,10 +96,10 @@ class Version(BaseConverter):
def read(self, reader, font, tableDict):
value = reader.readLong()
assert (value >> 16) == 1, "Unsupported version 0x%08x" % value
return value / 0x10000
return fi2fl(value, 16)
def write(self, writer, font, tableDict, value, repeatIndex=None):
if value < 0x10000:
value *= 0x10000
value = fl2fi(value, 16)
value = int(round(value))
assert (value >> 16) == 1, "Unsupported version 0x%08x" % value
writer.writeLong(value)
@ -106,14 +107,14 @@ class Version(BaseConverter):
value = attrs["value"]
value = float(int(value, 0)) if value.startswith("0") else float(value)
if value >= 0x10000:
value = value / 0x10000
value = fi2fl(value, 16)
return value
def xmlWrite(self, xmlWriter, font, value, name, attrs):
if value >= 0x10000:
value = value / 0x10000
value = fi2fl(value, 16)
if value % 1 != 0:
# Write as hex
value = "0x%08x" % (int(round(value * 0x10000)))
value = "0x%08x" % fl2fi(value, 16)
xmlWriter.simpletag(name, attrs + [("value", value)])
xmlWriter.newline()

View File

@ -639,7 +639,7 @@ otData = [
('Offset', 'AttachList', None, None, 'Offset to list of glyphs with attachment points-from beginning of GDEF header (may be NULL)'),
('Offset', 'LigCaretList', None, None, 'Offset to list of positioning points for ligature carets-from beginning of GDEF header (may be NULL)'),
('Offset', 'MarkAttachClassDef', None, None, 'Offset to class definition table for mark attachment type-from beginning of GDEF header (may be NULL)'),
('Offset', 'MarkGlyphSetsDef', None, 'Version >= 0x00010002 / 0x10000', 'Offset to the table of mark set definitions-from beginning of GDEF header (may be NULL)'),
('Offset', 'MarkGlyphSetsDef', None, 'int(round(Version*0x10000)) >= 0x00010002', 'Offset to the table of mark set definitions-from beginning of GDEF header (may be NULL)'),
]),
('AttachList', [