diff --git a/Lib/fontTools/varLib/__init__.py b/Lib/fontTools/varLib/__init__.py
index 733af420f..6e0050afb 100644
--- a/Lib/fontTools/varLib/__init__.py
+++ b/Lib/fontTools/varLib/__init__.py
@@ -291,8 +291,12 @@ def _add_gvar(font, masterModel, master_ttfs, tolerance=0.5, optimize=True):
gvar.reserved = 0
gvar.variations = {}
+ glyf = font['glyf']
+
for glyph in font.getGlyphOrder():
+ isComposite = glyf[glyph].isComposite()
+
allData = [_GetCoordinates(m, glyph) for m in master_ttfs]
model, allData = masterModel.getSubModel(allData)
@@ -315,13 +319,23 @@ def _add_gvar(font, masterModel, master_ttfs, tolerance=0.5, optimize=True):
endPts = control[1] if control[0] >= 1 else list(range(len(control[1])))
for i,(delta,support) in enumerate(zip(deltas[1:], supports[1:])):
- if all(abs(v) <= tolerance for v in delta.array):
+ if all(abs(v) <= tolerance for v in delta.array) and not isComposite:
continue
var = TupleVariation(support, delta)
if optimize:
delta_opt = iup_delta_optimize(delta, origCoords, endPts, tolerance=tolerance)
if None in delta_opt:
+ """In composite glyphs, there should be one 0 entry
+ to make sure the gvar entry is written to the font.
+
+ This is to work around an issue with macOS 10.14 and can be
+ removed once the behaviour of macOS is changed.
+
+ https://github.com/fonttools/fonttools/issues/1381
+ """
+ if all(d is None for d in delta_opt):
+ delta_opt = [(0, 0)] + [None] * (len(delta_opt) - 1)
# Use "optimized" version only if smaller...
var_opt = TupleVariation(support, delta_opt)
diff --git a/Tests/varLib/data/BuildGvarCompositeExplicitDelta.designspace b/Tests/varLib/data/BuildGvarCompositeExplicitDelta.designspace
new file mode 100644
index 000000000..b47227f49
--- /dev/null
+++ b/Tests/varLib/data/BuildGvarCompositeExplicitDelta.designspace
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/varLib/data/master_ttx_interpolatable_ttf/TestFamily4-Italic15.ttx b/Tests/varLib/data/master_ttx_interpolatable_ttf/TestFamily4-Italic15.ttx
new file mode 100644
index 000000000..f7aa15fc6
--- /dev/null
+++ b/Tests/varLib/data/master_ttx_interpolatable_ttf/TestFamily4-Italic15.ttx
@@ -0,0 +1,662 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Copyright 2017 by Jens Kutilek
+
+
+ Test Family 4 15
+
+
+ Italic
+
+
+ 1.000;jens;TestFamily4-Italic15
+
+
+ Test Family 4 Italic 15
+
+
+ Version 1.000
+
+
+ TestFamily4-Italic15
+
+
+ Jens Kutilek
+
+
+ Jens Kutilek after the ISO 3098 standard
+
+
+ https://www.kutilek.de/
+
+
+ https://www.kutilek.de/
+
+
+ Test Family 4
+
+
+ Italic 15
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/varLib/data/master_ttx_interpolatable_ttf/TestFamily4-Regular.ttx b/Tests/varLib/data/master_ttx_interpolatable_ttf/TestFamily4-Regular.ttx
new file mode 100644
index 000000000..2e354b0ad
--- /dev/null
+++ b/Tests/varLib/data/master_ttx_interpolatable_ttf/TestFamily4-Regular.ttx
@@ -0,0 +1,656 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Copyright 2017 by Jens Kutilek
+
+
+ Test Family 4
+
+
+ Regular
+
+
+ 1.000;jens;TestFamily4-Regular
+
+
+ Test Family 4 Regular
+
+
+ Version 1.000
+
+
+ TestFamily4-Regular
+
+
+ Jens Kutilek
+
+
+ Jens Kutilek after the ISO 3098 standard
+
+
+ https://www.kutilek.de/
+
+
+ https://www.kutilek.de/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/features.fea b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/features.fea
new file mode 100644
index 000000000..88e4c41ad
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/features.fea
@@ -0,0 +1,23 @@
+# automatic
+@Uppercase = [ N O Odieresis ];
+
+# Prefix: Languagesystems
+# automatic
+languagesystem DFLT dflt;
+languagesystem latn dflt;
+languagesystem latn NLD;
+
+
+feature cpsp {
+pos @Uppercase <25 0 50 0>;
+
+} cpsp;
+
+table GDEF {
+ # automatic
+ GlyphClassDef
+ [N O Odieresis n o odieresis], # Base
+ , # Liga
+ [dieresiscomb], # Mark
+ ;
+} GDEF;
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/fontinfo.plist b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/fontinfo.plist
new file mode 100644
index 000000000..b909a16cc
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/fontinfo.plist
@@ -0,0 +1,93 @@
+
+
+
+
+ ascender
+ 600.0
+ capHeight
+ 500.0
+ copyright
+ Copyright 2017 by Jens Kutilek
+ descender
+ -150.0
+ familyName
+ Test Family 4
+ guidelines
+
+
+ angle
+ 180.0
+ x
+ 125.0
+ y
+ 175.0
+
+
+ italicAngle
+ -15.0
+ openTypeHeadCreated
+ 2017/10/21 13:31:38
+ openTypeNameDesigner
+ Jens Kutilek after the ISO 3098 standard
+ openTypeNameDesignerURL
+ https://www.kutilek.de/
+ openTypeNameManufacturer
+ Jens Kutilek
+ openTypeNameManufacturerURL
+ https://www.kutilek.de/
+ openTypeOS2Type
+
+ 3
+
+ openTypeOS2VendorID
+ jens
+ openTypeOS2WinAscent
+ 700
+ openTypeOS2WinDescent
+ 250
+ postscriptBlueValues
+
+ -10.0
+ 0.0
+ 350.0
+ 360.0
+ 500.0
+ 510.0
+
+ postscriptFamilyBlues
+
+ postscriptFamilyOtherBlues
+
+ postscriptOtherBlues
+
+ -160.0
+ -150.0
+
+ postscriptStemSnapH
+
+ 50
+
+ postscriptStemSnapV
+
+ 50
+
+ postscriptUnderlinePosition
+ -100
+ postscriptUnderlineThickness
+ 50
+ styleMapFamilyName
+ Test Family 4 15
+ styleMapStyleName
+ italic
+ styleName
+ Italic 15
+ unitsPerEm
+ 750
+ versionMajor
+ 1
+ versionMinor
+ 0
+ xHeight
+ 350.0
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs.public.background/N_.glif b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs.public.background/N_.glif
new file mode 100644
index 000000000..ef8090349
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs.public.background/N_.glif
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs.public.background/O_.glif b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs.public.background/O_.glif
new file mode 100644
index 000000000..ac3160a60
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs.public.background/O_.glif
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs.public.background/contents.plist b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs.public.background/contents.plist
new file mode 100644
index 000000000..e7bf83561
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs.public.background/contents.plist
@@ -0,0 +1,14 @@
+
+
+
+
+ N
+ N_.glif
+ O
+ O_.glif
+ dieresiscomb
+ dieresiscomb.glif
+ o
+ o.glif
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs.public.background/dieresiscomb.glif b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs.public.background/dieresiscomb.glif
new file mode 100644
index 000000000..8dac7b72f
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs.public.background/dieresiscomb.glif
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs.public.background/o.glif b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs.public.background/o.glif
new file mode 100644
index 000000000..6a2ce9fdb
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs.public.background/o.glif
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs/N_.glif b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs/N_.glif
new file mode 100644
index 000000000..d289e0d12
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs/N_.glif
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ com.schriftgestaltung.Glyphs.lastChange
+ 2018/11/20 10:52:27
+
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs/O_.glif b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs/O_.glif
new file mode 100644
index 000000000..aafee0a95
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs/O_.glif
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ com.schriftgestaltung.Glyphs.lastChange
+ 2017/10/27 21:28:25
+
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs/O_dieresis.glif b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs/O_dieresis.glif
new file mode 100644
index 000000000..93bca95ff
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs/O_dieresis.glif
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ com.schriftgestaltung.Glyphs.lastChange
+ 2017/10/27 21:28:35
+ public.markColor
+ 0,0.67,0.91,1
+
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs/contents.plist b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs/contents.plist
new file mode 100644
index 000000000..6a3662fd3
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs/contents.plist
@@ -0,0 +1,20 @@
+
+
+
+
+ N
+ N_.glif
+ O
+ O_.glif
+ Odieresis
+ O_dieresis.glif
+ dieresiscomb
+ dieresiscomb.glif
+ n
+ n.glif
+ o
+ o.glif
+ odieresis
+ odieresis.glif
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs/dieresiscomb.glif b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs/dieresiscomb.glif
new file mode 100644
index 000000000..224df4d5b
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs/dieresiscomb.glif
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ com.schriftgestaltung.Glyphs.lastChange
+ 2018/11/20 11:01:28
+ com.schriftgestaltung.Glyphs.originalWidth
+ 300.0
+
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs/n.glif b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs/n.glif
new file mode 100644
index 000000000..1313dd47f
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs/n.glif
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ com.schriftgestaltung.Glyphs.lastChange
+ 2017/10/27 21:28:25
+
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs/o.glif b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs/o.glif
new file mode 100644
index 000000000..ac3ff7e11
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs/o.glif
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ com.schriftgestaltung.Glyphs.lastChange
+ 2018/11/20 11:01:11
+
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs/odieresis.glif b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs/odieresis.glif
new file mode 100644
index 000000000..42c39d1a5
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/glyphs/odieresis.glif
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ com.schriftgestaltung.Glyphs.lastChange
+ 2018/11/20 10:59:58
+ public.markColor
+ 0,0.67,0.91,1
+
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/groups.plist b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/groups.plist
new file mode 100644
index 000000000..f9e8ed31e
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/groups.plist
@@ -0,0 +1,34 @@
+
+
+
+
+ public.kern1.O
+
+ O
+ Odieresis
+
+ public.kern1.n
+
+ n
+
+ public.kern1.o
+
+ o
+ odieresis
+
+ public.kern2.O
+
+ O
+ Odieresis
+
+ public.kern2.n
+
+ n
+
+ public.kern2.o
+
+ o
+ odieresis
+
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/layercontents.plist b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/layercontents.plist
new file mode 100644
index 000000000..7120d0ba4
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/layercontents.plist
@@ -0,0 +1,14 @@
+
+
+
+
+
+ public.default
+ glyphs
+
+
+ public.background
+ glyphs.public.background
+
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/lib.plist b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/lib.plist
new file mode 100644
index 000000000..b9f2b9293
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/lib.plist
@@ -0,0 +1,86 @@
+
+
+
+
+ com.schriftgestaltung.appVersion
+ 1179
+ com.schriftgestaltung.customName
+ Italic 15
+ com.schriftgestaltung.customParameter.GSFont.Axes
+
+
+ Name
+ Slant
+ Tag
+ slnt
+
+
+ com.schriftgestaltung.customParameter.GSFont.DisplayStrings
+
+ o/dieresiscomb ö
+
+ com.schriftgestaltung.customParameter.GSFont.Variation Font Origin
+ EB3D7718-A203-47FB-ABD4-8B7A501887ED
+ com.schriftgestaltung.customParameter.GSFont.disablesAutomaticAlignment
+
+ com.schriftgestaltung.customParameter.GSFont.useNiceNames
+ 1
+ com.schriftgestaltung.customParameter.GSFontMaster.Link Metrics With Master
+ Regular
+ com.schriftgestaltung.customParameter.GSFontMaster.Master Name
+ Italic 15
+ com.schriftgestaltung.customParameter.GSFontMaster.customValue
+ -15.0
+ com.schriftgestaltung.customParameter.GSFontMaster.customValue1
+ 16.0
+ com.schriftgestaltung.customParameter.GSFontMaster.customValue2
+ 0.0
+ com.schriftgestaltung.customParameter.GSFontMaster.customValue3
+ 0.0
+ com.schriftgestaltung.customParameter.GSFontMaster.iconName
+
+ com.schriftgestaltung.customParameter.GSFontMaster.weightValue
+ -15.0
+ com.schriftgestaltung.customParameter.GSFontMaster.widthValue
+ 100.0
+ com.schriftgestaltung.customValue
+ -15.0
+ com.schriftgestaltung.customValue1
+ 16.0
+ com.schriftgestaltung.fontMasterOrder
+ 1
+ com.schriftgestaltung.glyphOrder
+
+ com.schriftgestaltung.keyboardIncrement
+ 1
+ com.schriftgestaltung.weight
+ Regular
+ com.schriftgestaltung.weightValue
+ -15.0
+ com.schriftgestaltung.width
+ Regular
+ com.schriftgestaltung.widthValue
+ 100.0
+ noodleExtremesAndInflections
+ 0
+ noodleRemoveOverlap
+ 1
+ noodleThickness
+ 50.0
+ public.glyphOrder
+
+ N
+ O
+ Odieresis
+ n
+ o
+ odieresis
+ dieresiscomb
+
+ public.postscriptNames
+
+ dieresiscomb
+ uni0308
+
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/metainfo.plist b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/metainfo.plist
new file mode 100644
index 000000000..7b8b34ac6
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Italic15.ufo/metainfo.plist
@@ -0,0 +1,10 @@
+
+
+
+
+ creator
+ com.github.fonttools.ufoLib
+ formatVersion
+ 3
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/features.fea b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/features.fea
new file mode 100644
index 000000000..88e4c41ad
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/features.fea
@@ -0,0 +1,23 @@
+# automatic
+@Uppercase = [ N O Odieresis ];
+
+# Prefix: Languagesystems
+# automatic
+languagesystem DFLT dflt;
+languagesystem latn dflt;
+languagesystem latn NLD;
+
+
+feature cpsp {
+pos @Uppercase <25 0 50 0>;
+
+} cpsp;
+
+table GDEF {
+ # automatic
+ GlyphClassDef
+ [N O Odieresis n o odieresis], # Base
+ , # Liga
+ [dieresiscomb], # Mark
+ ;
+} GDEF;
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/fontinfo.plist b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/fontinfo.plist
new file mode 100644
index 000000000..7ff1edb16
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/fontinfo.plist
@@ -0,0 +1,93 @@
+
+
+
+
+ ascender
+ 600.0
+ capHeight
+ 500.0
+ copyright
+ Copyright 2017 by Jens Kutilek
+ descender
+ -150.0
+ familyName
+ Test Family 4
+ guidelines
+
+
+ angle
+ 180.0
+ x
+ 125.0
+ y
+ 175.0
+
+
+ italicAngle
+ -0.0
+ openTypeHeadCreated
+ 2017/10/21 13:31:38
+ openTypeNameDesigner
+ Jens Kutilek after the ISO 3098 standard
+ openTypeNameDesignerURL
+ https://www.kutilek.de/
+ openTypeNameManufacturer
+ Jens Kutilek
+ openTypeNameManufacturerURL
+ https://www.kutilek.de/
+ openTypeOS2Type
+
+ 3
+
+ openTypeOS2VendorID
+ jens
+ openTypeOS2WinAscent
+ 700
+ openTypeOS2WinDescent
+ 250
+ postscriptBlueValues
+
+ -10.0
+ 0.0
+ 350.0
+ 360.0
+ 500.0
+ 510.0
+
+ postscriptFamilyBlues
+
+ postscriptFamilyOtherBlues
+
+ postscriptOtherBlues
+
+ -160.0
+ -150.0
+
+ postscriptStemSnapH
+
+ 50
+
+ postscriptStemSnapV
+
+ 50
+
+ postscriptUnderlinePosition
+ -100
+ postscriptUnderlineThickness
+ 50
+ styleMapFamilyName
+ Test Family 4
+ styleMapStyleName
+ regular
+ styleName
+ Regular
+ unitsPerEm
+ 750
+ versionMajor
+ 1
+ versionMinor
+ 0
+ xHeight
+ 350.0
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs.public.background/N_.glif b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs.public.background/N_.glif
new file mode 100644
index 000000000..941a558ec
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs.public.background/N_.glif
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs.public.background/O_.glif b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs.public.background/O_.glif
new file mode 100644
index 000000000..dc9a72ed2
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs.public.background/O_.glif
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs.public.background/contents.plist b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs.public.background/contents.plist
new file mode 100644
index 000000000..8382c7908
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs.public.background/contents.plist
@@ -0,0 +1,16 @@
+
+
+
+
+ N
+ N_.glif
+ O
+ O_.glif
+ dieresiscomb
+ dieresiscomb.glif
+ n
+ n.glif
+ o
+ o.glif
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs.public.background/dieresiscomb.glif b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs.public.background/dieresiscomb.glif
new file mode 100644
index 000000000..11fb86ed6
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs.public.background/dieresiscomb.glif
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs.public.background/n.glif b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs.public.background/n.glif
new file mode 100644
index 000000000..2d1a13e8a
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs.public.background/n.glif
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs.public.background/o.glif b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs.public.background/o.glif
new file mode 100644
index 000000000..2e9a61bc8
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs.public.background/o.glif
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs/N_.glif b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs/N_.glif
new file mode 100644
index 000000000..a588dac2f
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs/N_.glif
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ com.schriftgestaltung.Glyphs.lastChange
+ 2018/11/20 10:52:27
+
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs/O_.glif b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs/O_.glif
new file mode 100644
index 000000000..f3979ed55
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs/O_.glif
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ com.schriftgestaltung.Glyphs.lastChange
+ 2017/10/27 21:28:25
+
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs/O_dieresis.glif b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs/O_dieresis.glif
new file mode 100644
index 000000000..22fcd3797
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs/O_dieresis.glif
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ com.schriftgestaltung.Glyphs.lastChange
+ 2017/10/27 21:28:35
+ public.markColor
+ 0,0.67,0.91,1
+
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs/contents.plist b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs/contents.plist
new file mode 100644
index 000000000..6a3662fd3
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs/contents.plist
@@ -0,0 +1,20 @@
+
+
+
+
+ N
+ N_.glif
+ O
+ O_.glif
+ Odieresis
+ O_dieresis.glif
+ dieresiscomb
+ dieresiscomb.glif
+ n
+ n.glif
+ o
+ o.glif
+ odieresis
+ odieresis.glif
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs/dieresiscomb.glif b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs/dieresiscomb.glif
new file mode 100644
index 000000000..b3cfef519
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs/dieresiscomb.glif
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ com.schriftgestaltung.Glyphs.lastChange
+ 2018/11/20 11:01:28
+ com.schriftgestaltung.Glyphs.originalWidth
+ 300.0
+
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs/n.glif b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs/n.glif
new file mode 100644
index 000000000..221ce82cb
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs/n.glif
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ com.schriftgestaltung.Glyphs.lastChange
+ 2017/10/27 21:28:25
+
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs/o.glif b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs/o.glif
new file mode 100644
index 000000000..417e4ff8e
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs/o.glif
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ com.schriftgestaltung.Glyphs.lastChange
+ 2018/11/20 11:01:11
+
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs/odieresis.glif b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs/odieresis.glif
new file mode 100644
index 000000000..b0f2a5971
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs/odieresis.glif
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ com.schriftgestaltung.Glyphs.lastChange
+ 2018/11/20 10:59:58
+ public.markColor
+ 0,0.67,0.91,1
+
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/groups.plist b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/groups.plist
new file mode 100644
index 000000000..f9e8ed31e
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/groups.plist
@@ -0,0 +1,34 @@
+
+
+
+
+ public.kern1.O
+
+ O
+ Odieresis
+
+ public.kern1.n
+
+ n
+
+ public.kern1.o
+
+ o
+ odieresis
+
+ public.kern2.O
+
+ O
+ Odieresis
+
+ public.kern2.n
+
+ n
+
+ public.kern2.o
+
+ o
+ odieresis
+
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/kerning.plist b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/kerning.plist
new file mode 100644
index 000000000..8da68f2e7
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/kerning.plist
@@ -0,0 +1,468 @@
+
+
+
+
+ public.kern1.A
+
+ public.kern2.O
+ -5.0
+ public.kern2.T
+ -40.0
+ public.kern2.V
+ -40.0
+ public.kern2.W
+ -25.0
+ public.kern2.Y
+ -50.0
+ public.kern2.f
+ -15.0
+ public.kern2.hyphen
+ -10.0
+ public.kern2.quote
+ -80.0
+ public.kern2.w
+ -25.0
+ public.kern2.y
+ -30.0
+
+ public.kern1.B
+
+ public.kern2.quote
+ -10.0
+
+ public.kern1.C
+
+ public.kern2.O
+ -5.0
+
+ public.kern1.E
+
+ public.kern2.O
+ -5.0
+
+ public.kern1.F
+
+ public.kern2.A
+ -35.0
+ public.kern2.a
+ -25.0
+ public.kern2.o
+ -20.0
+ public.kern2.period
+ -40.0
+ public.kern2.u
+ -15.0
+
+ public.kern1.K
+
+ public.kern2.O
+ -10.0
+
+ public.kern1.L
+
+ public.kern2.O
+ -20.0
+ public.kern2.T
+ -60.0
+ public.kern2.V
+ -65.0
+ public.kern2.W
+ -50.0
+ public.kern2.Y
+ -70.0
+ public.kern2.hyphen
+ -30.0
+ public.kern2.quote
+ -130.0
+
+ public.kern1.O
+
+ public.kern2.A
+ -5.0
+ public.kern2.J
+ -15.0
+ public.kern2.T
+ -15.0
+ public.kern2.V
+ -5.0
+ public.kern2.W
+ -15.0
+ public.kern2.X
+ -15.0
+ public.kern2.Y
+ -20.0
+ public.kern2.quote
+ -5.0
+
+ public.kern1.P
+
+ public.kern2.A
+ -30.0
+ public.kern2.J
+ -80.0
+ public.kern2.period
+ -50.0
+ public.kern2.quote
+ 15.0
+
+ public.kern1.R
+
+ public.kern2.T
+ -15.0
+ public.kern2.W
+ -5.0
+ public.kern2.Y
+ -10.0
+ public.kern2.o
+ -10.0
+ public.kern2.quote
+ 10.0
+
+ public.kern1.S
+
+ public.kern2.quote
+ -10.0
+
+ public.kern1.T
+
+ public.kern2.A
+ -40.0
+ public.kern2.J
+ -50.0
+ public.kern2.O
+ -15.0
+ public.kern2.a
+ -50.0
+ public.kern2.hyphen
+ -50.0
+ public.kern2.n
+ -40.0
+ public.kern2.o
+ -50.0
+ public.kern2.period
+ -60.0
+ public.kern2.s
+ -50.0
+ public.kern2.u
+ -40.0
+ public.kern2.w
+ -40.0
+ public.kern2.y
+ -40.0
+
+ public.kern1.V
+
+ public.kern2.A
+ -40.0
+ public.kern2.O
+ -5.0
+ public.kern2.a
+ -45.0
+ public.kern2.f
+ -15.0
+ public.kern2.hyphen
+ -30.0
+ public.kern2.n
+ -30.0
+ public.kern2.o
+ -45.0
+ public.kern2.period
+ -70.0
+ public.kern2.quote
+ -10.0
+ public.kern2.s
+ -35.0
+ public.kern2.u
+ -35.0
+ public.kern2.w
+ -35.0
+ public.kern2.x
+ -40.0
+ public.kern2.y
+ -35.0
+ public.kern2.z
+ -40.0
+
+ public.kern1.W
+
+ public.kern2.A
+ -25.0
+ public.kern2.O
+ -15.0
+ public.kern2.a
+ -25.0
+ public.kern2.f
+ -15.0
+ public.kern2.hyphen
+ -20.0
+ public.kern2.n
+ -20.0
+ public.kern2.o
+ -30.0
+ public.kern2.period
+ -40.0
+ public.kern2.quote
+ -10.0
+ public.kern2.s
+ -20.0
+ public.kern2.u
+ -30.0
+ public.kern2.w
+ -25.0
+ public.kern2.x
+ -30.0
+ public.kern2.y
+ -35.0
+ public.kern2.z
+ -25.0
+
+ public.kern1.X
+
+ public.kern2.O
+ -15.0
+ public.kern2.quote
+ -10.0
+
+ public.kern1.Y
+
+ public.kern2.A
+ -50.0
+ public.kern2.O
+ -20.0
+ public.kern2.a
+ -60.0
+ public.kern2.f
+ -20.0
+ public.kern2.hyphen
+ -60.0
+ public.kern2.n
+ -40.0
+ public.kern2.o
+ -60.0
+ public.kern2.period
+ -60.0
+ public.kern2.quote
+ -5.0
+ public.kern2.s
+ -45.0
+ public.kern2.u
+ -40.0
+
+ public.kern1.Z
+
+ public.kern2.quote
+ -5.0
+
+ public.kern1.c
+
+ public.kern2.hyphen
+ -10.0
+ public.kern2.quote
+ 20.0
+
+ public.kern1.f
+
+ public.kern2.hyphen
+ -15.0
+ public.kern2.o
+ -15.0
+ public.kern2.period
+ -40.0
+ public.kern2.quote
+ 45.0
+
+ public.kern1.hyphen
+
+ public.kern2.A
+ -10.0
+ public.kern2.T
+ -50.0
+ public.kern2.V
+ -30.0
+ public.kern2.W
+ -20.0
+ public.kern2.Y
+ -60.0
+ public.kern2.f
+ -5.0
+ public.kern2.j
+ -5.0
+ public.kern2.period
+ -20.0
+ public.kern2.quote
+ -40.0
+ public.kern2.s
+ -5.0
+ public.kern2.w
+ -10.0
+ public.kern2.x
+ -25.0
+ public.kern2.y
+ -10.0
+ public.kern2.z
+ -20.0
+
+ public.kern1.k
+
+ public.kern2.hyphen
+ -5.0
+
+ public.kern1.l
+
+ public.kern2.hyphen
+ -10.0
+ public.kern2.period
+ 15.0
+ public.kern2.quote
+ -15.0
+
+ public.kern1.n
+
+ public.kern2.quote
+ -10.0
+ public.kern2.y
+ -5.0
+
+ public.kern1.o
+
+ public.kern2.period
+ -10.0
+ public.kern2.quote
+ -10.0
+ public.kern2.w
+ -8.0
+ public.kern2.y
+ -8.0
+
+ public.kern1.period
+
+ public.kern2.T
+ -60.0
+ public.kern2.V
+ -70.0
+ public.kern2.W
+ -40.0
+ public.kern2.Y
+ -60.0
+ public.kern2.f
+ -20.0
+ public.kern2.hyphen
+ -20.0
+ public.kern2.l
+ -5.0
+ public.kern2.o
+ -10.0
+ public.kern2.quote
+ -60.0
+ public.kern2.u
+ -10.0
+ public.kern2.w
+ -30.0
+ public.kern2.x
+ 10.0
+ public.kern2.y
+ -30.0
+ public.kern2.z
+ 5.0
+
+ public.kern1.quote
+
+ public.kern2.A
+ -90.0
+ public.kern2.J
+ -110.0
+ public.kern2.O
+ -10.0
+ public.kern2.T
+ 10.0
+ public.kern2.a
+ -30.0
+ public.kern2.f
+ 5.0
+ public.kern2.hyphen
+ -90.0
+ public.kern2.n
+ -10.0
+ public.kern2.o
+ -25.0
+ public.kern2.period
+ -80.0
+ public.kern2.s
+ -15.0
+ public.kern2.u
+ -5.0
+ public.kern2.z
+ -5.0
+
+ public.kern1.r
+
+ public.kern2.hyphen
+ -5.0
+ public.kern2.period
+ -35.0
+ public.kern2.quote
+ 20.0
+
+ public.kern1.s
+
+ public.kern2.hyphen
+ -10.0
+
+ public.kern1.t
+
+ public.kern2.hyphen
+ -15.0
+ public.kern2.o
+ -15.0
+ public.kern2.period
+ -40.0
+ public.kern2.quote
+ 20.0
+
+ public.kern1.u
+
+ public.kern2.quote
+ 15.0
+
+ public.kern1.w
+
+ public.kern2.hyphen
+ -10.0
+ public.kern2.o
+ -8.0
+ public.kern2.period
+ -30.0
+ public.kern2.quote
+ 15.0
+
+ public.kern1.x
+
+ public.kern2.hyphen
+ -25.0
+ public.kern2.period
+ 10.0
+ public.kern2.quote
+ 15.0
+
+ public.kern1.y
+
+ public.kern2.hyphen
+ -10.0
+ public.kern2.o
+ -8.0
+ public.kern2.period
+ -30.0
+ public.kern2.quote
+ 15.0
+
+ public.kern1.z
+
+ public.kern2.hyphen
+ -10.0
+ public.kern2.period
+ 5.0
+ public.kern2.quote
+ 20.0
+
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/layercontents.plist b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/layercontents.plist
new file mode 100644
index 000000000..7120d0ba4
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/layercontents.plist
@@ -0,0 +1,14 @@
+
+
+
+
+
+ public.default
+ glyphs
+
+
+ public.background
+ glyphs.public.background
+
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/lib.plist b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/lib.plist
new file mode 100644
index 000000000..7e5ced484
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/lib.plist
@@ -0,0 +1,80 @@
+
+
+
+
+ com.schriftgestaltung.appVersion
+ 1179
+ com.schriftgestaltung.customParameter.GSFont.Axes
+
+
+ Name
+ Slant
+ Tag
+ slnt
+
+
+ com.schriftgestaltung.customParameter.GSFont.DisplayStrings
+
+ o/dieresiscomb ö
+
+ com.schriftgestaltung.customParameter.GSFont.Variation Font Origin
+ EB3D7718-A203-47FB-ABD4-8B7A501887ED
+ com.schriftgestaltung.customParameter.GSFont.disablesAutomaticAlignment
+
+ com.schriftgestaltung.customParameter.GSFont.useNiceNames
+ 1
+ com.schriftgestaltung.customParameter.GSFontMaster.Master Name
+ Regular
+ com.schriftgestaltung.customParameter.GSFontMaster.customValue
+ 0.0
+ com.schriftgestaltung.customParameter.GSFontMaster.customValue1
+ 16.0
+ com.schriftgestaltung.customParameter.GSFontMaster.customValue2
+ 0.0
+ com.schriftgestaltung.customParameter.GSFontMaster.customValue3
+ 0.0
+ com.schriftgestaltung.customParameter.GSFontMaster.iconName
+
+ com.schriftgestaltung.customParameter.GSFontMaster.weightValue
+ 0.0
+ com.schriftgestaltung.customParameter.GSFontMaster.widthValue
+ 100.0
+ com.schriftgestaltung.customValue1
+ 16.0
+ com.schriftgestaltung.fontMasterOrder
+ 0
+ com.schriftgestaltung.glyphOrder
+
+ com.schriftgestaltung.keyboardIncrement
+ 1
+ com.schriftgestaltung.weight
+ Regular
+ com.schriftgestaltung.weightValue
+ 0.0
+ com.schriftgestaltung.width
+ Regular
+ com.schriftgestaltung.widthValue
+ 100.0
+ noodleExtremesAndInflections
+ 0
+ noodleRemoveOverlap
+ 1
+ noodleThickness
+ 50.0
+ public.glyphOrder
+
+ N
+ O
+ Odieresis
+ n
+ o
+ odieresis
+ dieresiscomb
+
+ public.postscriptNames
+
+ dieresiscomb
+ uni0308
+
+
+
diff --git a/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/metainfo.plist b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/metainfo.plist
new file mode 100644
index 000000000..7b8b34ac6
--- /dev/null
+++ b/Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/metainfo.plist
@@ -0,0 +1,10 @@
+
+
+
+
+ creator
+ com.github.fonttools.ufoLib
+ formatVersion
+ 3
+
+
diff --git a/Tests/varLib/data/test_results/BuildGvarCompositeExplicitDelta.ttx b/Tests/varLib/data/test_results/BuildGvarCompositeExplicitDelta.ttx
new file mode 100644
index 000000000..ce5b55d29
--- /dev/null
+++ b/Tests/varLib/data/test_results/BuildGvarCompositeExplicitDelta.ttx
@@ -0,0 +1,229 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/varLib/varLib_test.py b/Tests/varLib/varLib_test.py
index e92d107bd..3253dbbb3 100644
--- a/Tests/varLib/varLib_test.py
+++ b/Tests/varLib/varLib_test.py
@@ -160,7 +160,7 @@ class BuildTest(unittest.TestCase):
avar segment will not be empty but will contain the default axis value
maps: {-1.0: -1.0, 0.0: 0.0, 1.0: 1.0}.
- This is to to work around an issue with some rasterizers:
+ This is to work around an issue with some rasterizers:
https://github.com/googlei18n/fontmake/issues/295
https://github.com/fonttools/fonttools/issues/1011
"""
@@ -180,7 +180,7 @@ class BuildTest(unittest.TestCase):
resulting avar segment still contains the default axis value maps:
{-1.0: -1.0, 0.0: 0.0, 1.0: 1.0}.
- This is again to to work around an issue with some rasterizers:
+ This is again to work around an issue with some rasterizers:
https://github.com/googlei18n/fontmake/issues/295
https://github.com/fonttools/fonttools/issues/1011
"""
@@ -204,6 +204,21 @@ class BuildTest(unittest.TestCase):
save_before_dump=True,
)
+ def test_varlib_gvar_explicit_delta(self):
+ """The variable font contains a composite glyph odieresis which does not
+ need a gvar entry, because all its deltas are 0, but it must be added
+ anyway to work around an issue with macOS 10.14.
+
+ https://github.com/fonttools/fonttools/issues/1381
+ """
+ test_name = 'BuildGvarCompositeExplicitDelta'
+ self._run_varlib_build_test(
+ designspace_name=test_name,
+ font_name='TestFamily4',
+ tables=['gvar'],
+ expected_ttx_name=test_name
+ )
+
def test_varlib_build_CFF2(self):
ds_path = self.get_test_input('TestCFF2.designspace')
suffix = '.otf'