From 821f37329e01a46645fc0fd06fd969709398e4fa Mon Sep 17 00:00:00 2001 From: Cosimo Lupo Date: Tue, 27 Aug 2024 11:28:31 +0100 Subject: [PATCH] NameRecordVisitor: include whole sequence of UI labels for character variants, not just first Fixes #3616 --- Lib/fontTools/ttLib/tables/_n_a_m_e.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/Lib/fontTools/ttLib/tables/_n_a_m_e.py b/Lib/fontTools/ttLib/tables/_n_a_m_e.py index bbb4f5364..bf45df2ed 100644 --- a/Lib/fontTools/ttLib/tables/_n_a_m_e.py +++ b/Lib/fontTools/ttLib/tables/_n_a_m_e.py @@ -1177,15 +1177,6 @@ class NameRecordVisitor(TTVisitor): ( (otTables.FeatureParamsSize, ("SubfamilyID", "SubfamilyNameID")), (otTables.FeatureParamsStylisticSet, ("UINameID",)), - ( - otTables.FeatureParamsCharacterVariants, - ( - "FeatUILabelNameID", - "FeatUITooltipTextNameID", - "SampleTextNameID", - "FirstParamUILabelNameID", - ), - ), (otTables.STAT, ("ElidedFallbackNameID",)), (otTables.AxisRecord, ("AxisNameID",)), (otTables.AxisValue, ("ValueNameID",)), @@ -1197,6 +1188,19 @@ def visit(visitor, obj, attr, value): visitor.seen.add(value) +@NameRecordVisitor.register(otTables.FeatureParamsCharacterVariants) +def visit(visitor, obj): + for attr in ("FeatUILabelNameID", "FeatUITooltipTextNameID", "SampleTextNameID"): + value = getattr(obj, attr) + visitor.seen.add(value) + # also include the sequence of UI strings for individual variants, if any + if obj.FirstParamUILabelNameID == 0 or obj.NumNamedParameters == 0: + return + last_name_id = obj.FirstParamUILabelNameID + obj.NumNamedParameters - 1 + if last_name_id >= 256 and last_namd_id <= 0x7FFF: + visitor.seen.update(range(obj.FirstParamUILabelNameID, last_name_id + 1)) + + @NameRecordVisitor.register(ttLib.getTableClass("fvar")) def visit(visitor, obj): for inst in obj.instances: