[otTables] Support uint8 type in otTables

This commit is contained in:
Sascha Brawer 2015-10-16 00:17:22 +02:00
parent 1288a58eb1
commit 520918375f
3 changed files with 30 additions and 1 deletions

View File

@ -167,6 +167,13 @@ class OTTableReader(object):
self.pos = newpos self.pos = newpos
return value return value
def readUInt8(self):
pos = self.pos
newpos = pos + 1
value, = struct.unpack(">B", self.data[pos:newpos])
self.pos = newpos
return value
def readUInt24(self): def readUInt24(self):
pos = self.pos pos = self.pos
newpos = pos + 3 newpos = pos + 3
@ -446,6 +453,10 @@ class OTTableWriter(object):
def writeShort(self, value): def writeShort(self, value):
self.items.append(struct.pack(">h", value)) self.items.append(struct.pack(">h", value))
def writeUInt8(self, value):
assert 0 <= value < 256
self.items.append(struct.pack(">B", value))
def writeUInt24(self, value): def writeUInt24(self, value):
assert 0 <= value < 0x1000000 assert 0 <= value < 0x1000000
b = struct.pack(">L", value) b = struct.pack(">L", value)

View File

@ -16,6 +16,11 @@ class OTTableReaderTest(unittest.TestCase):
self.assertEqual(reader.readLong(), -889274641) self.assertEqual(reader.readLong(), -889274641)
self.assertEqual(reader.pos, 4) self.assertEqual(reader.pos, 4)
def test_readUInt8(self):
reader = OTTableReader(deHexStr("C3"))
self.assertEqual(reader.readUInt8(), 0xC3)
self.assertEqual(reader.pos, 1)
def test_readUShort(self): def test_readUShort(self):
reader = OTTableReader(deHexStr("CA FE")) reader = OTTableReader(deHexStr("CA FE"))
self.assertEqual(reader.readUShort(), 0xCAFE) self.assertEqual(reader.readUShort(), 0xCAFE)
@ -53,6 +58,11 @@ class OTTableWriterTest(unittest.TestCase):
writer.writeLong(-12345678) writer.writeLong(-12345678)
self.assertEqual(writer.getData(), deHexStr("FF 43 9E B2")) self.assertEqual(writer.getData(), deHexStr("FF 43 9E B2"))
def test_writeUInt8(self):
writer = OTTableWriter(globalState={})
writer.writeUInt8(0xBE)
self.assertEqual(writer.getData(), deHexStr("BE"))
def test_writeUShort(self): def test_writeUShort(self):
writer = OTTableWriter(globalState={}) writer = OTTableWriter(globalState={})
writer.writeUShort(0xBEEF) writer.writeUShort(0xBEEF)

View File

@ -175,6 +175,13 @@ class UShort(IntValue):
def write(self, writer, font, tableDict, value, repeatIndex=None): def write(self, writer, font, tableDict, value, repeatIndex=None):
writer.writeUShort(value) writer.writeUShort(value)
class UInt8(IntValue):
staticSize = 1
def read(self, reader, font, tableDict):
return reader.readUInt8()
def write(self, writer, font, tableDict, value, repeatIndex=None):
writer.writeUInt8(value)
class UInt24(IntValue): class UInt24(IntValue):
staticSize = 3 staticSize = 3
def read(self, reader, font, tableDict): def read(self, reader, font, tableDict):
@ -464,7 +471,8 @@ class DeltaValue(BaseConverter):
converterMapping = { converterMapping = {
# type class # type class
"int16": Short, "int16": Short,
"uint8": UInt8,
"uint16": UShort, "uint16": UShort,
"uint24": UInt24, "uint24": UInt24,
"uint32": ULong, "uint32": ULong,