py23 Use fixedToFloat() for fixed version numbers
This commit is contained in:
parent
1336105c31
commit
3fa26d783f
@ -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
|
||||
|
@ -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"):
|
||||
|
@ -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()
|
||||
|
||||
|
@ -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', [
|
||||
|
Loading…
x
Reference in New Issue
Block a user