From 4c60c5f3ba0e3584bf753f306f2ef72e75b80bab Mon Sep 17 00:00:00 2001 From: Simon Cozens Date: Mon, 13 Nov 2023 16:43:55 +0000 Subject: [PATCH] Clone variable mark anchor before building (#3330) * Copy mark anchor before OTifying * Add test for variable mark anchor --- Lib/fontTools/feaLib/builder.py | 3 +- Tests/feaLib/builder_test.py | 1 + Tests/feaLib/data/variable_mark_anchor.fea | 10 ++ Tests/feaLib/data/variable_mark_anchor.ttx | 128 +++++++++++++++++++++ 4 files changed, 141 insertions(+), 1 deletion(-) create mode 100644 Tests/feaLib/data/variable_mark_anchor.fea create mode 100644 Tests/feaLib/data/variable_mark_anchor.ttx diff --git a/Lib/fontTools/feaLib/builder.py b/Lib/fontTools/feaLib/builder.py index cfaf54d4d..36eed9514 100644 --- a/Lib/fontTools/feaLib/builder.py +++ b/Lib/fontTools/feaLib/builder.py @@ -36,6 +36,7 @@ from fontTools.varLib.builder import buildVarDevTable from fontTools.varLib.featureVars import addFeatureVariationsRaw from fontTools.varLib.models import normalizeValue, piecewiseLinearMap from collections import defaultdict +import copy import itertools from io import StringIO import logging @@ -1516,7 +1517,7 @@ class Builder(object): for mark in markClassDef.glyphs.glyphSet(): if mark not in lookupBuilder.marks: otMarkAnchor = self.makeOpenTypeAnchor( - location, markClassDef.anchor + location, copy.deepcopy(markClassDef.anchor) ) lookupBuilder.marks[mark] = (markClass.name, otMarkAnchor) else: diff --git a/Tests/feaLib/builder_test.py b/Tests/feaLib/builder_test.py index adcb058f8..6855d5410 100644 --- a/Tests/feaLib/builder_test.py +++ b/Tests/feaLib/builder_test.py @@ -81,6 +81,7 @@ class BuilderTest(unittest.TestCase): MultipleLookupsPerGlyph MultipleLookupsPerGlyph2 GSUB_6_formats GSUB_5_formats delete_glyph STAT_test STAT_test_elidedFallbackNameID variable_scalar_valuerecord variable_scalar_anchor variable_conditionset + variable_mark_anchor """.split() VARFONT_AXES = [ diff --git a/Tests/feaLib/data/variable_mark_anchor.fea b/Tests/feaLib/data/variable_mark_anchor.fea new file mode 100644 index 000000000..39ead93c6 --- /dev/null +++ b/Tests/feaLib/data/variable_mark_anchor.fea @@ -0,0 +1,10 @@ +markClass macron @MC_top; + +lookup one { + pos base a + mark @MC_top; +} one; +lookup two { + pos base a + mark @MC_top; +} two; diff --git a/Tests/feaLib/data/variable_mark_anchor.ttx b/Tests/feaLib/data/variable_mark_anchor.ttx new file mode 100644 index 000000000..962cff741 --- /dev/null +++ b/Tests/feaLib/data/variable_mark_anchor.ttx @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +