From 57fb47de3a41c724c3bf1051d00715e08d86141e Mon Sep 17 00:00:00 2001 From: Simon Cozens Date: Mon, 7 Aug 2023 17:12:12 +0100 Subject: [PATCH] Allow for merging of NULL anchors (#3248) * A failing test for #3247 * Fix up NULL entry/exit records on merge, fixes #3247 --- Lib/fontTools/varLib/merger.py | 9 +++++++++ Tests/varLib/merger_test.py | 6 ++++++ 2 files changed, 15 insertions(+) diff --git a/Lib/fontTools/varLib/merger.py b/Lib/fontTools/varLib/merger.py index a4db492b7..b2c34016b 100644 --- a/Lib/fontTools/varLib/merger.py +++ b/Lib/fontTools/varLib/merger.py @@ -936,6 +936,15 @@ def merge(merger, self, lst): self.EntryExitCount = len(self.EntryExitRecord) +@AligningMerger.merger(ot.EntryExitRecord) +def merge(merger, self, lst): + if all(master.EntryAnchor is None for master in lst): + self.EntryAnchor = None + if all(master.ExitAnchor is None for master in lst): + self.ExitAnchor = None + merger.mergeObjects(self, lst) + + @AligningMerger.merger(ot.Lookup) def merge(merger, self, lst): subtables = merger.lookup_subtables = [l.SubTable for l in lst] diff --git a/Tests/varLib/merger_test.py b/Tests/varLib/merger_test.py index e5ae61c60..e44d466da 100644 --- a/Tests/varLib/merger_test.py +++ b/Tests/varLib/merger_test.py @@ -1902,32 +1902,38 @@ class SparsePositioningMergerTest: ds.sources[0].font.newGlyph("a").unicode = ord("a") ds.sources[0].font.newGlyph("b").unicode = ord("b") + ds.sources[0].font.newGlyph("c").unicode = ord("c") ds.sources[ 0 ].font.features.text = """ feature curs { position cursive a ; + position cursive c ; } curs; """ ds.sources[1].font.newGlyph("a").unicode = ord("a") ds.sources[1].font.newGlyph("b").unicode = ord("b") + ds.sources[1].font.newGlyph("c").unicode = ord("c") ds.sources[ 1 ].font.features.text = """ feature curs { position cursive a ; position cursive b ; + position cursive c ; } curs; """ ds.sources[2].font.newGlyph("a").unicode = ord("a") ds.sources[2].font.newGlyph("b").unicode = ord("b") + ds.sources[2].font.newGlyph("c").unicode = ord("c") ds.sources[ 2 ].font.features.text = """ feature curs { position cursive b ; + position cursive c ; } curs; """