"y_transparent_uppercase.textproto",
]:
append_AxisMessage(resource_filename("axisregistry", "data/" + axis))
-
return registry
self.weights = self.axis_reg["wght"].fallback
self.family_name = self.ttFont["name"].getBestFamilyName()
self.subfamily_name = self.ttFont["name"].getBestSubFamilyName()
-
+
def is_variable(self):
return "fvar" in self.ttFont
for a in self.ttFont["fvar"].axes:
# find name and elision
if a.axisTag in self.axis_reg:
- name = next((f.name for f in self.axis_reg[a.axisTag].fallback if f.value == a.defaultValue), None)
- elided = a.defaultValue == self.axis_reg[a.axisTag].default_value and name not in ["Regular", "Italic"]
+ name = next(
+ (
+ f.name
+ for f in self.axis_reg[a.axisTag].fallback
+ if f.value == a.defaultValue
+ ),
+ None,
+ )
+ elided = a.defaultValue == self.axis_reg[
+ a.axisTag
+ ].default_value and name not in ["Regular", "Italic"]
else:
name = None
- elided = True # since we can't find a name for it, keep it elided
-
- res[a.axisTag] = {
- "value": a.defaultValue,
- "name": name,
- "elided": elided
- }
+ elided = True # since we can't find a name for it, keep it elided
+
+ res[a.axisTag] = {"value": a.defaultValue, "name": name, "elided": elided}
return res
def build_stat(self, sibling_ttFonts=None):
seen_axes = set()
for axis, fallbacks in fallbacks_in_font.items():
seen_axes.add(axis)
- a = {
- "tag": axis,
- "name": self.axis_reg[axis].display_name,
- "values": []
- }
+ a = {"tag": axis, "name": self.axis_reg[axis].display_name, "values": []}
for fallback in fallbacks:
a["values"].append(
{
"name": fallback.name,
"value": fallback.value,
# include flags and linked values
- "flags": 0x2 if fallback.value == self.axis_reg[axis].default_value else 0x0
+ "flags": 0x2
+ if fallback.value == self.axis_reg[axis].default_value
+ else 0x0,
}
)
res.append(a)
-
+
# doesn't feel like these should come last!
if sibling_font_styles:
for axis, fallback in sibling_font_styles:
{
"name": fallback.name,
"value": fallback.value,
- "flags": 0x2 if fallback.value == self.axis_reg[axis].default_value else 0x0
+ "flags": 0x2
+ if fallback.value == self.axis_reg[axis].default_value
+ else 0x0,
}
- ]
+ ],
}
res.append(a)
buildStatTable(self.ttFont, res, macNames=False)
-
+
def _fallbacks_in_font(self):
res = defaultdict(list)
- axes_in_font = {a.axisTag: {"min": a.minValue, "max": a.maxValue} for a in self.ttFont["fvar"].axes}
+ axes_in_font = {
+ a.axisTag: {"min": a.minValue, "max": a.maxValue}
+ for a in self.ttFont["fvar"].axes
+ }
for axis in self.axis_reg:
if axis not in axes_in_font:
continue
for fallback in self.axis_reg[axis].fallback:
- if fallback.value < axes_in_font[axis]["min"] or fallback.value > axes_in_font[axis]["max"]:
+ if (
+ fallback.value < axes_in_font[axis]["min"]
+ or fallback.value > axes_in_font[axis]["max"]
+ ):
continue
res[axis].append(fallback)
return res
def _sibling_font_styles(self, sibling_ttFonts=None):
if not sibling_ttFonts:
return []
+
def name_in_axis_reg(name):
for a in self.axis_reg:
for fallback in self.axis_reg[a].fallback:
res = []
for sibling_ttFont in sibling_ttFonts:
name_table = sibling_ttFont["name"]
- tokens = name_table.getBestFamilyName().split() + name_table.getBestSubFamilyName().split()
+ tokens = (
+ name_table.getBestFamilyName().split()
+ + name_table.getBestSubFamilyName().split()
+ )
fvar_axes_in_font = [a.axisTag for a in sibling_ttFont["fvar"].axes]
return res
def build_name_table(self, family_name=None, style_name=None):
- family_name = family_name if family_name else self.name_table.getBestFamilyName()
- style_name = style_name if style_name else self.name_table.getBestSubFamilyName()
+ family_name = (
+ family_name if family_name else self.name_table.getBestFamilyName()
+ )
+ style_name = (
+ style_name if style_name else self.name_table.getBestSubFamilyName()
+ )
if self.is_variable():
return self.build_vf_name_table(family_name)
return self.build_static_name_table_v1(family_name, style_name)
-
+
def build_vf_name_table(self, family_name):
# VF name table should reflect the 0 origin of the font!
assert self.is_variable(), "Not a VF!"
print("building vf name table")
style_name = self._vf_style_name()
self.build_static_name_table(family_name, style_name)
-
+
def _vf_style_name(self):
fvar_dflts = self._fvar_dflts()
res = []
- for k,v in fvar_dflts.items():
+ for k, v in fvar_dflts.items():
if v["elided"]:
continue
res.append(v["name"])
if "wght" not in fvar_dflts:
raise NotImplementedError()
-
+
fallbacks = self._fallbacks_in_font()
wght_fallbacks = fallbacks["wght"]
is_ribbi = False
if style_name in ("Regular", "Italic", "Bold", "Bold Italic"):
is_ribbi = True
-
+
if is_ribbi:
full_name = f"{family_name} {style_name}"
ps_name = full_name.replace(" ", "")
new_style_name = "Italic" if is_italic else "Regular"
full_name = f"{new_family_name} {new_style_name}"
ps_name = full_name.replace(" ", "")
-
+
names[(1, 3, 1, 0x409)] = new_family_name
- names[(2, 3, 1, 0x409)] = new_style_name
+ names[(2, 3, 1, 0x409)] = new_style_name
names[(4, 3, 1, 0x409)] = full_name
names[(6, 3, 1, 0x409)] = ps_name
names[(16, 3, 1, 0x409)] = family_name
names[(17, 3, 1, 0x409)] = style_name
for name_id in (21, 22):
self.name_table.removeNames(nameID=name_id)
-
- names[(3, 3, 1, 0x409)] = _updateUniqueIdNameRecord(self.ttFont, {k[0]:v for k,v in names.items()}, (3, 1, 0x409))
+
+ names[(3, 3, 1, 0x409)] = _updateUniqueIdNameRecord(
+ self.ttFont, {k[0]: v for k, v in names.items()}, (3, 1, 0x409)
+ )
for k, v in names.items():
self.name_table.setName(v, *k)
for t in tokens:
if t not in self.weights + ["Italic"]:
non_weight_tokens.append(t)
-
+
family_tokens = family_name.split()
new_family_name = []
for t in family_tokens:
for t in non_weight_tokens:
new_family_name.append(t)
-
+
family_name = " ".join(new_family_name)
self.build_static_name_table(family_name, style_name)
def main():
- f = TTFont("/Users/marcfoley/Type/upstream_repos/mavenproFont/fonts/variable/MavenPro[wght].ttf")
+ f = TTFont(
+ "/Users/marcfoley/Type/upstream_repos/mavenproFont/fonts/variable/MavenPro[wght].ttf"
+ )
namer = GFNameBuilder(f)
-# namer.build_stat()
-# namer.build_name_table("Maven Pro Trial")
+ # namer.build_stat()
+ # namer.build_name_table("Maven Pro Trial")
namer.build_fvar_instances()
import pdb
+
pdb.set_trace()
if __name__ == "__main__":
- main()
\ No newline at end of file
+ main()