Skip to content

Commit

Permalink
[_h_m_t_x] use tuple() instead of list() for metrics dict values
Browse files Browse the repository at this point in the history
As suggested in #706 (comment)
  • Loading branch information
Cosimo Lupo committed Oct 14, 2016
1 parent 8a0172a commit 2300b9c
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 26 deletions.
10 changes: 5 additions & 5 deletions Lib/fontTools/ttLib/tables/_h_m_t_x.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,11 @@ def decompile(self, data, ttFont):
"Glyph %r has a huge advance %s (%d); is it intentional or "
"an (invalid) negative value?", glyphName, self.advanceName,
advanceWidth)
self.metrics[glyphName] = [advanceWidth, lsb]
self.metrics[glyphName] = (advanceWidth, lsb)
lastAdvance = metrics[-2]
for i in range(numberOfSideBearings):
glyphName = glyphOrder[i + numberOfMetrics]
self.metrics[glyphName] = [lastAdvance, sideBearings[i]]
self.metrics[glyphName] = (lastAdvance, sideBearings[i])

def compile(self, ttFont):
metrics = []
Expand Down Expand Up @@ -117,8 +117,8 @@ def fromXML(self, name, attrs, content, ttFont):
if not hasattr(self, "metrics"):
self.metrics = {}
if name == "mtx":
self.metrics[attrs["name"]] = [safeEval(attrs[self.advanceName]),
safeEval(attrs[self.sideBearingName])]
self.metrics[attrs["name"]] = (safeEval(attrs[self.advanceName]),
safeEval(attrs[self.sideBearingName]))

def __delitem__(self, glyphName):
del self.metrics[glyphName]
Expand All @@ -127,4 +127,4 @@ def __getitem__(self, glyphName):
return self.metrics[glyphName]

def __setitem__(self, glyphName, advance_sb_pair):
self.metrics[glyphName] = list(advance_sb_pair)
self.metrics[glyphName] = tuple(advance_sb_pair)
42 changes: 21 additions & 21 deletions Lib/fontTools/ttLib/tables/_h_m_t_x_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,9 @@ def test_decompile(self):
mtxTable = newTable(self.tag)
mtxTable.decompile(data, font)

self.assertEqual(mtxTable['A'], [674, -11])
self.assertEqual(mtxTable['B'], [632, 79])
self.assertEqual(mtxTable['C'], [710, 54])
self.assertEqual(mtxTable['A'], (674, -11))
self.assertEqual(mtxTable['B'], (632, 79))
self.assertEqual(mtxTable['C'], (710, 54))

def test_decompile_additional_SB(self):
font = self.makeFont(numGlyphs=4, numberOfMetrics=2)
Expand All @@ -56,11 +56,11 @@ def test_decompile_additional_SB(self):
mtxTable = newTable(self.tag)
mtxTable.decompile(data, font)

self.assertEqual(mtxTable['A'], [674, -11])
self.assertEqual(mtxTable['B'], [632, 79])
self.assertEqual(mtxTable['A'], (674, -11))
self.assertEqual(mtxTable['B'], (632, 79))
# all following have same width as the previous
self.assertEqual(mtxTable['C'], [632, 54])
self.assertEqual(mtxTable['D'], [632, -4])
self.assertEqual(mtxTable['C'], (632, 54))
self.assertEqual(mtxTable['D'], (632, -4))

def test_decompile_not_enough_data(self):
font = self.makeFont(numGlyphs=1, numberOfMetrics=1)
Expand Down Expand Up @@ -112,9 +112,9 @@ def test_compile(self):
font = self.makeFont(numGlyphs=3, numberOfMetrics=4)
mtxTable = font[self.tag] = newTable(self.tag)
mtxTable.metrics = {
'A': [674, -11],
'B': [632, 79],
'C': [710, 54],
'A': (674, -11),
'B': (632, 79),
'C': (710, 54),
}

data = mtxTable.compile(font)
Expand All @@ -129,10 +129,10 @@ def test_compile_additional_SB(self):
font = self.makeFont(numGlyphs=4, numberOfMetrics=1)
mtxTable = font[self.tag] = newTable(self.tag)
mtxTable.metrics = {
'A': [632, -11],
'B': [632, 79],
'C': [632, 54],
'D': [632, -4],
'A': (632, -11),
'B': (632, 79),
'C': (632, 54),
'D': (632, -4),
}

data = mtxTable.compile(font)
Expand All @@ -155,15 +155,15 @@ def test_compile_negative_advance(self):
def test_compile_struct_out_of_range(self):
font = self.makeFont(numGlyphs=1, numberOfMetrics=1)
mtxTable = font[self.tag] = newTable(self.tag)
mtxTable.metrics = {'A': [0xFFFF+1, -0x8001]}
mtxTable.metrics = {'A': (0xFFFF+1, -0x8001)}

with self.assertRaises(struct.error):
mtxTable.compile(font)

def test_toXML(self):
font = self.makeFont(numGlyphs=2, numberOfMetrics=2)
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(
getXML(mtxTable.toXML),
Expand All @@ -183,22 +183,22 @@ def test_fromXML(self):
mtxTable.fromXML(name, attrs, content, ttFont=None)

self.assertEqual(
mtxTable.metrics, {'A': [674, -11], 'B': [632, 79]})
mtxTable.metrics, {'A': (674, -11), 'B': (632, 79)})

def test_delitem(self):
mtxTable = newTable(self.tag)
mtxTable.metrics = {'A': [0, 0]}
mtxTable.metrics = {'A': (0, 0)}

del mtxTable['A']

self.assertTrue('A' not in mtxTable.metrics)

def test_setitem(self):
mtxTable = newTable(self.tag)
mtxTable.metrics = {'A': [674, -11], 'B': [632, 79]}
mtxTable['B'] = (0, 0) # tuple is converted to list
mtxTable.metrics = {'A': (674, -11), 'B': (632, 79)}
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__":
Expand Down

0 comments on commit 2300b9c

Please sign in to comment.