Merge pull request #3682 from ftCLI/reorder-glyphs

[ttLib.reorderGlyphs] Update CFF table charstrings and charset
This commit is contained in:
Cosimo Lupo 2024-11-06 09:59:01 +01:00 committed by GitHub
commit 18d4b17070
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 19 additions and 2 deletions

View File

@ -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
}

View File

@ -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))