diff --git a/Lib/fontTools/ttLib/reorderGlyphs.py b/Lib/fontTools/ttLib/reorderGlyphs.py index 3221261f1..fd950ba0e 100644 --- a/Lib/fontTools/ttLib/reorderGlyphs.py +++ b/Lib/fontTools/ttLib/reorderGlyphs.py @@ -19,9 +19,7 @@ from typing import ( Deque, Iterable, List, - NamedTuple, Tuple, - Union, ) @@ -276,3 +274,11 @@ def reorderGlyphs(font: ttLib.TTFont, new_glyph_order: List[str]): reorder_key = (type(value), getattr(value, "Format", None)) for reorder in _REORDER_RULES.get(reorder_key, []): reorder.apply(font, value) + + if "CFF " in font: + cff_table = font["CFF "] + charstrings = cff_table.cff.topDictIndex[0].CharStrings.charStrings + cff_table.cff.topDictIndex[0].charset = new_glyph_order + cff_table.cff.topDictIndex[0].CharStrings.charStrings = { + k: charstrings.get(k) for k in new_glyph_order + } diff --git a/Tests/ttLib/reorderGlyphs_test.py b/Tests/ttLib/reorderGlyphs_test.py index cfda2d285..02ac2f49d 100644 --- a/Tests/ttLib/reorderGlyphs_test.py +++ b/Tests/ttLib/reorderGlyphs_test.py @@ -59,6 +59,17 @@ def test_ttfont_reorder_glyphs(): assert list(reversed(old_coverage2)) == new_coverage2 +def test_reorder_glyphs_cff(): + font_path = DATA_DIR / "TestVGID-Regular.otf" + font = TTFont(str(font_path)) + ga = font.getGlyphOrder() + ga = list(reversed(ga)) + reorderGlyphs(font, ga) + + assert list(font["CFF "].cff.topDictIndex[0].CharStrings.charStrings.keys()) == ga + assert font["CFF "].cff.topDictIndex[0].charset == ga + + def test_reorder_glyphs_bad_length(caplog): font_path = DATA_DIR / "Test-Regular.ttf" font = TTFont(str(font_path))