[_h_m_t_x] use tuple() instead of list() for metrics dict values

As suggested in https://github.com/fonttools/fonttools/pull/706#commitcomment-19429339
This commit is contained in:
Cosimo Lupo 2016-10-14 16:47:44 +01:00
parent 8a0172a562
commit 2300b9c168
2 changed files with 26 additions and 26 deletions

View File

@ -53,11 +53,11 @@ class table__h_m_t_x(DefaultTable.DefaultTable):
"Glyph %r has a huge advance %s (%d); is it intentional or " "Glyph %r has a huge advance %s (%d); is it intentional or "
"an (invalid) negative value?", glyphName, self.advanceName, "an (invalid) negative value?", glyphName, self.advanceName,
advanceWidth) advanceWidth)
self.metrics[glyphName] = [advanceWidth, lsb] self.metrics[glyphName] = (advanceWidth, lsb)
lastAdvance = metrics[-2] lastAdvance = metrics[-2]
for i in range(numberOfSideBearings): for i in range(numberOfSideBearings):
glyphName = glyphOrder[i + numberOfMetrics] glyphName = glyphOrder[i + numberOfMetrics]
self.metrics[glyphName] = [lastAdvance, sideBearings[i]] self.metrics[glyphName] = (lastAdvance, sideBearings[i])
def compile(self, ttFont): def compile(self, ttFont):
metrics = [] metrics = []
@ -117,8 +117,8 @@ class table__h_m_t_x(DefaultTable.DefaultTable):
if not hasattr(self, "metrics"): if not hasattr(self, "metrics"):
self.metrics = {} self.metrics = {}
if name == "mtx": if name == "mtx":
self.metrics[attrs["name"]] = [safeEval(attrs[self.advanceName]), self.metrics[attrs["name"]] = (safeEval(attrs[self.advanceName]),
safeEval(attrs[self.sideBearingName])] safeEval(attrs[self.sideBearingName]))
def __delitem__(self, glyphName): def __delitem__(self, glyphName):
del self.metrics[glyphName] del self.metrics[glyphName]
@ -127,4 +127,4 @@ class table__h_m_t_x(DefaultTable.DefaultTable):
return self.metrics[glyphName] return self.metrics[glyphName]
def __setitem__(self, glyphName, advance_sb_pair): def __setitem__(self, glyphName, advance_sb_pair):
self.metrics[glyphName] = list(advance_sb_pair) self.metrics[glyphName] = tuple(advance_sb_pair)

View File

@ -43,9 +43,9 @@ class HmtxTableTest(unittest.TestCase):
mtxTable = newTable(self.tag) mtxTable = newTable(self.tag)
mtxTable.decompile(data, font) mtxTable.decompile(data, font)
self.assertEqual(mtxTable['A'], [674, -11]) self.assertEqual(mtxTable['A'], (674, -11))
self.assertEqual(mtxTable['B'], [632, 79]) self.assertEqual(mtxTable['B'], (632, 79))
self.assertEqual(mtxTable['C'], [710, 54]) self.assertEqual(mtxTable['C'], (710, 54))
def test_decompile_additional_SB(self): def test_decompile_additional_SB(self):
font = self.makeFont(numGlyphs=4, numberOfMetrics=2) font = self.makeFont(numGlyphs=4, numberOfMetrics=2)
@ -56,11 +56,11 @@ class HmtxTableTest(unittest.TestCase):
mtxTable = newTable(self.tag) mtxTable = newTable(self.tag)
mtxTable.decompile(data, font) mtxTable.decompile(data, font)
self.assertEqual(mtxTable['A'], [674, -11]) self.assertEqual(mtxTable['A'], (674, -11))
self.assertEqual(mtxTable['B'], [632, 79]) self.assertEqual(mtxTable['B'], (632, 79))
# all following have same width as the previous # all following have same width as the previous
self.assertEqual(mtxTable['C'], [632, 54]) self.assertEqual(mtxTable['C'], (632, 54))
self.assertEqual(mtxTable['D'], [632, -4]) self.assertEqual(mtxTable['D'], (632, -4))
def test_decompile_not_enough_data(self): def test_decompile_not_enough_data(self):
font = self.makeFont(numGlyphs=1, numberOfMetrics=1) font = self.makeFont(numGlyphs=1, numberOfMetrics=1)
@ -112,9 +112,9 @@ class HmtxTableTest(unittest.TestCase):
font = self.makeFont(numGlyphs=3, numberOfMetrics=4) font = self.makeFont(numGlyphs=3, numberOfMetrics=4)
mtxTable = font[self.tag] = newTable(self.tag) mtxTable = font[self.tag] = newTable(self.tag)
mtxTable.metrics = { mtxTable.metrics = {
'A': [674, -11], 'A': (674, -11),
'B': [632, 79], 'B': (632, 79),
'C': [710, 54], 'C': (710, 54),
} }
data = mtxTable.compile(font) data = mtxTable.compile(font)
@ -129,10 +129,10 @@ class HmtxTableTest(unittest.TestCase):
font = self.makeFont(numGlyphs=4, numberOfMetrics=1) font = self.makeFont(numGlyphs=4, numberOfMetrics=1)
mtxTable = font[self.tag] = newTable(self.tag) mtxTable = font[self.tag] = newTable(self.tag)
mtxTable.metrics = { mtxTable.metrics = {
'A': [632, -11], 'A': (632, -11),
'B': [632, 79], 'B': (632, 79),
'C': [632, 54], 'C': (632, 54),
'D': [632, -4], 'D': (632, -4),
} }
data = mtxTable.compile(font) data = mtxTable.compile(font)
@ -155,7 +155,7 @@ class HmtxTableTest(unittest.TestCase):
def test_compile_struct_out_of_range(self): def test_compile_struct_out_of_range(self):
font = self.makeFont(numGlyphs=1, numberOfMetrics=1) font = self.makeFont(numGlyphs=1, numberOfMetrics=1)
mtxTable = font[self.tag] = newTable(self.tag) mtxTable = font[self.tag] = newTable(self.tag)
mtxTable.metrics = {'A': [0xFFFF+1, -0x8001]} mtxTable.metrics = {'A': (0xFFFF+1, -0x8001)}
with self.assertRaises(struct.error): with self.assertRaises(struct.error):
mtxTable.compile(font) mtxTable.compile(font)
@ -163,7 +163,7 @@ class HmtxTableTest(unittest.TestCase):
def test_toXML(self): def test_toXML(self):
font = self.makeFont(numGlyphs=2, numberOfMetrics=2) font = self.makeFont(numGlyphs=2, numberOfMetrics=2)
mtxTable = font[self.tag] = newTable(self.tag) mtxTable = font[self.tag] = newTable(self.tag)
mtxTable.metrics = {'B': [632, 79], 'A': [674, -11]} mtxTable.metrics = {'B': (632, 79), 'A': (674, -11)}
self.assertEqual( self.assertEqual(
getXML(mtxTable.toXML), getXML(mtxTable.toXML),
@ -183,11 +183,11 @@ class HmtxTableTest(unittest.TestCase):
mtxTable.fromXML(name, attrs, content, ttFont=None) mtxTable.fromXML(name, attrs, content, ttFont=None)
self.assertEqual( self.assertEqual(
mtxTable.metrics, {'A': [674, -11], 'B': [632, 79]}) mtxTable.metrics, {'A': (674, -11), 'B': (632, 79)})
def test_delitem(self): def test_delitem(self):
mtxTable = newTable(self.tag) mtxTable = newTable(self.tag)
mtxTable.metrics = {'A': [0, 0]} mtxTable.metrics = {'A': (0, 0)}
del mtxTable['A'] del mtxTable['A']
@ -195,10 +195,10 @@ class HmtxTableTest(unittest.TestCase):
def test_setitem(self): def test_setitem(self):
mtxTable = newTable(self.tag) mtxTable = newTable(self.tag)
mtxTable.metrics = {'A': [674, -11], 'B': [632, 79]} mtxTable.metrics = {'A': (674, -11), 'B': (632, 79)}
mtxTable['B'] = (0, 0) # tuple is converted to list mtxTable['B'] = [0, 0] # list is converted to tuple
self.assertEqual(mtxTable.metrics, {'A': [674, -11], 'B': [0, 0]}) self.assertEqual(mtxTable.metrics, {'A': (674, -11), 'B': (0, 0)})
if __name__ == "__main__": if __name__ == "__main__":