1
1
mirror of https://github.com/rsms/inter.git synced 2024-09-11 02:45:42 +03:00

tooling: upgrade libs, rename VF fext otf -> ttf, add STAT table patch

- upgrades 3rd party libraries used by the toolchain
- upgrades fontbuild code to adjust changes to library APIs
- renames VF font filename extensions to .ttf
- adds better STAT table patch to improve metadata on Windows
This commit is contained in:
Rasmus Andersson 2020-08-18 17:57:25 -07:00
parent cb3d2853b9
commit d76268cf8d
10 changed files with 114 additions and 164 deletions

View File

@ -46,25 +46,25 @@ web_display: all_web_display all_web_hinted_display
# variable fonts
var: all_var_text all_var_display
var_text: $(FONTDIR)/var/Inter.var.woff2 $(FONTDIR)/var/Inter.var.otf
var_display: $(FONTDIR)/var/InterDisplay.var.woff2 $(FONTDIR)/var/InterDisplay.var.otf
var_text: $(FONTDIR)/var/Inter.var.woff2 $(FONTDIR)/var/Inter.var.ttf $(FONTDIR)/var/Inter-V.var.ttf
var_display: $(FONTDIR)/var/InterDisplay.var.woff2 $(FONTDIR)/var/InterDisplay.var.ttf $(FONTDIR)/var/InterDisplay-V.var.ttf
all_var_text: \
$(FONTDIR)/var/Inter.var.otf \
$(FONTDIR)/var/Inter.var.ttf \
$(FONTDIR)/var/Inter.var.woff2 \
$(FONTDIR)/var/Inter-V.var.otf \
$(FONTDIR)/var/Inter-V.var.ttf \
$(FONTDIR)/var/Inter-V.var.woff2 \
$(FONTDIR)/var/Inter-roman.var.otf \
$(FONTDIR)/var/Inter-roman.var.ttf \
$(FONTDIR)/var/Inter-roman.var.woff2 \
$(FONTDIR)/var/Inter-italic.var.otf \
$(FONTDIR)/var/Inter-italic.var.ttf \
$(FONTDIR)/var/Inter-italic.var.woff2
all_var_display: \
$(FONTDIR)/var/InterDisplay.var.otf \
$(FONTDIR)/var/InterDisplay.var.ttf \
$(FONTDIR)/var/InterDisplay.var.woff2 \
$(FONTDIR)/var/InterDisplay-V.var.otf \
$(FONTDIR)/var/InterDisplay-V.var.ttf \
$(FONTDIR)/var/InterDisplay-V.var.woff2 \
$(FONTDIR)/var/InterDisplay-roman.var.otf \
$(FONTDIR)/var/InterDisplay-roman.var.ttf \
$(FONTDIR)/var/InterDisplay-roman.var.woff2 \
$(FONTDIR)/var/InterDisplay-italic.var.otf \
$(FONTDIR)/var/InterDisplay-italic.var.ttf \
$(FONTDIR)/var/InterDisplay-italic.var.woff2
.PHONY: all all_otf all_ttf all_text all_display
@ -72,7 +72,7 @@ all_var_display: \
.PHONY: var var_text var_display all_var_text all_var_display
# Hinted variable font disabled. See https://github.com/rsms/inter/issues/75
# all_var_hinted: $(FONTDIR)/var-hinted/Inter.var.otf $(FONTDIR)/var-hinted/Inter.var.woff2
# all_var_hinted: $(FONTDIR)/var-hinted/Inter.var.ttf $(FONTDIR)/var-hinted/Inter.var.woff2
# list make targets
# We copy the Makefile (first in MAKEFILE_LIST) and disable the include to only list
@ -100,10 +100,6 @@ export PATH := $(PWD)/build/venv/bin:$(PATH)
include build/etc/generated.make
# WOFF2 from OTF
build/%.var.woff2: build/%.var.otf
woff2_compress "$<"
# WOFF2 from TTF
build/%.woff2: build/%.ttf
woff2_compress "$<"
@ -115,25 +111,23 @@ build/%.woff: build/%.ttf
# VF OTF from UFO
$(FONTDIR)/var/Inter.var.otf: $(all_ufo_masters_text) version.txt
$(FONTDIR)/var/Inter.var.ttf: $(all_ufo_masters_text) version.txt
misc/fontbuild compile-var -o $@ $(FONTBUILD_FLAGS) build/ufo/Inter.designspace
ttx -m $@ -o $@ src/Inter-vf-stat-table-patch.ttx
$(FONTDIR)/var/Inter-V.var.otf: $(FONTDIR)/var/Inter.var.otf
$(FONTDIR)/var/Inter-V.var.ttf: $(FONTDIR)/var/Inter.var.ttf
misc/fontbuild rename --family "Inter V" -o $@ $<
$(FONTDIR)/var/Inter-%.var.otf: build/ufo/Inter-%.designspace $(all_ufo_masters_text) version.txt
$(FONTDIR)/var/Inter-%.var.ttf: build/ufo/Inter-%.designspace $(all_ufo_masters_text) version.txt
misc/fontbuild compile-var -o $@ $(FONTBUILD_FLAGS) $<
misc/tools/fix-vf-meta.py $@
$(FONTDIR)/var/InterDisplay.var.otf: $(all_ufo_masters_display) version.txt
$(FONTDIR)/var/InterDisplay.var.ttf: $(all_ufo_masters_display) version.txt
misc/fontbuild compile-var -o $@ $(FONTBUILD_FLAGS) build/ufo/InterDisplay.designspace
ttx -m $@ -o $@ src/Inter-vf-stat-table-patch.ttx
$(FONTDIR)/var/InterDisplay-V.var.otf: $(FONTDIR)/var/InterDisplay.var.otf
$(FONTDIR)/var/InterDisplay-V.var.ttf: $(FONTDIR)/var/InterDisplay.var.ttf
misc/fontbuild rename --family "Inter Display V" -o $@ $<
$(FONTDIR)/var/InterDisplay-%.var.otf: build/ufo/InterDisplay-%.designspace $(all_ufo_masters_display) version.txt
$(FONTDIR)/var/InterDisplay-%.var.ttf: build/ufo/InterDisplay-%.designspace $(all_ufo_masters_display) version.txt
misc/fontbuild compile-var -o $@ $(FONTBUILD_FLAGS) $<
misc/tools/fix-vf-meta.py $@
@ -203,7 +197,7 @@ $(FONTDIR)/const-hinted/%.ttf: $(FONTDIR)/const/%.ttf
.PRECIOUS: $(FONTDIR)/const/%.ttf
.PRECIOUS: $(FONTDIR)/const/%.otf
.PRECIOUS: $(FONTDIR)/const-hinted/%.ttf
.PRECIOUS: $(FONTDIR)/var/%.var.otf
.PRECIOUS: $(FONTDIR)/var/%.var.ttf
@ -221,9 +215,9 @@ check_text:
$(FONTDIR)/const/Inter-*.ttf \
$(FONTDIR)/const/Inter-*.otf \
$(FONTDIR)/const/Inter-*.woff2 \
$(FONTDIR)/var/Inter.var.otf \
$(FONTDIR)/var/Inter.var.ttf \
$(FONTDIR)/var/Inter.var.woff2 \
$(FONTDIR)/var/Inter-*.var.otf \
$(FONTDIR)/var/Inter-*.var.ttf \
$(FONTDIR)/var/Inter-*.var.woff2
@echo "check_text: all ok"
@ -232,9 +226,9 @@ check_display:
$(FONTDIR)/const/InterDisplay-*.ttf \
$(FONTDIR)/const/InterDisplay-*.otf \
$(FONTDIR)/const/InterDisplay-*.woff2 \
$(FONTDIR)/var/InterDisplay.var.otf \
$(FONTDIR)/var/InterDisplay.var.ttf \
$(FONTDIR)/var/InterDisplay.var.woff2 \
$(FONTDIR)/var/InterDisplay-*.var.otf \
$(FONTDIR)/var/InterDisplay-*.var.ttf \
$(FONTDIR)/var/InterDisplay-*.var.woff2
@echo "check_display: all ok"
@ -390,13 +384,13 @@ install_display_otf: all_otf_display
mkdir -p ~/'Library/Fonts/InterDisplay'
cp -a $(FONTDIR)/const/InterDisplay-*.otf ~/'Library/Fonts/InterDisplay'
install_text_var: $(FONTDIR)/var/Inter-V.var.otf
install_text_var: $(FONTDIR)/var/Inter-V.var.ttf
mkdir -p ~/'Library/Fonts/Inter'
cp -a $(FONTDIR)/var/Inter-V.var.otf ~/'Library/Fonts/Inter/Inter-V.otf'
cp -a $(FONTDIR)/var/Inter-V.var.ttf ~/'Library/Fonts/Inter/Inter-V.ttf'
install_display_var: $(FONTDIR)/var/InterDisplay-V.var.otf
install_display_var: $(FONTDIR)/var/InterDisplay-V.var.ttf
mkdir -p ~/'Library/Fonts/InterDisplay'
cp -a $(FONTDIR)/var/Inter-V.var.otf ~/'Library/Fonts/InterDisplay/InterDisplay-V.otf'
cp -a $(FONTDIR)/var/Inter-V.var.ttf ~/'Library/Fonts/InterDisplay/InterDisplay-V.ttf'
install: install_text install_display
install_otf: install_text_otf install_display_otf

View File

@ -45,7 +45,6 @@ def collapseFontStyleName(font):
setFontInfo(font, font.info.openTypeOS2WeightClass)
class Main(object):
def __init__(self):
@ -256,37 +255,25 @@ class Main(object):
if layer != defaultLayer:
delLayerNames.add(layer.name)
for layerName in delLayerNames:
del layers[layerName]
del(layers[layerName])
# process glyphs
stripGlyphs = []
glyphOrder = OrderedDict([(k,None) for k in font.lib['public.glyphOrder']])
componentRefs = font.componentReferences
for g in font:
if not g.lib.get('com.schriftgestaltung.Glyphs.Export', True):
del glyphOrder[g.name]
if g.name in glyphOrder:
del(glyphOrder[g.name])
g.unicodes = []
if len(componentRefs.get(g.name, [])) == 0:
# unused
stripGlyphs.append(g.name)
g.clearAnchors()
if 'com.schriftgestaltung.Glyphs.lastChange' in g.lib:
del g.lib['com.schriftgestaltung.Glyphs.lastChange']
del(g.lib['com.schriftgestaltung.Glyphs.lastChange'])
# update possibly modified glyphorder
font.lib['public.glyphOrder'] = list(glyphOrder)
# strip unused glyphs
for gname in stripGlyphs:
log.info(
'Strip unused and unexported glyph "%s" from %s',
gname, ufo_path
)
del font[gname]
# write UFO file
self.log("write %s" % relpath(ufo_path, os.getcwd()))
font.save(ufo_path)
font.save(ufo_path, overwrite=True, validate=False)
def _genSubsetDesignSpace(self, designspace, tag, filename):
@ -365,6 +352,27 @@ class Main(object):
))
font = glyphsLib.GSFont(glyphsfile)
# remove archive layers and backgrounds
masterLayerIDs = set()
for master in font.masters:
masterLayerIDs.add(master.id)
for glyph in font.glyphs:
for layer in list(glyph.layers): # list to accumulate iterator since we del()
# remove background images from all layers
layer.backgroundImage = None
lname = layer.name
lid = layer.layerId
if lname[0] != '_' and (lid in masterLayerIDs or lname.find('{') != -1):
# Keep only layers which are masters or bracket layers.
# Next, clear background to speed up UFO generation.
layer.background.paths = []
layer.background.components = []
layer.background.anchors = []
layer.background.hints = []
layer.background.guides = []
else:
del(glyph.layers[lid])
# generate designspace from glyphs project
designspace = glyphsLib.to_designspace(
font,
@ -385,8 +393,8 @@ class Main(object):
# TODO: Only write out-of-date UFOs
procs = []
for source in designspace.sources:
# source : fontTools.designspaceLib.SourceDescriptor
# source.font : defcon.objects.font.Font
# source : fontTools.designspaceLib.SourceDescriptor
# source.font : ufoLib2.objects.font.Font
ufo_path = pjoin(master_dir, source.filename)
# no need to also set the relative 'filename' attribute as that
# will be auto-updated on writing the designspace document
@ -415,6 +423,10 @@ class Main(object):
source.path = ufo_path
weight = int(source.location['Weight'])
# serial
# self._glyphsyncWriteUFO(source.font, weight, ufo_path)
# parallel
p = Process(
target=self._glyphsyncWriteUFO,
args=(source.font, weight, ufo_path)
@ -513,7 +525,7 @@ class Main(object):
italicAngle = font.lib.get(italicAngleKey)
if italicAngle != None:
italicAngle = float(italicAngle)
del font.lib[italicAngleKey]
del(font.lib[italicAngleKey])
font.info.italicAngle = italicAngle
# clear anchors

View File

@ -7,6 +7,7 @@ from fontTools.designspaceLib import DesignSpaceDocument
from .name import getFamilyName, setFullName
from .info import updateFontVersion
from .glyph import findGlyphDirectives, composedGlyphIsTrivial, decomposeGlyphs
from .stat import rebuildStatTable
log = logging.getLogger(__name__)
@ -81,6 +82,9 @@ class FontBuilder:
# record is still computed by fonttools, so we override it here.
setFullName(font, getFamilyName(font))
# rebuild STAT table to correct VF instance information
rebuildStatTable(font, designspace)
log.debug("writing %s", outputFilename)
font.save(outputFilename)

View File

@ -19,11 +19,8 @@ def updateFontVersion(font, dummy, isVF):
buildtag = "src"
print("warning: getGitHash() failed: %r" % buildtagErrs, file=sys.stderr)
versionMajor, versionMinor = [int(num) for num in version.split(".")]
font.info.version = version
font.info.versionMajor = versionMajor
font.info.versionMinor = versionMinor
font.info.woffMajorVersion = versionMajor
font.info.woffMinorVersion = versionMinor
font.info.year = now.year
font.info.openTypeNameVersion = "Version %d.%03d;git-%s" % (versionMajor, versionMinor, buildtag)
psFamily = re.sub(r'\s', '', font.info.familyName)

34
misc/fontbuildlib/stat.py Normal file
View File

@ -0,0 +1,34 @@
# from fontTools.designspaceLib import DesignSpaceDocument
# from fontTools.ttLib.tables import otTables as ot
# from fontTools.ttLib import ttFont
from fontTools.otlLib.builder import buildStatTable
def rebuildStatTable(font, designspace):
if not 'fvar' in font:
raise Exception('missing fvar table in font')
axes = [dict(tag=a.axisTag, name=a.axisNameID) for a in font['fvar'].axes]
# axes = []
# for a in statTable.DesignAxisRecord.Axis:
# axes.append({ 'tag': a.AxisTag, 'name': a.AxisNameID, 'ordering': a.AxisOrdering })
axisNameToTag = dict()
for axis in designspace.axes:
axisNameToTag[axis.name] = axis.tag
locations = []
for instance in designspace.instances:
location = dict()
for axisName, value in instance.location.items():
tag = axisNameToTag[axisName]
location[tag] = value
locations.append({ 'name': instance.styleName, 'location': location })
buildStatTable(font, axes, locations)
# font = ttFont.TTFont("build/fonts/var/Inter.var.ttf")
# designspace = DesignSpaceDocument.fromfile('build/ufo/inter.designspace')
# rebuildStatTable(font, designspace)
# print("write build/tmp/Inter.var-patched.ttf")
# font.save("build/tmp/Inter.var-patched.ttf")

View File

@ -24,11 +24,11 @@ if $CLEAN; then
fi
# compile multi-axis variable font
make build/fonts/var/Inter.var.otf
make build/fonts/var/Inter.var.ttf
# change file type to TTF and change style names to Google Fonts standard.
rm -rf build/googlefonts
mkdir -p build/googlefonts
misc/fontbuild rename --google-style \
build/fonts/var/Inter.var.otf \
build/fonts/var/Inter.var.ttf \
-o build/googlefonts/Inter.var.ttf

View File

@ -89,7 +89,7 @@ mkdir -p \
if $OPT_TEXT; then
# Inter Desktop
cp $FONTDIR/const/Inter-*.otf "$ZIPDIR/Inter Desktop/" &
cp $FONTDIR/var/Inter-V.var.otf "$ZIPDIR/Inter Desktop/Inter-V.otf" &
cp $FONTDIR/var/Inter-V.var.ttf "$ZIPDIR/Inter Desktop/Inter-V.ttf" &
# Inter Hinted for Windows
cp "misc/dist/about hinted fonts.txt" "$ZIPDIR/Inter Hinted for Windows/" &
@ -98,9 +98,9 @@ if $OPT_TEXT; then
cp misc/dist/inter.css "$ZIPDIR/Inter Hinted for Windows/Web/" &
# Inter Variable
cp $FONTDIR/var/Inter.var.otf "$ZIPDIR/Inter Variable/Inter.otf" &
cp $FONTDIR/var/Inter-roman.var.otf "$ZIPDIR/Inter Variable/Single axis/Inter-roman.otf" &
cp $FONTDIR/var/Inter-italic.var.otf "$ZIPDIR/Inter Variable/Single axis/Inter-italic.otf" &
cp $FONTDIR/var/Inter.var.ttf "$ZIPDIR/Inter Variable/Inter.ttf" &
cp $FONTDIR/var/Inter-roman.var.ttf "$ZIPDIR/Inter Variable/Single axis/Inter-roman.ttf" &
cp $FONTDIR/var/Inter-italic.var.ttf "$ZIPDIR/Inter Variable/Single axis/Inter-italic.ttf" &
# Inter Web
cp $FONTDIR/const/Inter-*.woff* "$ZIPDIR/Inter Web/" &
@ -113,7 +113,7 @@ fi
if $OPT_DISPLAY; then
# Inter Desktop
cp $FONTDIR/const/InterDisplay-*.otf "$ZIPDIR/Inter Desktop/" &
cp $FONTDIR/var/InterDisplay-V.var.otf "$ZIPDIR/Inter Desktop/InterDisplay-V.otf" &
cp $FONTDIR/var/InterDisplay-V.var.ttf "$ZIPDIR/Inter Desktop/InterDisplay-V.ttf" &
# Inter Hinted for Windows
cp "misc/dist/about hinted fonts.txt" "$ZIPDIR/Inter Hinted for Windows/" &
@ -122,9 +122,9 @@ if $OPT_DISPLAY; then
cp misc/dist/inter-display.css "$ZIPDIR/Inter Hinted for Windows/Web/" &
# Inter Variable
cp $FONTDIR/var/InterDisplay.var.otf "$ZIPDIR/Inter Variable/InterDisplay.otf" &
cp $FONTDIR/var/InterDisplay-roman.var.otf "$ZIPDIR/Inter Variable/Single axis/InterDisplay-roman.otf" &
cp $FONTDIR/var/InterDisplay-italic.var.otf "$ZIPDIR/Inter Variable/Single axis/InterDisplay-italic.otf" &
cp $FONTDIR/var/InterDisplay.var.ttf "$ZIPDIR/Inter Variable/InterDisplay.ttf" &
cp $FONTDIR/var/InterDisplay-roman.var.ttf "$ZIPDIR/Inter Variable/Single axis/InterDisplay-roman.ttf" &
cp $FONTDIR/var/InterDisplay-italic.var.ttf "$ZIPDIR/Inter Variable/Single axis/InterDisplay-italic.ttf" &
# Inter Web
cp $FONTDIR/const/InterDisplay-*.woff* "$ZIPDIR/Inter Web/" &

View File

@ -145,4 +145,4 @@ if __name__ == "__main__":
# Similar to:
# ttx -i -e -o ./build/tmp/var.ttx ./build/fonts/var/Inter.var.ttf
# ttx -b --no-recalc-timestamp -o ./build/tmp/var.otf ./build/tmp/var.ttx
# ttx -b --no-recalc-timestamp -o ./build/tmp/var.ttf ./build/tmp/var.ttx

View File

@ -1,9 +1,9 @@
fonttools[lxml,unicode,ufo]==4.0.2
cu2qu==1.6.6
glyphsLib==5.0.1
ufo2ft[pathops]==2.9.1
defcon[lxml]==0.6.0
skia-pathops==0.2.0.post2
fonttools[lxml,unicode,ufo]==4.13.0
cu2qu==1.6.7
glyphsLib==5.1.11
ufo2ft[pathops]==2.15.0
defcon[lxml]==0.7.2
skia-pathops==0.4.1
# only used for DesignSpaceDocumentReader in fontbuild
MutatorMath==2.1.2

View File

@ -1,91 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="4.0">
<!-- merged into font at build time -->
<STAT>
<Version value="0x00010001"/>
<!-- <DesignAxisRecordSize value="8"/>
<DesignAxisRecord>
<Axis index="0">
<AxisTag value="wght"/>
<AxisNameID value="271"/>
<AxisOrdering value="0"/>
</Axis>
<Axis index="1">
<AxisTag value="slnt"/>
<AxisNameID value="272"/>
<AxisOrdering value="1"/>
</Axis>
</DesignAxisRecord> -->
<!-- AxisValueCount=11 -->
<AxisValueArray>
<AxisValue index="0" Format="1">
<AxisIndex value="0"/>
<Flags value="0"/>
<ValueNameID value="273"/> <!-- Thin -->
<Value value="100.0"/>
</AxisValue>
<AxisValue index="1" Format="1">
<AxisIndex value="0"/>
<Flags value="0"/>
<ValueNameID value="275"/> <!-- Extra Light -->
<Value value="200.0"/>
</AxisValue>
<AxisValue index="2" Format="1">
<AxisIndex value="0"/>
<Flags value="0"/>
<ValueNameID value="277"/> <!-- Light -->
<Value value="300.0"/>
</AxisValue>
<AxisValue index="3" Format="1">
<AxisIndex value="0"/>
<Flags value="2"/>
<ValueNameID value="279"/> <!-- Regular -->
<Value value="400.0"/>
</AxisValue>
<AxisValue index="4" Format="1">
<AxisIndex value="0"/>
<Flags value="0"/>
<ValueNameID value="281"/> <!-- Medium -->
<Value value="500.0"/>
</AxisValue>
<AxisValue index="5" Format="1">
<AxisIndex value="0"/>
<Flags value="0"/>
<ValueNameID value="283"/> <!-- Semi Bold -->
<Value value="600.0"/>
</AxisValue>
<AxisValue index="6" Format="1">
<AxisIndex value="0"/>
<Flags value="0"/>
<ValueNameID value="285"/> <!-- Bold -->
<Value value="700.0"/>
</AxisValue>
<AxisValue index="7" Format="1">
<AxisIndex value="0"/>
<Flags value="0"/>
<ValueNameID value="287"/> <!-- Extra Bold -->
<Value value="800.0"/>
</AxisValue>
<AxisValue index="8" Format="1">
<AxisIndex value="0"/>
<Flags value="0"/>
<ValueNameID value="289"/> <!-- Black -->
<Value value="900.0"/>
</AxisValue>
<AxisValue index="9" Format="1">
<AxisIndex value="1"/>
<Flags value="2"/>
<ValueNameID value="279"/> <!-- Regular -->
<Value value="0.0"/>
</AxisValue>
<AxisValue index="10" Format="1">
<AxisIndex value="1"/>
<Flags value="0"/>
<ValueNameID value="280"/> <!-- Italic -->
<Value value="-10.0"/>
</AxisValue>
</AxisValueArray>
<ElidedFallbackNameID value="2"/> <!-- Regular -->
</STAT>
</ttFont>