diff --git a/Lib/fontTools/feaLib/builder.py b/Lib/fontTools/feaLib/builder.py index 7f7250fd3..7bed9a180 100644 --- a/Lib/fontTools/feaLib/builder.py +++ b/Lib/fontTools/feaLib/builder.py @@ -159,6 +159,8 @@ class Builder(object): alternates.setdefault(glyph, set()).update(alts) single = {glyph: list(repl)[0] for glyph, repl in alternates.items() if len(repl) == 1} + # TODO: Figure out the glyph alternate ordering used by makeotf. + # https://github.com/fonttools/fonttools/issues/836 multi = {glyph: sorted(repl, key=self.font.getGlyphID) for glyph, repl in alternates.items() if len(repl) > 1} diff --git a/Lib/fontTools/ttLib/tables/otTables.py b/Lib/fontTools/ttLib/tables/otTables.py index 5bebae809..c995b744a 100644 --- a/Lib/fontTools/ttLib/tables/otTables.py +++ b/Lib/fontTools/ttLib/tables/otTables.py @@ -536,7 +536,7 @@ class AlternateSubst(FormatSwitchingBaseTable): cov.glyphs = [ item[1] for item in items] alternates = [] setList = [ item[-1] for item in items] - for set in setList: + for set in setList: alts = AlternateSet() alts.Alternate = set alternates.append(alts) @@ -553,7 +553,7 @@ class AlternateSubst(FormatSwitchingBaseTable): for glyphName, alternates in items: xmlWriter.begintag("AlternateSet", glyph=glyphName) xmlWriter.newline() - for alt in sorted(alternates): + for alt in alternates: xmlWriter.simpletag("Alternate", glyph=alt) xmlWriter.newline() xmlWriter.endtag("AlternateSet") diff --git a/Tests/mtiLib/data/mti/gsubalternate.ttx.GSUB b/Tests/mtiLib/data/mti/gsubalternate.ttx.GSUB index 80c035d3d..41843252b 100644 --- a/Tests/mtiLib/data/mti/gsubalternate.ttx.GSUB +++ b/Tests/mtiLib/data/mti/gsubalternate.ttx.GSUB @@ -9,34 +9,34 @@ - - - - - + - + + + + + - - - - - + - + + + + + - - - - - + - + + + + + @@ -47,77 +47,77 @@ - - - - - + - + + + + + - - - - - + + + + + + - - - - - - + - + + + + + - - - - - + - + + + + + - - - - - + - + + + + + - - - - - - + - + + + + + + - - - - - - + - + + + + + + diff --git a/Tests/ttLib/tables/otTables_test.py b/Tests/ttLib/tables/otTables_test.py index 30dc441ae..dc61e8cfb 100644 --- a/Tests/ttLib/tables/otTables_test.py +++ b/Tests/ttLib/tables/otTables_test.py @@ -308,13 +308,13 @@ class AlternateSubstTest(unittest.TestCase): rawTable = { "Coverage": makeCoverage(["G", "Z"]), "AlternateSet": [ - self.makeAlternateSet("G.alt1 G.alt2"), + self.makeAlternateSet("G.alt2 G.alt1"), self.makeAlternateSet("Z.fina") ] } table.postRead(rawTable, self.font) self.assertEqual(table.alternates, { - "G": ["G.alt1", "G.alt2"], + "G": ["G.alt2", "G.alt1"], "Z": ["Z.fina"] }) @@ -325,25 +325,25 @@ class AlternateSubstTest(unittest.TestCase): def test_preWrite_format1(self): table = otTables.AlternateSubst() - table.alternates = {"G": ["G.alt1", "G.alt2"], "Z": ["Z.fina"]} + table.alternates = {"G": ["G.alt2", "G.alt1"], "Z": ["Z.fina"]} rawTable = table.preWrite(self.font) self.assertEqual(table.Format, 1) self.assertEqual(rawTable["Coverage"].glyphs, ["G", "Z"]) [g, z] = rawTable["AlternateSet"] self.assertIsInstance(g, otTables.AlternateSet) - self.assertEqual(g.Alternate, ["G.alt1", "G.alt2"]) + self.assertEqual(g.Alternate, ["G.alt2", "G.alt1"]) self.assertIsInstance(z, otTables.AlternateSet) self.assertEqual(z.Alternate, ["Z.fina"]) def test_toXML2(self): writer = XMLWriter(StringIO()) table = otTables.AlternateSubst() - table.alternates = {"G": ["G.alt1", "G.alt2"], "Z": ["Z.fina"]} + table.alternates = {"G": ["G.alt2", "G.alt1"], "Z": ["Z.fina"]} table.toXML2(writer, self.font) self.assertEqual(writer.file.getvalue().splitlines()[1:], [ '', - ' ', ' ', + ' ', '', '', ' ', @@ -354,15 +354,15 @@ class AlternateSubstTest(unittest.TestCase): table = otTables.AlternateSubst() for name, attrs, content in parseXML( '' - ' ' ' ' + ' ' '' '' ' ' ''): table.fromXML(name, attrs, content, self.font) self.assertEqual(table.alternates, { - "G": ["G.alt1", "G.alt2"], + "G": ["G.alt2", "G.alt1"], "Z": ["Z.fina"] })