summaryrefslogtreecommitdiff
path: root/misc
diff options
context:
space:
mode:
authorRasmus Andersson <rasmus@notion.se>2023-05-30 23:56:16 +0300
committerRasmus Andersson <rasmus@notion.se>2023-05-30 23:56:24 +0300
commitdd2f374bfd4548268d7b9d941ac802587fcf992a (patch)
tree5265eb9e9880be0dc049a3b00e86c8f060277dd2 /misc
parent9ebede5a554ad7ad1b8961a6dc0883db7f599271 (diff)
downloadinter-dd2f374bfd4548268d7b9d941ac802587fcf992a.tar.xz
tooling: fixes for variable font metadata
Diffstat (limited to 'misc')
-rw-r--r--misc/tools/gen-var-designspace.py60
-rw-r--r--misc/tools/rename.py44
2 files changed, 79 insertions, 25 deletions
diff --git a/misc/tools/gen-var-designspace.py b/misc/tools/gen-var-designspace.py
index 7b3e4b757..7dd1e95b1 100644
--- a/misc/tools/gen-var-designspace.py
+++ b/misc/tools/gen-var-designspace.py
@@ -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
- i = len(designspace.instances)
+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
- instance = designspace.instances[i]
- if instance.name.find('Inter Display') != -1:
- del designspace.instances[i]
+ if customParameters[i][0] == 'Has WWS Names':
+ del customParameters[i]
-def fixup_instances_display(designspace):
- # makes the display instances the default ones
+def fixup_instances(designspace):
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)
diff --git a/misc/tools/rename.py b/misc/tools/rename.py
index 57e866112..d34fcc125 100644
--- a/misc/tools/rename.py
+++ b/misc/tools/rename.py
@@ -14,6 +14,7 @@ POSTSCRIPT_NAME = 6
PREFERRED_FAMILY = 16
TYPO_SUBFAMILY_NAME = 17
WWS_FAMILY = 21
+VAR_PS_NAME_PREFIX = 25
FAMILY_RELATED_IDS = set([
@@ -23,6 +24,7 @@ FAMILY_RELATED_IDS = set([
POSTSCRIPT_NAME,
PREFERRED_FAMILY,
WWS_FAMILY,
+ VAR_PS_NAME_PREFIX,
])
whitespace_re = re.compile(r'\s+')
@@ -131,7 +133,9 @@ def renameStylesGoogleFonts(font):
def setStyleName(font, newStyleName):
- newFullName = getFamilyName(font).strip() + " " + newStyleName
+ newFullName = getFamilyName(font).strip()
+ if newStyleName != 'Regular':
+ newFullName += " " + newStyleName
newFullNamePs = remove_whitespace(newFullName)
set_full_name(font, newFullName, newFullNamePs)
@@ -162,9 +166,24 @@ def setFamilyName(font, nextFamilyName):
return s, nextFamilyName
# postcript name can't contain spaces
- psPrevFamilyNames = [s.replace(" ", "") for s in prevFamilyNames]
+ psPrevFamilyNames = []
+ for s in prevFamilyNames:
+ s = s.strip()
+ if s.find(' ') == -1:
+ psPrevFamilyNames.append(s)
+ else:
+ # Foo Bar Baz -> FooBarBaz
+ psPrevFamilyNames.append(s.replace(" ", ""))
+ # # Foo Bar Baz -> FooBar-Baz
+ p = s.rfind(' ')
+ s = s[:p] + '-' + s[p+1:]
+ psPrevFamilyNames.append(s)
+
psNextFamilyName = nextFamilyName.replace(" ", "")
- for rec in font["name"].names:
+ found_VAR_PS_NAME_PREFIX = False
+ nameTable = font["name"]
+
+ for rec in nameTable.names:
name_id = rec.nameID
if name_id not in FAMILY_RELATED_IDS:
# leave uninteresting records unmodified
@@ -186,9 +205,24 @@ def setFamilyName(font, nextFamilyName):
old, new = renameRecord(rec, [prev_psname], psNextFamilyName)
else:
old, new = renameRecord(rec, prevFamilyNames, nextFamilyName)
+ elif name_id == VAR_PS_NAME_PREFIX:
+ # Variations PostScript Name Prefix.
+ # If present in a variable font, it may be used as the family prefix in the
+ # PostScript Name Generation for Variation Fonts algorithm.
+ # The character set is restricted to ASCII-range uppercase Latin letters,
+ # lowercase Latin letters, and digits.
+ found_VAR_PS_NAME_PREFIX = True
+ old, new = renameRecord(rec, prevFamilyNames, nextFamilyName)
else:
old, new = renameRecord(rec, prevFamilyNames, nextFamilyName)
- # print(" %r: '%s' -> '%s'" % (rec, old, new))
+ print(" %r: '%s' -> '%s'" % (rec, old, new))
+
+ # HACK! FIXME!
+ # add name ID 25 "Variations PostScript Name Prefix" if not found
+ if not found_VAR_PS_NAME_PREFIX and nextFamilyName.find('Variable') != -1:
+ varPSNamePrefix = remove_whitespace(nextFamilyName)
+ nameTable.setName(varPSNamePrefix, VAR_PS_NAME_PREFIX, 1, 0, 0) # mac
+ nameTable.setName(varPSNamePrefix, VAR_PS_NAME_PREFIX, 3, 1, 0x409) # windows
def main():
@@ -220,6 +254,8 @@ def main():
args.family = remove_substring(getFamilyName(font), "Display")
if not args.style:
args.style = remove_substring(getStyleName(font), "Display")
+ if args.style == '':
+ args.style = 'Regular'
editCount = 0
try: