Skip to content

Commit

Permalink
Merge pull request #79 from TypeNetwork/stat2
Browse files Browse the repository at this point in the history
Improve STAT table and fvar instances
m4rc1e authored Aug 19, 2020

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
2 parents 33d3afd + b610d07 commit 8fd9236
Showing 17 changed files with 135 additions and 48 deletions.
2 changes: 1 addition & 1 deletion scripts/__init__.py
Original file line number Diff line number Diff line change
@@ -62,7 +62,7 @@ def enable_bold_bits(font):


def update_font_version(font):
version_record = 'Version %s; %d' % (font['head'].fontRevision, date.today().year)
version_record = 'Version %s; %d' % (round(font['head'].fontRevision, 3), date.today().year)
font['name'].setName(version_record, 5, 3, 1, 1033)


65 changes: 65 additions & 0 deletions scripts/gen_stat.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
from fontTools.otlLib.builder import buildStatTable, _addName
from fontTools.ttLib import TTFont
import sys


AXES = [
dict(
tag="wdth",
name="Width",
ordering=0,
values=[
dict(nominalValue=75, rangeMinValue=75, rangeMaxValue=87, name="Condensed"),
dict(nominalValue=100, rangeMinValue=87, rangeMaxValue=100, name="Normal", flags=0x2),
],
),
dict(
tag="wght",
name="Weight",
ordering=1,
values=[
dict(nominalValue=100, rangeMinValue=100, rangeMaxValue=150, name="Thin"),
dict(nominalValue=200, rangeMinValue=150, rangeMaxValue=250, name="ExtraLight"),
dict(nominalValue=300, rangeMinValue=250, rangeMaxValue=350, name="Light"),
dict(nominalValue=400, rangeMinValue=350, rangeMaxValue=450, name="Regular", flags=0x2),
dict(nominalValue=500, rangeMinValue=450, rangeMaxValue=650, name="Medium"),
dict(nominalValue=700, rangeMinValue=650, rangeMaxValue=750, name="Bold"),
dict(nominalValue=800, rangeMinValue=750, rangeMaxValue=850, name="ExtraBold"),
dict(nominalValue=900, rangeMinValue=850, rangeMaxValue=900, name="Black"),
dict(value=400, name="Regular", flags=0x2, linkedValue=700), # Regular
],
),
dict(
tag="ital",
name="Italic",
ordering=2,
values=[
dict(nominalValue=0, rangeMinValue=0, rangeMaxValue=0, name="Roman", flags=0x2),
dict(nominalValue=1, rangeMinValue=0.1, rangeMaxValue=1, name="Italic"),
],
),
]

def update_fvar(ttfont):
fvar = ttfont['fvar']
nametable = ttfont['name']
family_name = nametable.getName(16, 3, 1, 1033) or nametable.getName(1, 3, 1, 1033)
family_name = family_name.toUnicode().replace(" ", "")
nametable.setName(family_name, 25, 3, 1, 1033)
for instance in fvar.instances:
instance_style = nametable.getName(instance.subfamilyNameID, 3, 1, 1033).toUnicode()
ps_name = f"{family_name}-{instance_style.replace(' ', '')}"
instance.postscriptNameID = _addName(nametable, ps_name, 256)


def main():
filepath = sys.argv[1]
tt = TTFont(filepath)
buildStatTable(tt, AXES)
update_fvar(tt)
tt.save(filepath)
print(f"Added STAT table to {filepath}")


if __name__ == "__main__":
main()
62 changes: 55 additions & 7 deletions scripts/split_slnt_vf.py
Original file line number Diff line number Diff line change
@@ -5,6 +5,8 @@
import sys
import os
from fontTools.ttLib import TTFont
from fontTools.ttLib.tables import otTables as ot
from fontTools.otlLib.builder import buildStatTable, _addName
from fontTools.varLib.instancer import (
instantiateVariableFont,
sanityCheckVariableTables
@@ -24,6 +26,12 @@ def split_slnt(ttfont, out_dir):
_update_bits(italic)
_update_nametable(italic)

_update_fvar(roman)
_update_fvar(italic)

_update_roman_stat(roman)
_update_italic_stat(italic)

roman_filename = os.path.join(
out_dir,
vf_filename(roman)
@@ -36,6 +44,50 @@ def split_slnt(ttfont, out_dir):
italic.save(italic_filename)


def _update_fvar(ttfont):
fvar = ttfont['fvar']
nametable = ttfont['name']
family_name = nametable.getName(16, 3, 1, 1033) or nametable.getName(1, 3, 1, 1033)
family_name = family_name.toUnicode()
font_style = "Italic" if "Italic" in nametable.getName(2, 3, 1, 1033).toUnicode() else "Roman"
ps_family_name = f"{family_name.replace(' ', '')}{font_style}"
nametable.setName(ps_family_name, 25, 3, 1, 1033)
for instance in fvar.instances:
instance_style = nametable.getName(instance.subfamilyNameID, 3, 1, 1033).toUnicode()
instance_style = instance_style.replace("Italic", "").strip().replace(" ", "")
if instance_style == "":
instance_style = "Regular"
ps_name = f"{ps_family_name}-{instance_style}"
instance.postscriptNameID = _addName(nametable, ps_name, 256)


def _update_roman_stat(ttfont):
stat = ttfont['STAT'].table

record = ot.AxisValue()
record.AxisIndex = 2
record.Flags = 2
record.ValueNameID = 296 # Roman
record.LinkedValue = 1
record.Value = 0
record.Format = 3

stat.AxisValueArray.AxisValue[-1] = record


def _update_italic_stat(ttfont):
stat = ttfont['STAT'].table

record = ot.AxisValue()
record.AxisIndex = 2
record.Flags = 0
record.ValueNameID = 258 # Italic
record.Value = 1.0
record.Format = 1

stat.AxisValueArray.AxisValue[-1] = record


def vf_filename(ttfont):
axes = sorted([a.axisTag for a in ttfont['fvar'].axes])
axes = ",".join(axes)
@@ -68,17 +120,13 @@ def _update_nametable(ttfont):
if not dflt_nameid:
raise ValueError("Cannot name font. Default axis locations are not represented by an instance.")
dflt_name = nametable.getName(dflt_nameid, 3, 1, 1033).toUnicode()
familyname = nametable.getName(1, 3, 1, 1033).toUnicode()

# Update subfamily name
nametable.setName(dflt_name, 2, 3, 1, 1033)
# Update unique font identifier
version = "{:.3f}".format(ttfont['head'].fontRevision)
vendor = ttfont['OS/2'].achVendID
familyname = nametable.getName(1, 3, 1, 1033).toUnicode()
unique_name = f"{version} {vendor} {familyname}-{dflt_name}"
nametable.setName(unique_name, 3, 3, 1, 1033)
# Update full font name
# Update full font name and uniqueID
full_font_name = f"{familyname} {dflt_name}"
nametable.setName(full_font_name, 3, 3, 1, 1033)
nametable.setName(full_font_name, 4, 3, 1, 1033)
nametable.setName(full_font_name, 4, 1, 0, 0)
# Postscript name
4 changes: 1 addition & 3 deletions sources/Roboto-Black.ufo/fontinfo.plist
Original file line number Diff line number Diff line change
@@ -220,8 +220,6 @@
<string></string>
<key>openTypeNameUniqueID</key>
<string>Google:Roboto Black:2016</string>
<key>openTypeNameVersion</key>
<string>Version 3.0</string>
<key>openTypeOS2CodePageRanges</key>
<array>
<integer>0</integer>
@@ -379,7 +377,7 @@
<key>versionMajor</key>
<integer>3</integer>
<key>versionMinor</key>
<integer>1</integer>
<integer>2</integer>
<key>xHeight</key>
<integer>1082</integer>
<key>year</key>
4 changes: 1 addition & 3 deletions sources/Roboto-BlackItalic.ufo/fontinfo.plist
Original file line number Diff line number Diff line change
@@ -220,8 +220,6 @@
<string></string>
<key>openTypeNameUniqueID</key>
<string>Google:Roboto Black Italic:2016</string>
<key>openTypeNameVersion</key>
<string>Version 3.0</string>
<key>openTypeOS2CodePageRanges</key>
<array>
<integer>0</integer>
@@ -381,7 +379,7 @@
<key>versionMajor</key>
<integer>3</integer>
<key>versionMinor</key>
<integer>1</integer>
<integer>2</integer>
<key>xHeight</key>
<integer>1082</integer>
<key>year</key>
4 changes: 1 addition & 3 deletions sources/Roboto-Italic.ufo/fontinfo.plist
Original file line number Diff line number Diff line change
@@ -216,8 +216,6 @@
<string></string>
<key>openTypeNameUniqueID</key>
<string>Google:Roboto Italic:2016</string>
<key>openTypeNameVersion</key>
<string>Version 3.0</string>
<key>openTypeOS2CodePageRanges</key>
<array>
<integer>0</integer>
@@ -377,7 +375,7 @@
<key>versionMajor</key>
<integer>3</integer>
<key>versionMinor</key>
<integer>1</integer>
<integer>2</integer>
<key>xHeight</key>
<integer>1082</integer>
<key>year</key>
4 changes: 1 addition & 3 deletions sources/Roboto-Regular.ufo/fontinfo.plist
Original file line number Diff line number Diff line change
@@ -216,8 +216,6 @@
<string></string>
<key>openTypeNameUniqueID</key>
<string>Google:Roboto Regular:2016</string>
<key>openTypeNameVersion</key>
<string>Version 3.0</string>
<key>openTypeOS2CodePageRanges</key>
<array>
<integer>0</integer>
@@ -375,7 +373,7 @@
<key>versionMajor</key>
<integer>3</integer>
<key>versionMinor</key>
<integer>1</integer>
<integer>2</integer>
<key>xHeight</key>
<integer>1082</integer>
<key>year</key>
4 changes: 1 addition & 3 deletions sources/Roboto-Thin.ufo/fontinfo.plist
Original file line number Diff line number Diff line change
@@ -180,8 +180,6 @@
<string></string>
<key>openTypeNameUniqueID</key>
<string>Google:Roboto Condensed Thin:2016</string>
<key>openTypeNameVersion</key>
<string>Version 3.0</string>
<key>openTypeOS2CodePageRanges</key>
<array>
<integer>0</integer>
@@ -339,7 +337,7 @@
<key>versionMajor</key>
<integer>3</integer>
<key>versionMinor</key>
<integer>1</integer>
<integer>2</integer>
<key>xHeight</key>
<integer>1082</integer>
<key>year</key>
4 changes: 1 addition & 3 deletions sources/Roboto-ThinItalic.ufo/fontinfo.plist
Original file line number Diff line number Diff line change
@@ -180,8 +180,6 @@
<string></string>
<key>openTypeNameUniqueID</key>
<string>Google:Roboto Thin Italic:2016</string>
<key>openTypeNameVersion</key>
<string>Version 3.0</string>
<key>openTypeOS2CodePageRanges</key>
<array>
<integer>0</integer>
@@ -341,7 +339,7 @@
<key>versionMajor</key>
<integer>3</integer>
<key>versionMinor</key>
<integer>1</integer>
<integer>2</integer>
<key>xHeight</key>
<integer>1082</integer>
<key>year</key>
4 changes: 1 addition & 3 deletions sources/RobotoCondensed-Bold.ufo/fontinfo.plist
Original file line number Diff line number Diff line change
@@ -216,8 +216,6 @@
<string></string>
<key>openTypeNameUniqueID</key>
<string>Google:Roboto Condensed Bold:2016</string>
<key>openTypeNameVersion</key>
<string>Version 3.0</string>
<key>openTypeOS2CodePageRanges</key>
<array>
<integer>0</integer>
@@ -375,7 +373,7 @@
<key>versionMajor</key>
<integer>3</integer>
<key>versionMinor</key>
<integer>1</integer>
<integer>2</integer>
<key>xHeight</key>
<integer>1082</integer>
<key>year</key>
4 changes: 1 addition & 3 deletions sources/RobotoCondensed-BoldItalic.ufo/fontinfo.plist
Original file line number Diff line number Diff line change
@@ -216,8 +216,6 @@
<string></string>
<key>openTypeNameUniqueID</key>
<string>Google:Roboto Condensed Bold Italic:2016</string>
<key>openTypeNameVersion</key>
<string>Version 3.0</string>
<key>openTypeOS2CodePageRanges</key>
<array>
<integer>0</integer>
@@ -377,7 +375,7 @@
<key>versionMajor</key>
<integer>3</integer>
<key>versionMinor</key>
<integer>1</integer>
<integer>2</integer>
<key>xHeight</key>
<integer>1082</integer>
<key>year</key>
4 changes: 1 addition & 3 deletions sources/RobotoCondensed-Italic.ufo/fontinfo.plist
Original file line number Diff line number Diff line change
@@ -216,8 +216,6 @@
<string></string>
<key>openTypeNameUniqueID</key>
<string>Google:Roboto Condensed Italic:2016</string>
<key>openTypeNameVersion</key>
<string>Version 3.0</string>
<key>openTypeOS2CodePageRanges</key>
<array>
<integer>0</integer>
@@ -377,7 +375,7 @@
<key>versionMajor</key>
<integer>3</integer>
<key>versionMinor</key>
<integer>1</integer>
<integer>2</integer>
<key>xHeight</key>
<integer>1082</integer>
<key>year</key>
4 changes: 1 addition & 3 deletions sources/RobotoCondensed-Light.ufo/fontinfo.plist
Original file line number Diff line number Diff line change
@@ -220,8 +220,6 @@
<string></string>
<key>openTypeNameUniqueID</key>
<string>Google:Roboto Condensed Light:2016</string>
<key>openTypeNameVersion</key>
<string>Version 3.0</string>
<key>openTypeOS2CodePageRanges</key>
<array>
<integer>0</integer>
@@ -379,7 +377,7 @@
<key>versionMajor</key>
<integer>3</integer>
<key>versionMinor</key>
<integer>1</integer>
<integer>2</integer>
<key>xHeight</key>
<integer>1082</integer>
<key>year</key>
4 changes: 1 addition & 3 deletions sources/RobotoCondensed-LightItalic.ufo/fontinfo.plist
Original file line number Diff line number Diff line change
@@ -220,8 +220,6 @@
<string></string>
<key>openTypeNameUniqueID</key>
<string>Google:Roboto Condensed Light Italic:2016</string>
<key>openTypeNameVersion</key>
<string>Version 3.0</string>
<key>openTypeOS2CodePageRanges</key>
<array>
<integer>0</integer>
@@ -381,7 +379,7 @@
<key>versionMajor</key>
<integer>3</integer>
<key>versionMinor</key>
<integer>1</integer>
<integer>2</integer>
<key>xHeight</key>
<integer>1082</integer>
<key>year</key>
4 changes: 1 addition & 3 deletions sources/RobotoCondensed-Regular.ufo/fontinfo.plist
Original file line number Diff line number Diff line change
@@ -216,8 +216,6 @@
<string></string>
<key>openTypeNameUniqueID</key>
<string>Google:Roboto Condensed Regular:2016</string>
<key>openTypeNameVersion</key>
<string>Version 3.0</string>
<key>openTypeOS2CodePageRanges</key>
<array>
<integer>0</integer>
@@ -375,7 +373,7 @@
<key>versionMajor</key>
<integer>3</integer>
<key>versionMinor</key>
<integer>1</integer>
<integer>2</integer>
<key>xHeight</key>
<integer>1082</integer>
<key>year</key>
Loading

0 comments on commit 8fd9236

Please sign in to comment.