tooling: fixes for variable font metadata

This commit is contained in:
Rasmus Andersson 2023-05-30 13:56:16 -07:00
parent 9ebede5a55
commit dd2f374bfd
3 changed files with 85 additions and 31 deletions

View file

@ -9,27 +9,43 @@ def remove_whitespace(s):
return WHITESPACE_RE.sub("", s)
def fixup_instances_text(designspace):
# makes the "text" (non-display) instances the default ones
def fixup_names(instance_or_source):
instance_or_source.name = instance_or_source.name.replace(' Display', '')
if instance_or_source.styleName == 'Display':
instance_or_source.styleName = 'Regular'
else:
instance_or_source.styleName = instance_or_source.styleName.replace('Display ', '')
def fixup_source(designspace, source):
fixup_names(source)
def fixup_instance(designspace, instance):
fixup_names(instance)
psFamilyName = 'Inter'
instance.postScriptFontName = psFamilyName + remove_whitespace(instance.styleName)
instance.styleMapFamilyName = instance.styleMapFamilyName.replace(' Display', '')
# remove WWSFamilyName and WWSSubfamilyName properties
del instance.lib['com.schriftgestaltung.properties']
customParameters = instance.lib['com.schriftgestaltung.customParameters']
i = len(customParameters)
while i > 0:
i -= 1
if customParameters[i][0] == 'Has WWS Names':
del customParameters[i]
def fixup_instances(designspace):
i = len(designspace.instances)
while i > 0:
i -= 1
instance = designspace.instances[i]
if instance.name.find('Inter Display') != -1:
del designspace.instances[i]
def fixup_instances_display(designspace):
# makes the display instances the default ones
i = len(designspace.instances)
while i > 0:
i -= 1
instance = designspace.instances[i]
if instance.name.find('Inter Display') != -1:
if instance.styleName == 'Display':
instance.styleName = 'Regular'
else:
instance.styleName = instance.styleName.replace('Display ', '')
fixup_instance(designspace, instance)
else:
del designspace.instances[i]
# change default opsz value
@ -39,11 +55,15 @@ def fixup_instances_display(designspace):
break
def fixup_postscript_instance_names(designspace):
# make sure there are PostScript names assigned (fontmake does not create these)
psFamilyName = remove_whitespace(designspace.instances[0].familyName)
for instance in designspace.instances:
instance.postScriptFontName = psFamilyName + remove_whitespace(instance.styleName)
def fixup_sources(designspace):
i = len(designspace.sources)
while i > 0:
i -= 1
source = designspace.sources[i]
if source.name.find('Inter Display') != -1:
fixup_source(designspace, source)
else:
del designspace.sources[i]
def main(argv):
@ -56,10 +76,8 @@ def main(argv):
designspace = DesignSpaceDocument.fromfile(args.input_designspace)
# fixup_instances_text(designspace)
fixup_instances_display(designspace)
fixup_postscript_instance_names(designspace)
fixup_instances(designspace)
fixup_sources(designspace)
designspace.write(args.output_designspace)