diff --git a/python/afdko/makeinstancesufo.py b/python/afdko/makeinstancesufo.py
index 42d664372..d144bcb46 100644
--- a/python/afdko/makeinstancesufo.py
+++ b/python/afdko/makeinstancesufo.py
@@ -1,9 +1,10 @@
# Copyright 2015 Adobe. All rights reserved.
"""
-Generates UFO font instances from a set of master UFO fonts.
-It uses the mutatorMath library. The paths to the masters and
-instances fonts are specified in the .designspace file.
+Generates UFO font instances from a set of source UFO fonts
+using either MutatorMath or the fontTools varLib library.
+The paths to the source and instance fonts are specified in
+the .designspace file.
"""
import argparse
@@ -22,7 +23,7 @@
from defcon import Font
from .otfautohint.__main__ import main as otfautohint
from ufonormalizer import normalizeUFO
-from ufoProcessor import build as ufoProcessorBuild
+from ufoProcessor.ufoOperator import UFOOperator
from afdko.checkoutlinesufo import run as checkoutlinesUFO
from afdko.fdkutils import (
@@ -336,10 +337,15 @@ def run(options):
tool_str = "fontTools.varlib" if options.useVarlib else "MutatorMath"
info_str = f"Building {newInstancesCount} {icnt_str} with {tool_str} ..."
logger.info(info_str)
- ufoProcessorBuild(documentPath=dsPath,
- outputUFOFormatVersion=options.ufo_version,
- roundGeometry=(not options.no_round),
- logger=logger, useVarlib=options.useVarlib)
+ ufoOperator = UFOOperator(pathOrObject=dsPath,
+ ufoVersion=options.ufo_version,
+ useVarlib=options.useVarlib,
+ extrapolate=True,
+ strict=options.strict,
+ debug=options.verbose > 2)
+ ufoOperator.roundGeometry = (not options.no_round)
+ ufoOperator.loadFonts()
+ ufoOperator.generateUFOs()
# Remove temporary designspace file
if (dsPath != options.dsPath) and os.path.exists(dsPath):
@@ -470,6 +476,12 @@ def get_options(args):
action='store_true',
help='do NOT round coordinates to integer'
)
+ parser.add_argument(
+ '-s',
+ '--strict',
+ action='store_true',
+ help='Pass the strict flag to ufoProcessor'
+ )
parser.add_argument(
'-i',
metavar='INDEX(ES)',
diff --git a/requirements.txt b/requirements.txt
index faa60f57b..6afb636f6 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -9,4 +9,4 @@ fontMath==0.9.3
fontTools[unicode,woff,lxml,ufo]==4.43.0
tqdm==4.66.1
ufonormalizer==0.6.1
-ufoProcessor==1.9.0
+ufoProcessor==1.13.1
diff --git a/tests/makeinstancesufo_data/expected_output/Dummy-ExtraMinus.ufo/fontinfo.plist b/tests/makeinstancesufo_data/expected_output/Dummy-ExtraMinus.ufo/fontinfo.plist
index 226852100..9184e4562 100644
--- a/tests/makeinstancesufo_data/expected_output/Dummy-ExtraMinus.ufo/fontinfo.plist
+++ b/tests/makeinstancesufo_data/expected_output/Dummy-ExtraMinus.ufo/fontinfo.plist
@@ -6,6 +6,8 @@
750
capHeight
750
+ copyright
+ Copyright 2010, 2012, 2014 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'.
descender
-250
familyName
@@ -15,6 +17,11 @@
italicAngle
0
+ openTypeNameLicense
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is available with a FAQ at: http://scripts.sil.org/OFL. This Font Software is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the SIL Open Font License for the specific language, permissions and limitations governing your use of this Font Software.
+ openTypeNameLicenseURL
+ http://scripts.sil.org/OFL
postscriptBlueFuzz
0
postscriptBlueScale
@@ -60,6 +67,8 @@
postscriptFontName
Dummy-ExtraMinus
+ postscriptForceBold
+
postscriptOtherBlues
-243
@@ -81,8 +90,14 @@
50
styleName
Extra Minus
+ trademark
+ Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.
unitsPerEm
1000
+ versionMajor
+ 2
+ versionMinor
+ 0
xHeight
500
diff --git a/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/fontinfo.plist b/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/fontinfo.plist
index 16c9ed1a4..2780d2628 100644
--- a/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/fontinfo.plist
+++ b/tests/makeinstancesufo_data/expected_output/Dummy-ExtraPlus.ufo/fontinfo.plist
@@ -6,6 +6,8 @@
750
capHeight
750
+ copyright
+ Copyright 2010, 2012, 2014 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'.
descender
-250
familyName
@@ -15,6 +17,11 @@
italicAngle
0
+ openTypeNameLicense
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is available with a FAQ at: http://scripts.sil.org/OFL. This Font Software is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the SIL Open Font License for the specific language, permissions and limitations governing your use of this Font Software.
+ openTypeNameLicenseURL
+ http://scripts.sil.org/OFL
postscriptBlueFuzz
0
postscriptBlueScale
@@ -60,6 +67,8 @@
postscriptFontName
Dummy-ExtraPlus
+ postscriptForceBold
+
postscriptOtherBlues
-165
@@ -81,8 +90,14 @@
50
styleName
Extra Plus
+ trademark
+ Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.
unitsPerEm
1000
+ versionMajor
+ 2
+ versionMinor
+ 0
xHeight
500
diff --git a/tests/makeinstancesufo_data/expected_output/anisotropic.ufo/groups.plist b/tests/makeinstancesufo_data/expected_output/anisotropic.ufo/groups.plist
index 61918a0e9..3548ad16e 100644
--- a/tests/makeinstancesufo_data/expected_output/anisotropic.ufo/groups.plist
+++ b/tests/makeinstancesufo_data/expected_output/anisotropic.ufo/groups.plist
@@ -2,6 +2,62 @@
+ @MMK_L_LAT_A
+
+ A
+ Aacute
+ Adieresis
+ Atilde
+
+ @MMK_L_LAT_Y
+
+ Y
+ Yacute
+ Ydieresis
+ Ytilde
+
+ @MMK_L_LAT_a
+
+ a
+ aacute
+ adieresis
+ atilde
+
+ @MMK_L_LAT_v
+
+ y
+ yacute
+ ydieresis
+ ytilde
+
+ @MMK_R_LAT_A
+
+ A
+ Aacute
+ Adieresis
+ Atilde
+
+ @MMK_R_LAT_Y
+
+ Y
+ Yacute
+ Ydieresis
+ Ytilde
+
+ @MMK_R_LAT_a
+
+ a
+ aacute
+ adieresis
+ atilde
+
+ @MMK_R_LAT_y
+
+ y
+ yacute
+ ydieresis
+ ytilde
+
Not a kerning group
a
diff --git a/tests/makeinstancesufo_data/expected_output/bend1.ufo/features.fea b/tests/makeinstancesufo_data/expected_output/bend1.ufo/features.fea
new file mode 100644
index 000000000..95e89ffb5
--- /dev/null
+++ b/tests/makeinstancesufo_data/expected_output/bend1.ufo/features.fea
@@ -0,0 +1,14 @@
+@lat_UC_left = [ A B C D E F G H J K L M N O P R S T U V W X Y Z ];
+
+@lat_lcnew_right = [ a o l lslash b ];
+
+@punct_left = [ hyphen parenleft quotedblbase guillemotleft quotedblleft guillemotright quotedblright asterisk quotesingle comma period slash colon semicolon question backslash bullet ];
+
+@punct_right = [ hyphen parenright guillemotleft quotedblleft guillemotright quotedblright exclam quotedbl asterisk comma period slash colon semicolon question backslash bullet ];
+
+@lat_lc_right = [ a n e c f g i j lslash o p d h s t u v w x y z ];
+
+@lat_lcnew_left = [ d dcaron e c l lslash o eth s germandbls ];
+
+@lat_lc_left = [ c dcaron eth e f longs germandbls g j k lslash o b r d n a s t v w x y z ];
+
diff --git a/tests/makeinstancesufo_data/expected_output/bend2.ufo/features.fea b/tests/makeinstancesufo_data/expected_output/bend2.ufo/features.fea
new file mode 100644
index 000000000..95e89ffb5
--- /dev/null
+++ b/tests/makeinstancesufo_data/expected_output/bend2.ufo/features.fea
@@ -0,0 +1,14 @@
+@lat_UC_left = [ A B C D E F G H J K L M N O P R S T U V W X Y Z ];
+
+@lat_lcnew_right = [ a o l lslash b ];
+
+@punct_left = [ hyphen parenleft quotedblbase guillemotleft quotedblleft guillemotright quotedblright asterisk quotesingle comma period slash colon semicolon question backslash bullet ];
+
+@punct_right = [ hyphen parenright guillemotleft quotedblleft guillemotright quotedblright exclam quotedbl asterisk comma period slash colon semicolon question backslash bullet ];
+
+@lat_lc_right = [ a n e c f g i j lslash o p d h s t u v w x y z ];
+
+@lat_lcnew_left = [ d dcaron e c l lslash o eth s germandbls ];
+
+@lat_lc_left = [ c dcaron eth e f longs germandbls g j k lslash o b r d n a s t v w x y z ];
+
diff --git a/tests/makeinstancesufo_data/expected_output/bend3.ufo/features.fea b/tests/makeinstancesufo_data/expected_output/bend3.ufo/features.fea
new file mode 100644
index 000000000..95e89ffb5
--- /dev/null
+++ b/tests/makeinstancesufo_data/expected_output/bend3.ufo/features.fea
@@ -0,0 +1,14 @@
+@lat_UC_left = [ A B C D E F G H J K L M N O P R S T U V W X Y Z ];
+
+@lat_lcnew_right = [ a o l lslash b ];
+
+@punct_left = [ hyphen parenleft quotedblbase guillemotleft quotedblleft guillemotright quotedblright asterisk quotesingle comma period slash colon semicolon question backslash bullet ];
+
+@punct_right = [ hyphen parenright guillemotleft quotedblleft guillemotright quotedblright exclam quotedbl asterisk comma period slash colon semicolon question backslash bullet ];
+
+@lat_lc_right = [ a n e c f g i j lslash o p d h s t u v w x y z ];
+
+@lat_lcnew_left = [ d dcaron e c l lslash o eth s germandbls ];
+
+@lat_lc_left = [ c dcaron eth e f longs germandbls g j k lslash o b r d n a s t v w x y z ];
+
diff --git a/tests/makeinstancesufo_data/expected_output/black.ufo/groups.plist b/tests/makeinstancesufo_data/expected_output/black.ufo/groups.plist
index 61918a0e9..3548ad16e 100644
--- a/tests/makeinstancesufo_data/expected_output/black.ufo/groups.plist
+++ b/tests/makeinstancesufo_data/expected_output/black.ufo/groups.plist
@@ -2,6 +2,62 @@
+ @MMK_L_LAT_A
+
+ A
+ Aacute
+ Adieresis
+ Atilde
+
+ @MMK_L_LAT_Y
+
+ Y
+ Yacute
+ Ydieresis
+ Ytilde
+
+ @MMK_L_LAT_a
+
+ a
+ aacute
+ adieresis
+ atilde
+
+ @MMK_L_LAT_v
+
+ y
+ yacute
+ ydieresis
+ ytilde
+
+ @MMK_R_LAT_A
+
+ A
+ Aacute
+ Adieresis
+ Atilde
+
+ @MMK_R_LAT_Y
+
+ Y
+ Yacute
+ Ydieresis
+ Ytilde
+
+ @MMK_R_LAT_a
+
+ a
+ aacute
+ adieresis
+ atilde
+
+ @MMK_R_LAT_y
+
+ y
+ yacute
+ ydieresis
+ ytilde
+
Not a kerning group
a
diff --git a/tests/makeinstancesufo_data/expected_output/bold.ufo/groups.plist b/tests/makeinstancesufo_data/expected_output/bold.ufo/groups.plist
index 61918a0e9..3548ad16e 100644
--- a/tests/makeinstancesufo_data/expected_output/bold.ufo/groups.plist
+++ b/tests/makeinstancesufo_data/expected_output/bold.ufo/groups.plist
@@ -2,6 +2,62 @@
+ @MMK_L_LAT_A
+
+ A
+ Aacute
+ Adieresis
+ Atilde
+
+ @MMK_L_LAT_Y
+
+ Y
+ Yacute
+ Ydieresis
+ Ytilde
+
+ @MMK_L_LAT_a
+
+ a
+ aacute
+ adieresis
+ atilde
+
+ @MMK_L_LAT_v
+
+ y
+ yacute
+ ydieresis
+ ytilde
+
+ @MMK_R_LAT_A
+
+ A
+ Aacute
+ Adieresis
+ Atilde
+
+ @MMK_R_LAT_Y
+
+ Y
+ Yacute
+ Ydieresis
+ Ytilde
+
+ @MMK_R_LAT_a
+
+ a
+ aacute
+ adieresis
+ atilde
+
+ @MMK_R_LAT_y
+
+ y
+ yacute
+ ydieresis
+ ytilde
+
Not a kerning group
a
diff --git a/tests/makeinstancesufo_data/expected_output/extralight.ufo/groups.plist b/tests/makeinstancesufo_data/expected_output/extralight.ufo/groups.plist
index b348c047e..2527be6b3 100644
--- a/tests/makeinstancesufo_data/expected_output/extralight.ufo/groups.plist
+++ b/tests/makeinstancesufo_data/expected_output/extralight.ufo/groups.plist
@@ -2,6 +2,62 @@
+ @MMK_L_LAT_A
+
+ A
+ Aacute
+ Adieresis
+ Atilde
+
+ @MMK_L_LAT_Y
+
+ Y
+ Yacute
+ Ydieresis
+ Ytilde
+
+ @MMK_L_LAT_a
+
+ a
+ aacute
+ adieresis
+ atilde
+
+ @MMK_L_LAT_v
+
+ y
+ yacute
+ ydieresis
+ ytilde
+
+ @MMK_R_LAT_A
+
+ A
+ Aacute
+ Adieresis
+ Atilde
+
+ @MMK_R_LAT_Y
+
+ Y
+ Yacute
+ Ydieresis
+ Ytilde
+
+ @MMK_R_LAT_a
+
+ a
+ aacute
+ adieresis
+ atilde
+
+ @MMK_R_LAT_y
+
+ y
+ yacute
+ ydieresis
+ ytilde
+
Not a kerning group
a
diff --git a/tests/makeinstancesufo_data/expected_output/features_copy1.ufo/features.fea b/tests/makeinstancesufo_data/expected_output/features_copy1.ufo/features.fea
index 83c90d56e..9ed154f99 100644
--- a/tests/makeinstancesufo_data/expected_output/features_copy1.ufo/features.fea
+++ b/tests/makeinstancesufo_data/expected_output/features_copy1.ufo/features.fea
@@ -1 +1 @@
-# Master 1
+# Master 0
diff --git a/tests/makeinstancesufo_data/expected_output/features_copy2.ufo/features.fea b/tests/makeinstancesufo_data/expected_output/features_copy2.ufo/features.fea
index 83c90d56e..9ed154f99 100644
--- a/tests/makeinstancesufo_data/expected_output/features_copy2.ufo/features.fea
+++ b/tests/makeinstancesufo_data/expected_output/features_copy2.ufo/features.fea
@@ -1 +1 @@
-# Master 1
+# Master 0
diff --git a/tests/makeinstancesufo_data/expected_output/light.ufo/groups.plist b/tests/makeinstancesufo_data/expected_output/light.ufo/groups.plist
index b348c047e..2527be6b3 100644
--- a/tests/makeinstancesufo_data/expected_output/light.ufo/groups.plist
+++ b/tests/makeinstancesufo_data/expected_output/light.ufo/groups.plist
@@ -2,6 +2,62 @@
+ @MMK_L_LAT_A
+
+ A
+ Aacute
+ Adieresis
+ Atilde
+
+ @MMK_L_LAT_Y
+
+ Y
+ Yacute
+ Ydieresis
+ Ytilde
+
+ @MMK_L_LAT_a
+
+ a
+ aacute
+ adieresis
+ atilde
+
+ @MMK_L_LAT_v
+
+ y
+ yacute
+ ydieresis
+ ytilde
+
+ @MMK_R_LAT_A
+
+ A
+ Aacute
+ Adieresis
+ Atilde
+
+ @MMK_R_LAT_Y
+
+ Y
+ Yacute
+ Ydieresis
+ Ytilde
+
+ @MMK_R_LAT_a
+
+ a
+ aacute
+ adieresis
+ atilde
+
+ @MMK_R_LAT_y
+
+ y
+ yacute
+ ydieresis
+ ytilde
+
Not a kerning group
a
diff --git a/tests/makeinstancesufo_data/expected_output/overlapping-Black.ufo/features.fea b/tests/makeinstancesufo_data/expected_output/overlapping-Black.ufo/features.fea
new file mode 100644
index 000000000..dd5c29503
--- /dev/null
+++ b/tests/makeinstancesufo_data/expected_output/overlapping-Black.ufo/features.fea
@@ -0,0 +1,11 @@
+### prefix:-1: ###
+### open prefix '' ###
+languagesystem DFLT dflt;
+### close prefix '' ###
+
+table GDEF {
+ GlyphClassDef ,# Base
+ , # Liga
+ , # Mark
+ ;
+ } GDEF;
diff --git a/tests/makeinstancesufo_data/expected_output/overlapping-Black.ufo/fontinfo.plist b/tests/makeinstancesufo_data/expected_output/overlapping-Black.ufo/fontinfo.plist
new file mode 100644
index 000000000..66cbcf01a
--- /dev/null
+++ b/tests/makeinstancesufo_data/expected_output/overlapping-Black.ufo/fontinfo.plist
@@ -0,0 +1,56 @@
+
+
+
+
+ ascender
+ 800
+ capHeight
+ 700
+ descender
+ -200
+ familyName
+ Font
+ guidelines
+
+ italicAngle
+ 0
+ openTypeHeadCreated
+ 2024/08/07 17:44:51
+ postscriptBlueValues
+
+ -16
+ 0
+ 500
+ 516
+ 700
+ 716
+ 800
+ 816
+
+ postscriptFamilyBlues
+
+ postscriptFamilyOtherBlues
+
+ postscriptFontName
+ Font-Black
+ postscriptOtherBlues
+
+ -216
+ -200
+
+ postscriptStemSnapH
+
+ postscriptStemSnapV
+
+ styleName
+ Black
+ unitsPerEm
+ 1000
+ versionMajor
+ 1
+ versionMinor
+ 0
+ xHeight
+ 500
+
+
diff --git a/tests/makeinstancesufo_data/expected_output/overlapping-Black.ufo/glyphs/_notdef.glif b/tests/makeinstancesufo_data/expected_output/overlapping-Black.ufo/glyphs/_notdef.glif
new file mode 100644
index 000000000..50ec2b579
--- /dev/null
+++ b/tests/makeinstancesufo_data/expected_output/overlapping-Black.ufo/glyphs/_notdef.glif
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/tests/makeinstancesufo_data/expected_output/overlapping-Black.ufo/glyphs/contents.plist b/tests/makeinstancesufo_data/expected_output/overlapping-Black.ufo/glyphs/contents.plist
new file mode 100644
index 000000000..374cc07e3
--- /dev/null
+++ b/tests/makeinstancesufo_data/expected_output/overlapping-Black.ufo/glyphs/contents.plist
@@ -0,0 +1,10 @@
+
+
+
+
+ .notdef
+ _notdef.glif
+ iamaglyph
+ iamaglyph.glif
+
+
diff --git a/tests/makeinstancesufo_data/expected_output/overlapping-Black.ufo/glyphs/iamaglyph.glif b/tests/makeinstancesufo_data/expected_output/overlapping-Black.ufo/glyphs/iamaglyph.glif
new file mode 100644
index 000000000..617169254
--- /dev/null
+++ b/tests/makeinstancesufo_data/expected_output/overlapping-Black.ufo/glyphs/iamaglyph.glif
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/makeinstancesufo_data/expected_output/overlapping-Black.ufo/layercontents.plist b/tests/makeinstancesufo_data/expected_output/overlapping-Black.ufo/layercontents.plist
new file mode 100644
index 000000000..b9c1a4f27
--- /dev/null
+++ b/tests/makeinstancesufo_data/expected_output/overlapping-Black.ufo/layercontents.plist
@@ -0,0 +1,10 @@
+
+
+
+
+
+ public.default
+ glyphs
+
+
+
diff --git a/tests/makeinstancesufo_data/expected_output/overlapping-Black.ufo/lib.plist b/tests/makeinstancesufo_data/expected_output/overlapping-Black.ufo/lib.plist
new file mode 100644
index 000000000..61c80ef34
--- /dev/null
+++ b/tests/makeinstancesufo_data/expected_output/overlapping-Black.ufo/lib.plist
@@ -0,0 +1,11 @@
+
+
+
+
+ public.glyphOrder
+
+ .notdef
+ iamaglyph
+
+
+
diff --git a/tests/makeinstancesufo_data/expected_output/overlapping-Black.ufo/metainfo.plist b/tests/makeinstancesufo_data/expected_output/overlapping-Black.ufo/metainfo.plist
new file mode 100644
index 000000000..7b8b34ac6
--- /dev/null
+++ b/tests/makeinstancesufo_data/expected_output/overlapping-Black.ufo/metainfo.plist
@@ -0,0 +1,10 @@
+
+
+
+
+ creator
+ com.github.fonttools.ufoLib
+ formatVersion
+ 3
+
+
diff --git a/tests/makeinstancesufo_data/expected_output/overlapping-Thin.ufo/features.fea b/tests/makeinstancesufo_data/expected_output/overlapping-Thin.ufo/features.fea
new file mode 100644
index 000000000..dd5c29503
--- /dev/null
+++ b/tests/makeinstancesufo_data/expected_output/overlapping-Thin.ufo/features.fea
@@ -0,0 +1,11 @@
+### prefix:-1: ###
+### open prefix '' ###
+languagesystem DFLT dflt;
+### close prefix '' ###
+
+table GDEF {
+ GlyphClassDef ,# Base
+ , # Liga
+ , # Mark
+ ;
+ } GDEF;
diff --git a/tests/makeinstancesufo_data/expected_output/overlapping-Thin.ufo/fontinfo.plist b/tests/makeinstancesufo_data/expected_output/overlapping-Thin.ufo/fontinfo.plist
new file mode 100644
index 000000000..dbd7d1574
--- /dev/null
+++ b/tests/makeinstancesufo_data/expected_output/overlapping-Thin.ufo/fontinfo.plist
@@ -0,0 +1,56 @@
+
+
+
+
+ ascender
+ 800
+ capHeight
+ 700
+ descender
+ -200
+ familyName
+ Font
+ guidelines
+
+ italicAngle
+ 0
+ openTypeHeadCreated
+ 2024/08/07 17:44:51
+ postscriptBlueValues
+
+ -16
+ 0
+ 500
+ 516
+ 700
+ 716
+ 800
+ 816
+
+ postscriptFamilyBlues
+
+ postscriptFamilyOtherBlues
+
+ postscriptFontName
+ Font-ExtraLight
+ postscriptOtherBlues
+
+ -216
+ -200
+
+ postscriptStemSnapH
+
+ postscriptStemSnapV
+
+ styleName
+ Thin
+ unitsPerEm
+ 1000
+ versionMajor
+ 1
+ versionMinor
+ 0
+ xHeight
+ 500
+
+
diff --git a/tests/makeinstancesufo_data/expected_output/overlapping-Thin.ufo/glyphs/_notdef.glif b/tests/makeinstancesufo_data/expected_output/overlapping-Thin.ufo/glyphs/_notdef.glif
new file mode 100644
index 000000000..50ec2b579
--- /dev/null
+++ b/tests/makeinstancesufo_data/expected_output/overlapping-Thin.ufo/glyphs/_notdef.glif
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/tests/makeinstancesufo_data/expected_output/overlapping-Thin.ufo/glyphs/contents.plist b/tests/makeinstancesufo_data/expected_output/overlapping-Thin.ufo/glyphs/contents.plist
new file mode 100644
index 000000000..374cc07e3
--- /dev/null
+++ b/tests/makeinstancesufo_data/expected_output/overlapping-Thin.ufo/glyphs/contents.plist
@@ -0,0 +1,10 @@
+
+
+
+
+ .notdef
+ _notdef.glif
+ iamaglyph
+ iamaglyph.glif
+
+
diff --git a/tests/makeinstancesufo_data/expected_output/overlapping-Thin.ufo/glyphs/iamaglyph.glif b/tests/makeinstancesufo_data/expected_output/overlapping-Thin.ufo/glyphs/iamaglyph.glif
new file mode 100644
index 000000000..b1cb2031a
--- /dev/null
+++ b/tests/makeinstancesufo_data/expected_output/overlapping-Thin.ufo/glyphs/iamaglyph.glif
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/makeinstancesufo_data/expected_output/overlapping-Thin.ufo/layercontents.plist b/tests/makeinstancesufo_data/expected_output/overlapping-Thin.ufo/layercontents.plist
new file mode 100644
index 000000000..b9c1a4f27
--- /dev/null
+++ b/tests/makeinstancesufo_data/expected_output/overlapping-Thin.ufo/layercontents.plist
@@ -0,0 +1,10 @@
+
+
+
+
+
+ public.default
+ glyphs
+
+
+
diff --git a/tests/makeinstancesufo_data/expected_output/overlapping-Thin.ufo/lib.plist b/tests/makeinstancesufo_data/expected_output/overlapping-Thin.ufo/lib.plist
new file mode 100644
index 000000000..61c80ef34
--- /dev/null
+++ b/tests/makeinstancesufo_data/expected_output/overlapping-Thin.ufo/lib.plist
@@ -0,0 +1,11 @@
+
+
+
+
+ public.glyphOrder
+
+ .notdef
+ iamaglyph
+
+
+
diff --git a/tests/makeinstancesufo_data/expected_output/overlapping-Thin.ufo/metainfo.plist b/tests/makeinstancesufo_data/expected_output/overlapping-Thin.ufo/metainfo.plist
new file mode 100644
index 000000000..7b8b34ac6
--- /dev/null
+++ b/tests/makeinstancesufo_data/expected_output/overlapping-Thin.ufo/metainfo.plist
@@ -0,0 +1,10 @@
+
+
+
+
+ creator
+ com.github.fonttools.ufoLib
+ formatVersion
+ 3
+
+
diff --git a/tests/makeinstancesufo_data/expected_output/regular.ufo/groups.plist b/tests/makeinstancesufo_data/expected_output/regular.ufo/groups.plist
index b348c047e..2527be6b3 100644
--- a/tests/makeinstancesufo_data/expected_output/regular.ufo/groups.plist
+++ b/tests/makeinstancesufo_data/expected_output/regular.ufo/groups.plist
@@ -2,6 +2,62 @@
+ @MMK_L_LAT_A
+
+ A
+ Aacute
+ Adieresis
+ Atilde
+
+ @MMK_L_LAT_Y
+
+ Y
+ Yacute
+ Ydieresis
+ Ytilde
+
+ @MMK_L_LAT_a
+
+ a
+ aacute
+ adieresis
+ atilde
+
+ @MMK_L_LAT_v
+
+ y
+ yacute
+ ydieresis
+ ytilde
+
+ @MMK_R_LAT_A
+
+ A
+ Aacute
+ Adieresis
+ Atilde
+
+ @MMK_R_LAT_Y
+
+ Y
+ Yacute
+ Ydieresis
+ Ytilde
+
+ @MMK_R_LAT_a
+
+ a
+ aacute
+ adieresis
+ atilde
+
+ @MMK_R_LAT_y
+
+ y
+ yacute
+ ydieresis
+ ytilde
+
Not a kerning group
a
diff --git a/tests/makeinstancesufo_data/expected_output/regular1.ufo/groups.plist b/tests/makeinstancesufo_data/expected_output/regular1.ufo/groups.plist
index 61918a0e9..3548ad16e 100644
--- a/tests/makeinstancesufo_data/expected_output/regular1.ufo/groups.plist
+++ b/tests/makeinstancesufo_data/expected_output/regular1.ufo/groups.plist
@@ -2,6 +2,62 @@
+ @MMK_L_LAT_A
+
+ A
+ Aacute
+ Adieresis
+ Atilde
+
+ @MMK_L_LAT_Y
+
+ Y
+ Yacute
+ Ydieresis
+ Ytilde
+
+ @MMK_L_LAT_a
+
+ a
+ aacute
+ adieresis
+ atilde
+
+ @MMK_L_LAT_v
+
+ y
+ yacute
+ ydieresis
+ ytilde
+
+ @MMK_R_LAT_A
+
+ A
+ Aacute
+ Adieresis
+ Atilde
+
+ @MMK_R_LAT_Y
+
+ Y
+ Yacute
+ Ydieresis
+ Ytilde
+
+ @MMK_R_LAT_a
+
+ a
+ aacute
+ adieresis
+ atilde
+
+ @MMK_R_LAT_y
+
+ y
+ yacute
+ ydieresis
+ ytilde
+
Not a kerning group
a
diff --git a/tests/makeinstancesufo_data/expected_output/semibold.ufo/groups.plist b/tests/makeinstancesufo_data/expected_output/semibold.ufo/groups.plist
index b348c047e..2527be6b3 100644
--- a/tests/makeinstancesufo_data/expected_output/semibold.ufo/groups.plist
+++ b/tests/makeinstancesufo_data/expected_output/semibold.ufo/groups.plist
@@ -2,6 +2,62 @@
+ @MMK_L_LAT_A
+
+ A
+ Aacute
+ Adieresis
+ Atilde
+
+ @MMK_L_LAT_Y
+
+ Y
+ Yacute
+ Ydieresis
+ Ytilde
+
+ @MMK_L_LAT_a
+
+ a
+ aacute
+ adieresis
+ atilde
+
+ @MMK_L_LAT_v
+
+ y
+ yacute
+ ydieresis
+ ytilde
+
+ @MMK_R_LAT_A
+
+ A
+ Aacute
+ Adieresis
+ Atilde
+
+ @MMK_R_LAT_Y
+
+ Y
+ Yacute
+ Ydieresis
+ Ytilde
+
+ @MMK_R_LAT_a
+
+ a
+ aacute
+ adieresis
+ atilde
+
+ @MMK_R_LAT_y
+
+ y
+ yacute
+ ydieresis
+ ytilde
+
Not a kerning group
a
diff --git a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/fontinfo.plist b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/fontinfo.plist
index 6bfc12612..dd8363e58 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/fontinfo.plist
+++ b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/fontinfo.plist
@@ -12,6 +12,9 @@
-239
familyName
Source Serif Pro
+ guidelines
+
+
italicAngle
0
openTypeHheaAscender
diff --git a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/A_.glif b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/A_.glif
index 418707211..1b8c38d86 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/A_.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/A_.glif
@@ -1,5 +1,5 @@
-
+
@@ -35,14 +35,8 @@
-
-
-
-
-
-
-
-
-
+
+
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/A_acute.glif b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/A_acute.glif
index 13e7c81aa..7052001c3 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/A_acute.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/A_acute.glif
@@ -1,5 +1,5 @@
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/A_dieresis.glif b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/A_dieresis.glif
index 8473b218d..e79c0b5e7 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/A_dieresis.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/A_dieresis.glif
@@ -1,5 +1,5 @@
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/A_tilde.glif b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/A_tilde.glif
index 919af4ab9..2771b7328 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/A_tilde.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/A_tilde.glif
@@ -1,5 +1,5 @@
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/Y_.glif b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/Y_.glif
index 6913eae68..11dbd3c62 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/Y_.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/Y_.glif
@@ -1,5 +1,5 @@
-
+
@@ -47,11 +47,7 @@
-
-
-
-
-
-
+
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/Y_acute.glif b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/Y_acute.glif
index 774a44d02..63bfa65a9 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/Y_acute.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/Y_acute.glif
@@ -1,5 +1,5 @@
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/Y_dieresis.glif b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/Y_dieresis.glif
index 14b96718c..ee6cde80f 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/Y_dieresis.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/Y_dieresis.glif
@@ -1,5 +1,5 @@
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/Y_tilde.glif b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/Y_tilde.glif
index c059d610d..ef5de6301 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/Y_tilde.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/Y_tilde.glif
@@ -1,5 +1,5 @@
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/a.glif b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/a.glif
index c2b774e62..902146aab 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/a.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/a.glif
@@ -1,5 +1,5 @@
-
+
@@ -70,14 +70,8 @@
-
-
-
-
-
-
-
-
-
+
+
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/aacute.glif b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/aacute.glif
index 87e704d30..5fb6d9a6f 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/aacute.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/aacute.glif
@@ -1,5 +1,5 @@
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/acutecmb.cap.glif b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/acutecmb.cap.glif
index 05433b6bc..c1a3d3a07 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/acutecmb.cap.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/acutecmb.cap.glif
@@ -1,5 +1,5 @@
-
+
@@ -19,8 +19,6 @@
-
-
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/acutecmb.glif b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/acutecmb.glif
index 3f1a7dba3..39b838b9c 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/acutecmb.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/acutecmb.glif
@@ -1,5 +1,5 @@
-
+
@@ -20,8 +20,6 @@
-
-
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/adieresis.glif b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/adieresis.glif
index 84a59469f..e11a7b10f 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/adieresis.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/adieresis.glif
@@ -1,5 +1,5 @@
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/atilde.glif b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/atilde.glif
index 18b0b00ea..227256e00 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/atilde.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/atilde.glif
@@ -1,5 +1,5 @@
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/dieresiscmb.cap.glif b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/dieresiscmb.cap.glif
index cb7618f51..c03d333de 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/dieresiscmb.cap.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/dieresiscmb.cap.glif
@@ -1,5 +1,5 @@
-
+
@@ -29,8 +29,6 @@
-
-
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/dieresiscmb.glif b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/dieresiscmb.glif
index c27abdc28..bea0714e4 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/dieresiscmb.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/dieresiscmb.glif
@@ -1,5 +1,5 @@
-
+
@@ -30,11 +30,7 @@
-
-
-
-
-
-
+
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/tildecmb.cap.glif b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/tildecmb.cap.glif
index b935e133b..379a687bf 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/tildecmb.cap.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/tildecmb.cap.glif
@@ -1,5 +1,5 @@
-
+
@@ -29,8 +29,6 @@
-
-
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/tildecmb.glif b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/tildecmb.glif
index d37fb6146..a0277624c 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/tildecmb.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/tildecmb.glif
@@ -1,5 +1,5 @@
-
+
@@ -30,8 +30,6 @@
-
-
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/y.glif b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/y.glif
index ff2b42182..457ccc624 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/y.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/y.glif
@@ -1,5 +1,5 @@
-
+
@@ -49,11 +49,7 @@
-
-
-
-
-
-
+
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/yacute.glif b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/yacute.glif
index 826e16a22..b8846bea3 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/yacute.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/yacute.glif
@@ -1,5 +1,5 @@
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/ydieresis.glif b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/ydieresis.glif
index d0b302786..dcb0c3a75 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/ydieresis.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/ydieresis.glif
@@ -1,5 +1,5 @@
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/ytilde.glif b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/ytilde.glif
index cb03f22d9..2d76a9867 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/ytilde.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/glyphs/ytilde.glif
@@ -1,5 +1,5 @@
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/groups.plist b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/groups.plist
index dcc8184b8..2527be6b3 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/groups.plist
+++ b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/groups.plist
@@ -66,5 +66,61 @@
d
e
+ public.kern1.LAT_A
+
+ A
+ Aacute
+ Adieresis
+ Atilde
+
+ public.kern1.LAT_Y
+
+ Y
+ Yacute
+ Ydieresis
+ Ytilde
+
+ public.kern1.LAT_a
+
+ a
+ aacute
+ adieresis
+ atilde
+
+ public.kern1.LAT_v
+
+ y
+ yacute
+ ydieresis
+ ytilde
+
+ public.kern2.LAT_A
+
+ A
+ Aacute
+ Adieresis
+ Atilde
+
+ public.kern2.LAT_Y
+
+ Y
+ Yacute
+ Ydieresis
+ Ytilde
+
+ public.kern2.LAT_a
+
+ a
+ aacute
+ adieresis
+ atilde
+
+ public.kern2.LAT_y
+
+ y
+ yacute
+ ydieresis
+ ytilde
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/kerning.plist b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/kerning.plist
index 33db1da84..9cc8895d3 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo2.ufo/kerning.plist
+++ b/tests/makeinstancesufo_data/expected_output/ufo2.ufo/kerning.plist
@@ -2,50 +2,50 @@
- @MMK_L_LAT_A
+ public.kern1.LAT_A
- @MMK_R_LAT_A
+ public.kern2.LAT_A
10
- @MMK_R_LAT_Y
+ public.kern2.LAT_Y
-90
- @MMK_R_LAT_a
+ public.kern2.LAT_a
-5
- @MMK_R_LAT_y
+ public.kern2.LAT_y
-50
- @MMK_L_LAT_Y
+ public.kern1.LAT_Y
- @MMK_R_LAT_A
- -90
- @MMK_R_LAT_Y
- 0
- @MMK_R_LAT_a
- -80
- @MMK_R_LAT_y
- -69
adieresis
-79
atilde
-61
+ public.kern2.LAT_A
+ -90
+ public.kern2.LAT_Y
+ 0
+ public.kern2.LAT_a
+ -80
+ public.kern2.LAT_y
+ -69
- @MMK_L_LAT_a
+ public.kern1.LAT_a
- @MMK_R_LAT_A
+ public.kern2.LAT_A
10
- @MMK_R_LAT_Y
+ public.kern2.LAT_Y
-80
- @MMK_R_LAT_y
+ public.kern2.LAT_y
-10
- @MMK_L_LAT_v
+ public.kern1.LAT_v
- @MMK_R_LAT_A
+ public.kern2.LAT_A
-71
- @MMK_R_LAT_Y
+ public.kern2.LAT_Y
-50
- @MMK_R_LAT_a
+ public.kern2.LAT_a
-16
- @MMK_R_LAT_y
+ public.kern2.LAT_y
9
diff --git a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/fontinfo.plist b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/fontinfo.plist
index 199cb1c21..f7074fbbf 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/fontinfo.plist
+++ b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/fontinfo.plist
@@ -12,6 +12,9 @@
-231
familyName
Source Serif Pro
+ guidelines
+
+
italicAngle
0
openTypeHheaAscender
diff --git a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/A_.glif b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/A_.glif
index 67443357a..f5ea7b561 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/A_.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/A_.glif
@@ -1,5 +1,5 @@
-
+
@@ -35,14 +35,8 @@
-
-
-
-
-
-
-
-
-
+
+
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/A_acute.glif b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/A_acute.glif
index fb33eec1f..d8d29c11a 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/A_acute.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/A_acute.glif
@@ -1,5 +1,5 @@
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/A_dieresis.glif b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/A_dieresis.glif
index f3535950a..90b1ed882 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/A_dieresis.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/A_dieresis.glif
@@ -1,5 +1,5 @@
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/A_tilde.glif b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/A_tilde.glif
index 2458f61e7..e08cac5a4 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/A_tilde.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/A_tilde.glif
@@ -1,5 +1,5 @@
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/Y_.glif b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/Y_.glif
index 457fe1992..c6518a697 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/Y_.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/Y_.glif
@@ -1,5 +1,5 @@
-
+
@@ -47,11 +47,7 @@
-
-
-
-
-
-
+
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/Y_acute.glif b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/Y_acute.glif
index 3d66593ba..920051ea6 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/Y_acute.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/Y_acute.glif
@@ -1,5 +1,5 @@
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/Y_dieresis.glif b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/Y_dieresis.glif
index 316cf040b..aee2fb497 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/Y_dieresis.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/Y_dieresis.glif
@@ -1,5 +1,5 @@
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/Y_tilde.glif b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/Y_tilde.glif
index 5ea48f002..be908b1a1 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/Y_tilde.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/Y_tilde.glif
@@ -1,5 +1,5 @@
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/a.glif b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/a.glif
index e0d66c6b2..0f76c83d0 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/a.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/a.glif
@@ -1,5 +1,5 @@
-
+
@@ -70,14 +70,8 @@
-
-
-
-
-
-
-
-
-
+
+
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/aacute.glif b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/aacute.glif
index 60126f80e..77d2bc2d2 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/aacute.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/aacute.glif
@@ -1,5 +1,5 @@
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/acutecmb.cap.glif b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/acutecmb.cap.glif
index ae408954c..e8fd81b25 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/acutecmb.cap.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/acutecmb.cap.glif
@@ -1,5 +1,5 @@
-
+
@@ -19,8 +19,6 @@
-
-
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/acutecmb.glif b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/acutecmb.glif
index 23fe0f9f7..fe8dc474d 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/acutecmb.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/acutecmb.glif
@@ -1,5 +1,5 @@
-
+
@@ -20,8 +20,6 @@
-
-
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/adieresis.glif b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/adieresis.glif
index 3a26ab5d2..d011cac40 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/adieresis.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/adieresis.glif
@@ -1,5 +1,5 @@
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/atilde.glif b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/atilde.glif
index 513076017..5c3323cc8 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/atilde.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/atilde.glif
@@ -1,5 +1,5 @@
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/dieresiscmb.cap.glif b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/dieresiscmb.cap.glif
index 03b3d969d..3a304a5de 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/dieresiscmb.cap.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/dieresiscmb.cap.glif
@@ -1,5 +1,5 @@
-
+
@@ -29,8 +29,6 @@
-
-
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/dieresiscmb.glif b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/dieresiscmb.glif
index 75b68d470..53e042ed0 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/dieresiscmb.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/dieresiscmb.glif
@@ -1,5 +1,5 @@
-
+
@@ -30,11 +30,7 @@
-
-
-
-
-
-
+
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/tildecmb.cap.glif b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/tildecmb.cap.glif
index 16b6c3110..5a2048368 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/tildecmb.cap.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/tildecmb.cap.glif
@@ -1,5 +1,5 @@
-
+
@@ -29,8 +29,6 @@
-
-
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/tildecmb.glif b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/tildecmb.glif
index e229c7e14..c91b9ff8f 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/tildecmb.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/tildecmb.glif
@@ -1,5 +1,5 @@
-
+
@@ -30,8 +30,6 @@
-
-
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/y.glif b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/y.glif
index 0c6a95057..c03dea1ac 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/y.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/y.glif
@@ -1,5 +1,5 @@
-
+
@@ -49,11 +49,7 @@
-
-
-
-
-
-
+
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/yacute.glif b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/yacute.glif
index 8608a7910..3e4bd30f5 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/yacute.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/yacute.glif
@@ -1,5 +1,5 @@
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/ydieresis.glif b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/ydieresis.glif
index 7461fd7c1..3af795a58 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/ydieresis.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/ydieresis.glif
@@ -1,5 +1,5 @@
-
+
diff --git a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/ytilde.glif b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/ytilde.glif
index 3aded687f..58bb7e056 100644
--- a/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/ytilde.glif
+++ b/tests/makeinstancesufo_data/expected_output/ufo3semibold.ufo/glyphs/ytilde.glif
@@ -1,5 +1,5 @@
-
+
diff --git a/tests/makeinstancesufo_data/input/OverlappingPoints-Black.ufo/features.fea b/tests/makeinstancesufo_data/input/OverlappingPoints-Black.ufo/features.fea
new file mode 100644
index 000000000..dd5c29503
--- /dev/null
+++ b/tests/makeinstancesufo_data/input/OverlappingPoints-Black.ufo/features.fea
@@ -0,0 +1,11 @@
+### prefix:-1: ###
+### open prefix '' ###
+languagesystem DFLT dflt;
+### close prefix '' ###
+
+table GDEF {
+ GlyphClassDef ,# Base
+ , # Liga
+ , # Mark
+ ;
+ } GDEF;
diff --git a/tests/makeinstancesufo_data/input/OverlappingPoints-Black.ufo/fontinfo.plist b/tests/makeinstancesufo_data/input/OverlappingPoints-Black.ufo/fontinfo.plist
new file mode 100644
index 000000000..1b47c0256
--- /dev/null
+++ b/tests/makeinstancesufo_data/input/OverlappingPoints-Black.ufo/fontinfo.plist
@@ -0,0 +1,56 @@
+
+
+
+
+ ascender
+ 800
+ capHeight
+ 700
+ descender
+ -200
+ familyName
+ OverlappingPoints
+ guidelines
+
+ italicAngle
+ 0
+ openTypeHeadCreated
+ 2024/08/07 17:44:51
+ postscriptBlueValues
+
+ -16
+ 0
+ 500
+ 516
+ 700
+ 716
+ 800
+ 816
+
+ postscriptFamilyBlues
+
+ postscriptFamilyOtherBlues
+
+ postscriptFontName
+ OverlappingPoints-Regular
+ postscriptOtherBlues
+
+ -216
+ -200
+
+ postscriptStemSnapH
+
+ postscriptStemSnapV
+
+ styleName
+ Black
+ unitsPerEm
+ 1000
+ versionMajor
+ 1
+ versionMinor
+ 0
+ xHeight
+ 500
+
+
diff --git a/tests/makeinstancesufo_data/input/OverlappingPoints-Black.ufo/glyphs/_notdef.glif b/tests/makeinstancesufo_data/input/OverlappingPoints-Black.ufo/glyphs/_notdef.glif
new file mode 100644
index 000000000..50ec2b579
--- /dev/null
+++ b/tests/makeinstancesufo_data/input/OverlappingPoints-Black.ufo/glyphs/_notdef.glif
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/tests/makeinstancesufo_data/input/OverlappingPoints-Black.ufo/glyphs/contents.plist b/tests/makeinstancesufo_data/input/OverlappingPoints-Black.ufo/glyphs/contents.plist
new file mode 100644
index 000000000..374cc07e3
--- /dev/null
+++ b/tests/makeinstancesufo_data/input/OverlappingPoints-Black.ufo/glyphs/contents.plist
@@ -0,0 +1,10 @@
+
+
+
+
+ .notdef
+ _notdef.glif
+ iamaglyph
+ iamaglyph.glif
+
+
diff --git a/tests/makeinstancesufo_data/input/OverlappingPoints-Black.ufo/glyphs/iamaglyph.glif b/tests/makeinstancesufo_data/input/OverlappingPoints-Black.ufo/glyphs/iamaglyph.glif
new file mode 100644
index 000000000..fbba4b45d
--- /dev/null
+++ b/tests/makeinstancesufo_data/input/OverlappingPoints-Black.ufo/glyphs/iamaglyph.glif
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/makeinstancesufo_data/input/OverlappingPoints-Black.ufo/glyphs/layerinfo.plist b/tests/makeinstancesufo_data/input/OverlappingPoints-Black.ufo/glyphs/layerinfo.plist
new file mode 100644
index 000000000..e0dd9a592
--- /dev/null
+++ b/tests/makeinstancesufo_data/input/OverlappingPoints-Black.ufo/glyphs/layerinfo.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ color
+ 0.5,0,0.5,0.7
+
+
diff --git a/tests/makeinstancesufo_data/input/OverlappingPoints-Black.ufo/layercontents.plist b/tests/makeinstancesufo_data/input/OverlappingPoints-Black.ufo/layercontents.plist
new file mode 100644
index 000000000..b9c1a4f27
--- /dev/null
+++ b/tests/makeinstancesufo_data/input/OverlappingPoints-Black.ufo/layercontents.plist
@@ -0,0 +1,10 @@
+
+
+
+
+
+ public.default
+ glyphs
+
+
+
diff --git a/tests/makeinstancesufo_data/input/OverlappingPoints-Black.ufo/lib.plist b/tests/makeinstancesufo_data/input/OverlappingPoints-Black.ufo/lib.plist
new file mode 100644
index 000000000..b8546f8e9
--- /dev/null
+++ b/tests/makeinstancesufo_data/input/OverlappingPoints-Black.ufo/lib.plist
@@ -0,0 +1,11 @@
+
+
+
+
+ public.glyphOrder
+
+ .notdef
+ iamaglyph
+
+
+
diff --git a/tests/makeinstancesufo_data/input/OverlappingPoints-Black.ufo/metainfo.plist b/tests/makeinstancesufo_data/input/OverlappingPoints-Black.ufo/metainfo.plist
new file mode 100644
index 000000000..7b8b34ac6
--- /dev/null
+++ b/tests/makeinstancesufo_data/input/OverlappingPoints-Black.ufo/metainfo.plist
@@ -0,0 +1,10 @@
+
+
+
+
+ creator
+ com.github.fonttools.ufoLib
+ formatVersion
+ 3
+
+
diff --git a/tests/makeinstancesufo_data/input/OverlappingPoints-Regular.ufo/features.fea b/tests/makeinstancesufo_data/input/OverlappingPoints-Regular.ufo/features.fea
new file mode 100644
index 000000000..dd5c29503
--- /dev/null
+++ b/tests/makeinstancesufo_data/input/OverlappingPoints-Regular.ufo/features.fea
@@ -0,0 +1,11 @@
+### prefix:-1: ###
+### open prefix '' ###
+languagesystem DFLT dflt;
+### close prefix '' ###
+
+table GDEF {
+ GlyphClassDef ,# Base
+ , # Liga
+ , # Mark
+ ;
+ } GDEF;
diff --git a/tests/makeinstancesufo_data/input/OverlappingPoints-Regular.ufo/fontinfo.plist b/tests/makeinstancesufo_data/input/OverlappingPoints-Regular.ufo/fontinfo.plist
new file mode 100644
index 000000000..84eec370f
--- /dev/null
+++ b/tests/makeinstancesufo_data/input/OverlappingPoints-Regular.ufo/fontinfo.plist
@@ -0,0 +1,56 @@
+
+
+
+
+ ascender
+ 800
+ capHeight
+ 700
+ descender
+ -200
+ familyName
+ OverlappingPoints
+ guidelines
+
+ italicAngle
+ 0
+ openTypeHeadCreated
+ 2024/08/07 17:44:51
+ postscriptBlueValues
+
+ -16
+ 0
+ 500
+ 516
+ 700
+ 716
+ 800
+ 816
+
+ postscriptFamilyBlues
+
+ postscriptFamilyOtherBlues
+
+ postscriptFontName
+ OverlappingPoints-Regular
+ postscriptOtherBlues
+
+ -216
+ -200
+
+ postscriptStemSnapH
+
+ postscriptStemSnapV
+
+ styleName
+ Regular
+ unitsPerEm
+ 1000
+ versionMajor
+ 1
+ versionMinor
+ 0
+ xHeight
+ 500
+
+
diff --git a/tests/makeinstancesufo_data/input/OverlappingPoints-Regular.ufo/glyphs/_notdef.glif b/tests/makeinstancesufo_data/input/OverlappingPoints-Regular.ufo/glyphs/_notdef.glif
new file mode 100644
index 000000000..50ec2b579
--- /dev/null
+++ b/tests/makeinstancesufo_data/input/OverlappingPoints-Regular.ufo/glyphs/_notdef.glif
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/tests/makeinstancesufo_data/input/OverlappingPoints-Regular.ufo/glyphs/contents.plist b/tests/makeinstancesufo_data/input/OverlappingPoints-Regular.ufo/glyphs/contents.plist
new file mode 100644
index 000000000..374cc07e3
--- /dev/null
+++ b/tests/makeinstancesufo_data/input/OverlappingPoints-Regular.ufo/glyphs/contents.plist
@@ -0,0 +1,10 @@
+
+
+
+
+ .notdef
+ _notdef.glif
+ iamaglyph
+ iamaglyph.glif
+
+
diff --git a/tests/makeinstancesufo_data/input/OverlappingPoints-Regular.ufo/glyphs/iamaglyph.glif b/tests/makeinstancesufo_data/input/OverlappingPoints-Regular.ufo/glyphs/iamaglyph.glif
new file mode 100644
index 000000000..7cdb929f8
--- /dev/null
+++ b/tests/makeinstancesufo_data/input/OverlappingPoints-Regular.ufo/glyphs/iamaglyph.glif
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/makeinstancesufo_data/input/OverlappingPoints-Regular.ufo/glyphs/layerinfo.plist b/tests/makeinstancesufo_data/input/OverlappingPoints-Regular.ufo/glyphs/layerinfo.plist
new file mode 100644
index 000000000..e0dd9a592
--- /dev/null
+++ b/tests/makeinstancesufo_data/input/OverlappingPoints-Regular.ufo/glyphs/layerinfo.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ color
+ 0.5,0,0.5,0.7
+
+
diff --git a/tests/makeinstancesufo_data/input/OverlappingPoints-Regular.ufo/layercontents.plist b/tests/makeinstancesufo_data/input/OverlappingPoints-Regular.ufo/layercontents.plist
new file mode 100644
index 000000000..b9c1a4f27
--- /dev/null
+++ b/tests/makeinstancesufo_data/input/OverlappingPoints-Regular.ufo/layercontents.plist
@@ -0,0 +1,10 @@
+
+
+
+
+
+ public.default
+ glyphs
+
+
+
diff --git a/tests/makeinstancesufo_data/input/OverlappingPoints-Regular.ufo/lib.plist b/tests/makeinstancesufo_data/input/OverlappingPoints-Regular.ufo/lib.plist
new file mode 100644
index 000000000..b8546f8e9
--- /dev/null
+++ b/tests/makeinstancesufo_data/input/OverlappingPoints-Regular.ufo/lib.plist
@@ -0,0 +1,11 @@
+
+
+
+
+ public.glyphOrder
+
+ .notdef
+ iamaglyph
+
+
+
diff --git a/tests/makeinstancesufo_data/input/OverlappingPoints-Regular.ufo/metainfo.plist b/tests/makeinstancesufo_data/input/OverlappingPoints-Regular.ufo/metainfo.plist
new file mode 100644
index 000000000..7b8b34ac6
--- /dev/null
+++ b/tests/makeinstancesufo_data/input/OverlappingPoints-Regular.ufo/metainfo.plist
@@ -0,0 +1,10 @@
+
+
+
+
+ creator
+ com.github.fonttools.ufoLib
+ formatVersion
+ 3
+
+
diff --git a/tests/makeinstancesufo_data/input/OverlappingPoints-Thin.ufo/features.fea b/tests/makeinstancesufo_data/input/OverlappingPoints-Thin.ufo/features.fea
new file mode 100644
index 000000000..dd5c29503
--- /dev/null
+++ b/tests/makeinstancesufo_data/input/OverlappingPoints-Thin.ufo/features.fea
@@ -0,0 +1,11 @@
+### prefix:-1: ###
+### open prefix '' ###
+languagesystem DFLT dflt;
+### close prefix '' ###
+
+table GDEF {
+ GlyphClassDef ,# Base
+ , # Liga
+ , # Mark
+ ;
+ } GDEF;
diff --git a/tests/makeinstancesufo_data/input/OverlappingPoints-Thin.ufo/fontinfo.plist b/tests/makeinstancesufo_data/input/OverlappingPoints-Thin.ufo/fontinfo.plist
new file mode 100644
index 000000000..b3bd0d282
--- /dev/null
+++ b/tests/makeinstancesufo_data/input/OverlappingPoints-Thin.ufo/fontinfo.plist
@@ -0,0 +1,56 @@
+
+
+
+
+ ascender
+ 800
+ capHeight
+ 700
+ descender
+ -200
+ familyName
+ OverlappingPoints
+ guidelines
+
+ italicAngle
+ 0
+ openTypeHeadCreated
+ 2024/08/07 17:44:51
+ postscriptBlueValues
+
+ -16
+ 0
+ 500
+ 516
+ 700
+ 716
+ 800
+ 816
+
+ postscriptFamilyBlues
+
+ postscriptFamilyOtherBlues
+
+ postscriptFontName
+ OverlappingPoints-Regular
+ postscriptOtherBlues
+
+ -216
+ -200
+
+ postscriptStemSnapH
+
+ postscriptStemSnapV
+
+ styleName
+ Thin
+ unitsPerEm
+ 1000
+ versionMajor
+ 1
+ versionMinor
+ 0
+ xHeight
+ 500
+
+
diff --git a/tests/makeinstancesufo_data/input/OverlappingPoints-Thin.ufo/glyphs/_notdef.glif b/tests/makeinstancesufo_data/input/OverlappingPoints-Thin.ufo/glyphs/_notdef.glif
new file mode 100644
index 000000000..50ec2b579
--- /dev/null
+++ b/tests/makeinstancesufo_data/input/OverlappingPoints-Thin.ufo/glyphs/_notdef.glif
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/tests/makeinstancesufo_data/input/OverlappingPoints-Thin.ufo/glyphs/contents.plist b/tests/makeinstancesufo_data/input/OverlappingPoints-Thin.ufo/glyphs/contents.plist
new file mode 100644
index 000000000..374cc07e3
--- /dev/null
+++ b/tests/makeinstancesufo_data/input/OverlappingPoints-Thin.ufo/glyphs/contents.plist
@@ -0,0 +1,10 @@
+
+
+
+
+ .notdef
+ _notdef.glif
+ iamaglyph
+ iamaglyph.glif
+
+
diff --git a/tests/makeinstancesufo_data/input/OverlappingPoints-Thin.ufo/glyphs/iamaglyph.glif b/tests/makeinstancesufo_data/input/OverlappingPoints-Thin.ufo/glyphs/iamaglyph.glif
new file mode 100644
index 000000000..044718c51
--- /dev/null
+++ b/tests/makeinstancesufo_data/input/OverlappingPoints-Thin.ufo/glyphs/iamaglyph.glif
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/makeinstancesufo_data/input/OverlappingPoints-Thin.ufo/glyphs/layerinfo.plist b/tests/makeinstancesufo_data/input/OverlappingPoints-Thin.ufo/glyphs/layerinfo.plist
new file mode 100644
index 000000000..e0dd9a592
--- /dev/null
+++ b/tests/makeinstancesufo_data/input/OverlappingPoints-Thin.ufo/glyphs/layerinfo.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ color
+ 0.5,0,0.5,0.7
+
+
diff --git a/tests/makeinstancesufo_data/input/OverlappingPoints-Thin.ufo/layercontents.plist b/tests/makeinstancesufo_data/input/OverlappingPoints-Thin.ufo/layercontents.plist
new file mode 100644
index 000000000..b9c1a4f27
--- /dev/null
+++ b/tests/makeinstancesufo_data/input/OverlappingPoints-Thin.ufo/layercontents.plist
@@ -0,0 +1,10 @@
+
+
+
+
+
+ public.default
+ glyphs
+
+
+
diff --git a/tests/makeinstancesufo_data/input/OverlappingPoints-Thin.ufo/lib.plist b/tests/makeinstancesufo_data/input/OverlappingPoints-Thin.ufo/lib.plist
new file mode 100644
index 000000000..b8546f8e9
--- /dev/null
+++ b/tests/makeinstancesufo_data/input/OverlappingPoints-Thin.ufo/lib.plist
@@ -0,0 +1,11 @@
+
+
+
+
+ public.glyphOrder
+
+ .notdef
+ iamaglyph
+
+
+
diff --git a/tests/makeinstancesufo_data/input/OverlappingPoints-Thin.ufo/metainfo.plist b/tests/makeinstancesufo_data/input/OverlappingPoints-Thin.ufo/metainfo.plist
new file mode 100644
index 000000000..7b8b34ac6
--- /dev/null
+++ b/tests/makeinstancesufo_data/input/OverlappingPoints-Thin.ufo/metainfo.plist
@@ -0,0 +1,10 @@
+
+
+
+
+ creator
+ com.github.fonttools.ufoLib
+ formatVersion
+ 3
+
+
diff --git a/tests/makeinstancesufo_data/input/OverlappingPoints.designspace b/tests/makeinstancesufo_data/input/OverlappingPoints.designspace
new file mode 100644
index 000000000..2cf65a4f8
--- /dev/null
+++ b/tests/makeinstancesufo_data/input/OverlappingPoints.designspace
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/makeinstancesufo_data/input/font.designspace b/tests/makeinstancesufo_data/input/font.designspace
index 65f330977..192e895ed 100644
--- a/tests/makeinstancesufo_data/input/font.designspace
+++ b/tests/makeinstancesufo_data/input/font.designspace
@@ -85,7 +85,7 @@
-
+
diff --git a/tests/makeinstancesufo_test.py b/tests/makeinstancesufo_test.py
index 0c4775e67..92b5dfe9b 100644
--- a/tests/makeinstancesufo_test.py
+++ b/tests/makeinstancesufo_test.py
@@ -212,3 +212,19 @@ def test_extrapolate(capfd, use_varlib):
assert "Extrapolation is not supported with varlib (Dummy Extra Plus weight: 1500.0)" in captured.err # noqa: E501
else:
assert differ([expected_path, actual_path])
+
+
+def test_strict_flag(capfd):
+ """
+ Test extrapolating, with default (MutatorMath) and with varlib.
+ Using varlib should fail (output should not be extrapolated) because
+ extrapolation is not supported by varlib.
+ """
+ runner_args = ['-t', TOOL, '-o', 'a', 'c', 'n', 's', 'd', f'_{get_input_path("OverlappingPoints.designspace")}'] # noqa: E501
+ runner(runner_args)
+
+ for ufo_filename in ("overlapping-Thin.ufo", "overlapping-Black.ufo"):
+ expected_path = _get_output_path(ufo_filename, 'expected_output')
+ actual_path = _get_output_path(ufo_filename, 'temp_output')
+
+ assert differ([expected_path, actual_path])