summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRasmus Andersson <rasmus@notion.se>2018-10-08 04:27:12 +0300
committerRasmus Andersson <rasmus@notion.se>2018-10-11 09:38:31 +0300
commit5194e4f4740949a702981d65d01aaf1965d47242 (patch)
tree226161e42dcaef3c7565dd55c20f676d5b54408d
parent4262086bffef542bc10cee51dd3a5f4e48850506 (diff)
downloadinter-5194e4f4740949a702981d65d01aaf1965d47242.tar.xz
fontbuild: now generating three variable fonts: complete family with two axes, italic version with weight axis and upright version with weight axis. This allows supporting browsers like MS Edge which do not correctly map italic and oblique font style properties to slnt and ital axes.
-rw-r--r--Makefile16
-rw-r--r--misc/dist/variable.txt9
-rwxr-xr-xmisc/fontbuild59
3 files changed, 79 insertions, 5 deletions
diff --git a/Makefile b/Makefile
index f6cecb4df..4c8125aec 100644
--- a/Makefile
+++ b/Makefile
@@ -44,7 +44,13 @@ all: all_const all_const_hinted all_var
all_const: all_otf all_ttf all_web
all_const_hinted: all_ttf_hinted all_web_hinted
-all_var: $(FONTDIR)/var/Inter-UI.var.woff2
+all_var: \
+ $(FONTDIR)/var/Inter-UI.var.woff2 \
+ $(FONTDIR)/var/Inter-UI-upright.var.woff2 \
+ $(FONTDIR)/var/Inter-UI-italic.var.woff2 \
+ $(FONTDIR)/var/Inter-UI.var.ttf \
+ $(FONTDIR)/var/Inter-UI-upright.var.ttf \
+ $(FONTDIR)/var/Inter-UI-italic.var.ttf
# Disabled. See https://github.com/rsms/inter/issues/75
# all_var_hinted: $(FONTDIR)/var-hinted/Inter-UI.var.ttf $(FONTDIR)/var-hinted/Inter-UI.var.woff2
@@ -79,8 +85,8 @@ build/%.woff: build/%.ttf
all_ufo_masters = $(Regular_ufo_d) $(Black_ufo_d) $(Italic_ufo_d) $(BlackItalic_ufo_d)
-$(FONTDIR)/var/Inter-UI.var.ttf: src/Inter-UI.designspace $(all_ufo_masters)
- misc/fontbuild compile-var -o $@ src/Inter-UI.designspace
+$(FONTDIR)/var/%.var.ttf: src/%.designspace $(all_ufo_masters)
+ misc/fontbuild compile-var -o $@ $<
$(FONTDIR)/const/Inter-UI-Regular.%: src/Inter-UI.designspace $(Regular_ufo_d)
misc/fontbuild compile -o $@ src/Inter-UI-Regular.ufo
@@ -135,7 +141,7 @@ $(FONTDIR)/const-hinted/%.ttf: $(FONTDIR)/const/%.ttf
# ttfautohint --fallback-stem-width=256 --no-info --composites "$<" "$@"
# make sure intermediate TTFs are not gc'd by make
-.PRECIOUS: $(FONTDIR)/const/%.ttf $(FONTDIR)/var/%.ttf
+.PRECIOUS: $(FONTDIR)/const/%.ttf $(FONTDIR)/const-hinted/%.ttf $(FONTDIR)/var/%.var.ttf
# check var
all_check_var: $(FONTDIR)/var/Inter-UI.var.ttf
@@ -235,7 +241,7 @@ docs_fonts:
cp -a $(FONTDIR)/const/*.woff \
$(FONTDIR)/const/*.woff2 \
$(FONTDIR)/const/*.otf \
- $(FONTDIR)/var/*.woff2 \
+ $(FONTDIR)/var/*.* \
docs/font-files/
.PHONY: docs docs_info docs_fonts
diff --git a/misc/dist/variable.txt b/misc/dist/variable.txt
index 78ac81974..c2a3b5cb2 100644
--- a/misc/dist/variable.txt
+++ b/misc/dist/variable.txt
@@ -1,6 +1,15 @@
Variable fonts is a new technology still undergoing development.
+The directory named "Inter UI (TTF variable)" contains three files:
+
+- Inter-UI.var.ttf -- multi-axis complete family
+- Inter-UI-italic.var.ttf -- italic-only with variable weight axis.
+- Inter-UI-upright.var.ttf-- upright-only with variable weight axis.
+
+The "Inter UI (web)" directory contains WOFF2 versions of these same
+font files.
+
Support for variable fonts is limited as of late 2018, but support
is quickly arriving to web browsers, operating systems and
design application.
diff --git a/misc/fontbuild b/misc/fontbuild
index 998739f35..d272a7aec 100755
--- a/misc/fontbuild
+++ b/misc/fontbuild
@@ -469,6 +469,47 @@ class Main(object):
font.save(ufo_path)
+ def _genSubsetDesignSpace(self, designspace, tag, filename):
+ ds = designspace
+ italic = False
+ if tag == 'italic':
+ italic = True
+ elif tag != 'upright':
+ raise Exception('unexpected tag ' + tag)
+
+ for a in ds.axes:
+ if a.tag == "slnt":
+ ds.axes.remove(a)
+ break
+
+ rmlist = []
+ hasDefault = not italic
+ for source in designspace.sources:
+ isitalic = source.name.find('italic') != -1
+ if italic != isitalic:
+ rmlist.append(source)
+ elif italic and not hasDefault:
+ source.copyLib = True
+ source.copyInfo = True
+ source.copyGroups = True
+ source.copyFeatures = True
+ hasDefault = True
+ for source in rmlist:
+ designspace.sources.remove(source)
+
+ rmlist = []
+ for instance in designspace.instances:
+ isitalic = instance.name.find('italic') != -1
+ if italic != isitalic:
+ rmlist.append(instance)
+ for instance in rmlist:
+ designspace.instances.remove(instance)
+
+ self.log("write %s" % relpath(filename, os.getcwd()))
+ ds.write(filename)
+
+
+
def cmd_glyphsync(self, argv):
argparser = argparse.ArgumentParser(
usage='%(prog)s glyphsync <glyphsfile> [options]',
@@ -557,6 +598,24 @@ class Main(object):
self.log("write %s" % relpath(designspace_file, os.getcwd()))
designspace.write(designspace_file)
+ # upright designspace
+ upright_designspace_file = pjoin(outdir, 'Inter-UI-upright.designspace')
+ p = Process(
+ target=self._genSubsetDesignSpace,
+ args=(designspace, 'upright', upright_designspace_file)
+ )
+ p.start()
+ procs.append(p)
+
+ # italic designspace
+ italic_designspace_file = pjoin(outdir, 'Inter-UI-italic.designspace')
+ p = Process(
+ target=self._genSubsetDesignSpace,
+ args=(designspace, 'italic', italic_designspace_file)
+ )
+ p.start()
+ procs.append(p)
+
for p in procs:
p.join()