From b8fed51fb6748cbe7aab0549f4dbe9214e928c63 Mon Sep 17 00:00:00 2001 From: Jany Belluz Date: Wed, 16 Mar 2022 18:51:51 +0000 Subject: [PATCH] WIP Build DesignSpace version 5 + add tests --- .gitignore | 1 + Lib/fontmake/__main__.py | 30 +- Lib/fontmake/font_project.py | 121 +++- requirements.txt | 3 +- tests/data/MutatorSansLite/LICENSE | 21 + ...MutatorFamily_v5_discrete_axis.designspace | 206 ++++++ .../MutatorSansBoldCondensed.ufo/features.fea | 1 + .../fontinfo.plist | 69 ++ .../glyphs.background/S_.closed.glif | 52 ++ .../glyphs.background/contents.plist | 8 + .../glyphs.background/layerinfo.plist | 8 + .../glyphs/A_.glif | 43 ++ .../glyphs/I_.glif | 25 + .../glyphs/I_.narrow.glif | 24 + .../glyphs/I_J_.glif | 33 + .../glyphs/S_.closed.glif | 66 ++ .../glyphs/S_.glif | 65 ++ .../glyphs/contents.plist | 18 + .../glyphs/layerinfo.plist | 13 + .../layercontents.plist | 14 + .../MutatorSansBoldCondensed.ufo/lib.plist | 270 +++++++ .../metainfo.plist | 10 + .../MutatorSansBoldWide.ufo/features.fea | 1 + .../MutatorSansBoldWide.ufo/fontinfo.plist | 69 ++ .../glyphs.background/S_.closed.glif | 52 ++ .../glyphs.background/S_.glif | 53 ++ .../glyphs.background/contents.plist | 10 + .../glyphs.background/layerinfo.plist | 8 + .../MutatorSansBoldWide.ufo/glyphs/A_.glif | 31 + .../MutatorSansBoldWide.ufo/glyphs/I_.glif | 25 + .../glyphs/I_.narrow.glif | 24 + .../MutatorSansBoldWide.ufo/glyphs/I_J_.glif | 32 + .../glyphs/S_.closed.glif | 64 ++ .../MutatorSansBoldWide.ufo/glyphs/S_.glif | 65 ++ .../glyphs/contents.plist | 18 + .../glyphs/layerinfo.plist | 13 + .../layercontents.plist | 14 + .../MutatorSansBoldWide.ufo/lib.plist | 396 ++++++++++ .../MutatorSansBoldWide.ufo/metainfo.plist | 10 + .../features.fea | 2 + .../fontinfo.plist | 69 ++ .../glyphs.background/S_.closed.glif | 98 +++ .../glyphs.background/S_.glif | 75 ++ .../glyphs.background/contents.plist | 10 + .../glyphs.background/layerinfo.plist | 8 + .../glyphs.support.S_.middle/S_.closed.glif | 66 ++ .../glyphs.support.S_.middle/contents.plist | 8 + .../glyphs.support.S_.middle/layerinfo.plist | 8 + .../glyphs.support.S_.wide/S_.closed.glif | 66 ++ .../glyphs.support.S_.wide/S_.glif | 66 ++ .../glyphs.support.S_.wide/contents.plist | 10 + .../glyphs.support.S_.wide/layerinfo.plist | 8 + .../glyphs.support.crossbar/S_.glif | 67 ++ .../glyphs.support.crossbar/contents.plist | 8 + .../glyphs.support.crossbar/layerinfo.plist | 8 + .../glyphs.support.crossbars/E_.glif | 30 + .../glyphs.support.crossbars/contents.plist | 8 + .../glyphs.support.crossbars/layerinfo.plist | 5 + .../glyphs.support/A_.glif | 29 + .../glyphs.support/S_.glif | 77 ++ .../glyphs.support/contents.plist | 10 + .../glyphs.support/layerinfo.plist | 13 + .../glyphs/A_.glif | 31 + .../glyphs/I_.glif | 25 + .../glyphs/I_.narrow.glif | 24 + .../glyphs/I_J_.glif | 32 + .../glyphs/S_.closed.glif | 52 ++ .../glyphs/S_.glif | 65 ++ .../glyphs/contents.plist | 18 + .../glyphs/layerinfo.plist | 13 + .../layercontents.plist | 30 + .../MutatorSansLightCondensed.ufo/lib.plist | 685 ++++++++++++++++++ .../metainfo.plist | 10 + .../MutatorSansLightWide.ufo/features.fea | 1 + .../MutatorSansLightWide.ufo/fontinfo.plist | 69 ++ .../glyphs.background/S_.closed.glif | 52 ++ .../glyphs.background/contents.plist | 8 + .../glyphs.background/layerinfo.plist | 8 + .../contents.plist | 5 + .../layerinfo.plist | 8 + .../S_.glif | 53 ++ .../contents.plist | 8 + .../layerinfo.plist | 13 + .../contents.plist | 5 + .../layerinfo.plist | 8 + .../S_.glif | 53 ++ .../contents.plist | 8 + .../layerinfo.plist | 13 + .../MutatorSansLightWide.ufo/glyphs/A_.glif | 43 ++ .../MutatorSansLightWide.ufo/glyphs/I_.glif | 25 + .../glyphs/I_.narrow.glif | 24 + .../MutatorSansLightWide.ufo/glyphs/I_J_.glif | 32 + .../glyphs/S_.closed.glif | 52 ++ .../MutatorSansLightWide.ufo/glyphs/S_.glif | 65 ++ .../glyphs/contents.plist | 18 + .../glyphs/layerinfo.plist | 13 + .../layercontents.plist | 14 + .../MutatorSansLightWide.ufo/lib.plist | 664 +++++++++++++++++ .../MutatorSansLightWide.ufo/metainfo.plist | 10 + ...MutatorSans_v5_implicit_one_vf.designspace | 148 ++++ .../MutatorSans_v5_several_vfs.designspace | 166 +++++ ...s_v5_several_vfs_discrete_axis.designspace | 148 ++++ .../features.fea | 2 + .../fontinfo.plist | 69 ++ .../glyphs/A_.glif | 43 ++ .../glyphs/contents.plist | 8 + .../layercontents.plist | 10 + .../MutatorSerifLightCondensed.ufo/lib.plist | 685 ++++++++++++++++++ .../metainfo.plist | 10 + .../MutatorSerifLightWide.ufo/features.fea | 1 + .../MutatorSerifLightWide.ufo/fontinfo.plist | 69 ++ .../MutatorSerifLightWide.ufo/glyphs/A_.glif | 55 ++ .../glyphs/contents.plist | 8 + .../layercontents.plist | 10 + .../MutatorSerifLightWide.ufo/lib.plist | 664 +++++++++++++++++ .../MutatorSerifLightWide.ufo/metainfo.plist | 10 + tests/test_main.py | 239 ++++++ 117 files changed, 7308 insertions(+), 29 deletions(-) create mode 100644 tests/data/MutatorSansLite/LICENSE create mode 100644 tests/data/MutatorSansLite/MutatorFamily_v5_discrete_axis.designspace create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/features.fea create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/fontinfo.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs.background/S_.closed.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs.background/contents.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs.background/layerinfo.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/A_.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/I_.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/I_.narrow.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/I_J_.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/S_.closed.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/S_.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/contents.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/layerinfo.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/layercontents.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/lib.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/metainfo.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/features.fea create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/fontinfo.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs.background/S_.closed.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs.background/S_.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs.background/contents.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs.background/layerinfo.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/A_.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/I_.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/I_.narrow.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/I_J_.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/S_.closed.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/S_.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/contents.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/layerinfo.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/layercontents.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/lib.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/metainfo.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/features.fea create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/fontinfo.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.background/S_.closed.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.background/S_.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.background/contents.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.background/layerinfo.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/S_.closed.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/contents.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/layerinfo.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/S_.closed.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/S_.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/contents.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/layerinfo.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/S_.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/contents.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/layerinfo.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbars/E_.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbars/contents.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbars/layerinfo.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support/A_.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support/S_.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support/contents.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support/layerinfo.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/A_.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/I_.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/I_.narrow.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/I_J_.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/S_.closed.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/S_.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/contents.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/layerinfo.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/layercontents.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/lib.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/metainfo.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightWide.ufo/features.fea create mode 100644 tests/data/MutatorSansLite/MutatorSansLightWide.ufo/fontinfo.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.background/S_.closed.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.background/contents.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.background/layerinfo.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_0.00_weight_0.00/contents.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_0.00_weight_0.00/layerinfo.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_500.00_weight_500.00/S_.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_500.00_weight_500.00/contents.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_500.00_weight_500.00/layerinfo.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_695.65_weight_166.38/contents.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_695.65_weight_166.38/layerinfo.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_720.00_weight_645.00/S_.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_720.00_weight_645.00/contents.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_720.00_weight_645.00/layerinfo.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/A_.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/I_.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/I_.narrow.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/I_J_.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/S_.closed.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/S_.glif create mode 100644 tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/contents.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/layerinfo.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightWide.ufo/layercontents.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightWide.ufo/lib.plist create mode 100644 tests/data/MutatorSansLite/MutatorSansLightWide.ufo/metainfo.plist create mode 100644 tests/data/MutatorSansLite/MutatorSans_v5_implicit_one_vf.designspace create mode 100644 tests/data/MutatorSansLite/MutatorSans_v5_several_vfs.designspace create mode 100644 tests/data/MutatorSansLite/MutatorSans_v5_several_vfs_discrete_axis.designspace create mode 100644 tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/features.fea create mode 100644 tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/fontinfo.plist create mode 100644 tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/glyphs/A_.glif create mode 100644 tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/glyphs/contents.plist create mode 100644 tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/layercontents.plist create mode 100644 tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/lib.plist create mode 100644 tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/metainfo.plist create mode 100644 tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/features.fea create mode 100644 tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/fontinfo.plist create mode 100644 tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/glyphs/A_.glif create mode 100644 tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/glyphs/contents.plist create mode 100644 tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/layercontents.plist create mode 100644 tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/lib.plist create mode 100644 tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/metainfo.plist diff --git a/.gitignore b/.gitignore index 78b51a3a..9ee41731 100644 --- a/.gitignore +++ b/.gitignore @@ -49,6 +49,7 @@ coverage.xml *.cover .hypothesis/ .pytest_cache/ +tests/data/test.fea # Translations *.mo diff --git a/Lib/fontmake/__main__.py b/Lib/fontmake/__main__.py index 177eab6d..0147750c 100644 --- a/Lib/fontmake/__main__.py +++ b/Lib/fontmake/__main__.py @@ -17,6 +17,7 @@ from argparse import ArgumentParser, FileType from collections import namedtuple from contextlib import contextmanager +from textwrap import dedent from ufo2ft import CFFOptimization from ufo2ft.featureWriters import loadFeatureWriterFromString @@ -237,7 +238,7 @@ def main(args=None): "--output-path", default=None, help="Output font file path. Only valid when the output is a single " - "file (e.g. input is a single UFO or output is variable font)", + "file (e.g. input is a single UFO or output is a single variable font)", ) outputSubGroup.add_argument( "--output-dir", @@ -259,6 +260,24 @@ def main(args=None): 'E.g.: -i "Noto Sans Bold"; or -i ".* UI Condensed". ' "(for Glyphs or MutatorMath sources only). ", ) + outputGroup.add_argument( + "--variable-fonts", + nargs="?", + default=True, + const=True, + metavar="VARIABLE_FONT_FILENAME", + help=dedent( + """\ + Filter the list of variable fonts produced from the input + Designspace file. By default all listed variable fonts are + generated. To generate a specific variable font (or variable fonts) + that match a given "filename" attribute, you can pass as argument + the full filename or a regular expression. E.g.: --variable-fonts + "MyFontVF_WeightOnly.ttf"; or --variable-fonts + "MyFontVFItalic_.*.ttf". + """ + ), + ) outputGroup.add_argument( "--use-mutatormath", action="store_true", @@ -558,7 +577,13 @@ def main(args=None): "variable output", ) else: - exclude_args(parser, args, ["optimize_gvar"], "static output", positive=False) + exclude_args( + parser, + args, + ["variable_fonts", "optimize_gvar"], + "static output", + positive=False, + ) if args.get("use_mutatormath"): for module in ("defcon", "mutatorMath"): @@ -607,6 +632,7 @@ def main(args=None): args, [ "interpolate", + "variable_fonts", "use_mutatormath", "interpolate_binary_layout", "round_instances", diff --git a/Lib/fontmake/font_project.py b/Lib/fontmake/font_project.py index 70ac0816..1b006818 100644 --- a/Lib/fontmake/font_project.py +++ b/Lib/fontmake/font_project.py @@ -21,6 +21,7 @@ from collections import OrderedDict from contextlib import contextmanager from functools import partial +from pathlib import Path from re import fullmatch import attr @@ -28,6 +29,7 @@ import ufo2ft.errors import ufoLib2 from fontTools import designspaceLib +from fontTools.designspaceLib.split import splitInterpolable from fontTools.misc.loggingTools import Timer, configLogger from fontTools.misc.plistlib import load as readPlist from fontTools.ttLib import TTFont @@ -306,9 +308,10 @@ def build_interpolatable_otfs(self, designspace, **kwargs): """ return self._build_interpolatable_masters(designspace, ttf=False, **kwargs) - def build_variable_font( + def build_variable_fonts( self, - designspace, + designspace: designspaceLib.DesignSpaceDocument, + variable_fonts=True, output_path=None, output_dir=None, ttf=True, @@ -324,22 +327,55 @@ def build_variable_font( filters=None, **kwargs, ): - """Build OpenType variable font from masters in a designspace.""" + """Build OpenType variable fonts from masters in a designspace.""" assert not (output_path and output_dir), "mutually exclusive args" - if output_path is None: - output_path = ( - os.path.splitext(os.path.basename(designspace.path))[0] + "-VF" + vfs_in_document = designspace.getVariableFonts() + if not vfs_in_document: + logger.warning( + "No variable fonts in given designspace %s", designspace.path ) - ext = "ttf" if ttf else "otf" - output_path = self._output_path( - output_path, ext, is_variable=True, output_dir=output_dir + return {} + + vfs_to_build = [] + for vf in vfs_in_document: + # Skip variable fonts that do not match the user's inclusion regex if given. + if isinstance(variable_fonts, str) and not fullmatch( + variable_fonts, vf.name + ): + continue + vfs_to_build.append(vf) + + if not vfs_to_build: + logger.warning("No variable fonts matching %s", variable_fonts) + return {} + + if len(vfs_to_build) > 1 and output_path: + raise FontmakeError( + "can't specify output path because there are several VFs to build", + designspace, ) - logger.info("Building variable font " + output_path) + vf_name_to_output_path = {} + if len(vfs_to_build) == 1 and output_path is not None: + vf_name_to_output_path[vfs_to_build[0].name] = output_path + else: + for vf in vfs_to_build: + ext = "ttf" if ttf else "otf" + font_name = vf.name + if vf.filename is not None: + font_name = Path(vf.filename).stem + output_path = self._output_path( + font_name, ext, is_variable=True, output_dir=output_dir + ) + vf_name_to_output_path[vf.name] = output_path + + logger.info( + "Building variable fonts " + ", ".join(vf_name_to_output_path.values()) + ) if ttf: - font = ufo2ft.compileVariableTTF( + fonts = ufo2ft.compileVariableTTFs( designspace, featureWriters=feature_writers, useProductionNames=use_production_names, @@ -350,9 +386,10 @@ def build_variable_font( debugFeatureFile=debug_feature_file, filters=filters, inplace=True, + variableFontNames=list(vf_name_to_output_path), ) else: - font = ufo2ft.compileVariableCFF2( + fonts = ufo2ft.compileVariableCFF2s( designspace, featureWriters=feature_writers, useProductionNames=use_production_names, @@ -361,9 +398,11 @@ def build_variable_font( optimizeCFF=optimize_cff, filters=filters, inplace=True, + variableFontNames=list(vf_name_to_output_path), ) - font.save(output_path) + for name, font in fonts.items(): + font.save(vf_name_to_output_path[name]) def _iter_compile(self, ufos, ttf=False, debugFeatureFile=None, **kwargs): # generator function that calls ufo2ft compiler for each ufo and @@ -771,6 +810,8 @@ def interpolate_instance_ufos( interpolation failed. ValueError: an instance descriptor did not have a filename attribute set. """ + # TODO: (Jany) for each instance, figure out in which "interpolatable sub-space" it is, and give that to mutatormath/the other one + # Maybe easier to make 1 designspace per interpolatable sub-space, and call this function X times? from glyphsLib.interpolation import apply_instance_data_to_ufo logger.info("Interpolating master UFOs from designspace") @@ -859,6 +900,8 @@ def interpolate_instance_ufos_mutatormath( ValueError: "expand_features_to_instances" is True but no source in the designspace document is designated with ''. """ + # TODO: (Jany) for each instance, figure out in which "interpolatable sub-space" it is, and give that to mutatormath/the other one + # Maybe easier to make 1 designspace per interpolatable sub-space, and call this function X times? from glyphsLib.interpolation import apply_instance_data from mutatorMath.ufo.document import DesignSpaceDocumentReader @@ -910,6 +953,7 @@ def run_from_designspace( designspace_path, output=(), interpolate=False, + variable_fonts=True, masters_as_instances=False, interpolate_binary_layout=False, round_instances=False, @@ -930,6 +974,11 @@ def run_from_designspace( match given name. The string is compiled into a regular expression and matched against the "name" attribute of designspace instances using `re.fullmatch`. + variable_fonts: if True output all variable fonts, otherwise if the + value is a string, only build variable fonts that match the + given filename. As above, the string is compiled into a regular + expression and matched against the "filename" attribute of + designspace variable fonts using `re.fullmatch`. masters_as_instances: If True, output master fonts as instances. interpolate_binary_layout: Interpolate layout tables from compiled master binaries. @@ -974,15 +1023,22 @@ def run_from_designspace( preFilters, postFilters = loadFilters(designspace) filters = preFilters + postFilters - source_fonts = [source.font for source in designspace.sources] - # glyphsLib currently stores this custom parameter on the fonts, - # not the designspace, so we check if it exists in any font's lib. - explicit_check = any( - font.lib.get(COMPAT_CHECK_KEY, False) for font in source_fonts - ) - if interp_outputs or check_compatibility or explicit_check: - if not CompatibilityChecker(source_fonts).check(): - raise FontmakeError("Compatibility check failed", designspace.path) + # Since Designspace version 5, one designspace file can have discrete + # axes (that do not interpolate) and thus only some sub-spaces are + # actually compatible for interpolation. + for discrete_location, subDoc in splitInterpolable(designspace): + # glyphsLib currently stores this custom parameter on the fonts, + # not the designspace, so we check if it exists in any font's lib. + source_fonts = [source.font for source in subDoc.sources] + explicit_check = any( + font.lib.get(COMPAT_CHECK_KEY, False) for font in source_fonts + ) + if interp_outputs or check_compatibility or explicit_check: + if not CompatibilityChecker(source_fonts).check(): + message = "Compatibility check failed" + if discrete_location: + message += f" in interpolable sub-space at {discrete_location}" + raise FontmakeError(message, designspace.path) try: if static_outputs: @@ -1003,6 +1059,7 @@ def run_from_designspace( self._run_from_designspace_interpolatable( designspace, outputs=interp_outputs, + variable_fonts=variable_fonts, feature_writers=feature_writers, filters=filters, **kwargs, @@ -1078,13 +1135,23 @@ def _run_from_designspace_static( ) def _run_from_designspace_interpolatable( - self, designspace, outputs, output_path=None, output_dir=None, **kwargs + self, + designspace, + outputs, + variable_fonts=True, + output_path=None, + output_dir=None, + **kwargs, ): ttf_designspace = otf_designspace = None if "variable" in outputs: - self.build_variable_font( - designspace, output_path=output_path, output_dir=output_dir, **kwargs + self.build_variable_fonts( + designspace, + variable_fonts=variable_fonts, + output_path=output_path, + output_dir=output_dir, + **kwargs, ) if "ttf-interpolatable" in outputs: @@ -1092,8 +1159,9 @@ def _run_from_designspace_interpolatable( self._save_interpolatable_fonts(ttf_designspace, output_dir, ttf=True) if "variable-cff2" in outputs: - self.build_variable_font( + self.build_variable_fonts( designspace, + variable_fonts=variable_fonts, output_path=output_path, output_dir=output_dir, ttf=False, @@ -1281,3 +1349,4 @@ def _varLib_finder(source, directory="", ext="ttf"): def _normpath(fname): return os.path.normcase(os.path.normpath(fname)) + diff --git a/requirements.txt b/requirements.txt index c9330141..4c6d24cd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,7 +7,8 @@ fontMath==0.9.1 defcon[lxml]==0.10.0; platform_python_implementation == 'CPython' defcon==0.10.0; platform_python_implementation != 'CPython' booleanOperations==0.9.0 -ufoLib2==0.13.1 +# ufoLib2==0.13.1 +git+https://github.com/googlefonts/ufoLib2@build-ds5 attrs==21.4.0 cffsubr==0.2.9.post1 compreffor==0.5.1.post1 diff --git a/tests/data/MutatorSansLite/LICENSE b/tests/data/MutatorSansLite/LICENSE new file mode 100644 index 00000000..affdc0ee --- /dev/null +++ b/tests/data/MutatorSansLite/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Erik van Blokland + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/tests/data/MutatorSansLite/MutatorFamily_v5_discrete_axis.designspace b/tests/data/MutatorSansLite/MutatorFamily_v5_discrete_axis.designspace new file mode 100644 index 00000000..438e6b2d --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorFamily_v5_discrete_axis.designspace @@ -0,0 +1,206 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/features.fea b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/features.fea new file mode 100644 index 00000000..901a3dee --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/features.fea @@ -0,0 +1 @@ +# this is the feature from boldcondensed. diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/fontinfo.plist b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/fontinfo.plist new file mode 100644 index 00000000..ce38d59e --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/fontinfo.plist @@ -0,0 +1,69 @@ + + + + + ascender + 800 + capHeight + 800 + copyright + License same as MutatorMath. BSD 3-clause. [test-token: A] + descender + -200 + familyName + MutatorMathTest + guidelines + + + italicAngle + 0 + openTypeNameLicense + License same as MutatorMath. BSD 3-clause. [test-token: A] + openTypeOS2VendorID + LTTR + postscriptBlueValues + + + postscriptDefaultWidthX + 500 + postscriptFamilyBlues + + + postscriptFamilyOtherBlues + + + postscriptFontName + MutatorMathTest-BoldCondensed + postscriptFullName + MutatorMathTest BoldCondensed + postscriptOtherBlues + + + postscriptSlantAngle + 0 + postscriptStemSnapH + + + postscriptStemSnapV + + + postscriptWindowsCharacterSet + 1 + styleMapFamilyName + + styleMapStyleName + regular + styleName + BoldCondensed + unitsPerEm + 1000 + versionMajor + 1 + versionMinor + 2 + xHeight + 500 + year + 2004 + + diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs.background/S_.closed.glif b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs.background/S_.closed.glif new file mode 100644 index 00000000..171df271 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs.background/S_.closed.glif @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs.background/contents.plist b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs.background/contents.plist new file mode 100644 index 00000000..070780aa --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs.background/contents.plist @@ -0,0 +1,8 @@ + + + + + S.closed + S_.closed.glif + + diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs.background/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs.background/layerinfo.plist new file mode 100644 index 00000000..11c425fc --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs.background/layerinfo.plist @@ -0,0 +1,8 @@ + + + + + color + 0.5,1,0,0.7 + + diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/A_.glif b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/A_.glif new file mode 100644 index 00000000..96c2cbb4 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/A_.glif @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.typemytype.robofont.Image.Brightness + 0 + com.typemytype.robofont.Image.Contrast + 1 + com.typemytype.robofont.Image.Saturation + 1 + com.typemytype.robofont.Image.Sharpness + 0.4 + + + diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/I_.glif b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/I_.glif new file mode 100644 index 00000000..61d60d10 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/I_.glif @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/I_.narrow.glif b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/I_.narrow.glif new file mode 100644 index 00000000..50bb19bb --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/I_.narrow.glif @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + com.typemytype.robofont.Image.Brightness + 0 + com.typemytype.robofont.Image.Contrast + 1 + com.typemytype.robofont.Image.Saturation + 1 + com.typemytype.robofont.Image.Sharpness + 0.4 + + + diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/I_J_.glif b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/I_J_.glif new file mode 100644 index 00000000..1b8857b2 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/I_J_.glif @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/S_.closed.glif b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/S_.closed.glif new file mode 100644 index 00000000..8a4d6c74 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/S_.closed.glif @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.letterror.skateboard.navigator + + location + + weight + 1000 + width + 108.0069405692 + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/S_.glif b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/S_.glif new file mode 100644 index 00000000..8d959e05 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/S_.glif @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.typemytype.robofont.Image.Brightness + 0 + com.typemytype.robofont.Image.Contrast + 1 + com.typemytype.robofont.Image.Saturation + 1 + com.typemytype.robofont.Image.Sharpness + 0.4 + + + diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/contents.plist b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/contents.plist new file mode 100644 index 00000000..9f8a737a --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/contents.plist @@ -0,0 +1,18 @@ + + + + + A + A_.glif + I + I_.glif + I.narrow + I_.narrow.glif + IJ + I_J_.glif + S + S_.glif + S.closed + S_.closed.glif + + diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/layerinfo.plist new file mode 100644 index 00000000..a1a92f92 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/layerinfo.plist @@ -0,0 +1,13 @@ + + + + + color + 1,0.75,0,0.7 + lib + + com.typemytype.robofont.segmentType + curve + + + diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/layercontents.plist b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/layercontents.plist new file mode 100644 index 00000000..8964c569 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/layercontents.plist @@ -0,0 +1,14 @@ + + + + + + foreground + glyphs + + + background + glyphs.background + + + diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/lib.plist b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/lib.plist new file mode 100644 index 00000000..789d780e --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/lib.plist @@ -0,0 +1,270 @@ + + + + + com.defcon.sortDescriptor + + + allowPseudoUnicode + + ascending + + type + alphabetical + + + allowPseudoUnicode + + ascending + + type + category + + + allowPseudoUnicode + + ascending + + type + unicode + + + allowPseudoUnicode + + ascending + + type + script + + + allowPseudoUnicode + + ascending + + type + suffix + + + allowPseudoUnicode + + ascending + + type + decompositionBase + + + com.letterror.lightMeter.prefs + + chunkSize + 5 + diameter + 200 + drawTail + + invert + + toolDiameter + 30 + toolStyle + fluid + + com.typemytype.robofont.background.layerStrokeColor + + 0 + 0.8 + 0.2 + 0.7 + + com.typemytype.robofont.compileSettings.autohint + + com.typemytype.robofont.compileSettings.checkOutlines + + com.typemytype.robofont.compileSettings.createDummyDSIG + + com.typemytype.robofont.compileSettings.decompose + + com.typemytype.robofont.compileSettings.generateFormat + 0 + com.typemytype.robofont.compileSettings.releaseMode + + com.typemytype.robofont.foreground.layerStrokeColor + + 0.5 + 0 + 0.5 + 0.7 + + com.typemytype.robofont.italicSlantOffset + 0 + com.typemytype.robofont.segmentType + curve + com.typemytype.robofont.shouldAddPointsInSplineConversion + 1 + com.typesupply.defcon.sortDescriptor + + + ascending + + space + A + B + C + D + E + F + G + H + I + J + K + L + M + N + O + P + Q + R + S + T + U + V + W + X + Y + Z + a + b + c + d + e + f + g + h + i + j + k + l + m + n + ntilde + o + p + q + r + s + t + u + v + w + x + y + z + zcaron + zero + one + two + three + four + five + six + seven + eight + nine + underscore + hyphen + endash + emdash + parenleft + parenright + bracketleft + bracketright + braceleft + braceright + numbersign + percent + period + comma + colon + semicolon + exclam + question + slash + backslash + bar + at + ampersand + paragraph + bullet + dollar + trademark + fi + fl + .notdef + a_b_c + Atilde + Adieresis + Acircumflex + Aring + Ccedilla + Agrave + Aacute + quotedblright + quotedblleft + + type + glyphList + + + public.glyphOrder + + A + Aacute + Adieresis + B + C + D + E + F + G + H + I + J + K + L + M + N + O + P + Q + R + S + T + U + V + W + X + Y + Z + IJ + S.closed + I.narrow + J.narrow + quotesinglbase + quotedblbase + quotedblleft + quotedblright + comma + period + colon + semicolon + dot + dieresis + acute + space + arrowdown + arrowleft + arrowright + arrowup + + + diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/metainfo.plist b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/metainfo.plist new file mode 100644 index 00000000..555d9ce4 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/metainfo.plist @@ -0,0 +1,10 @@ + + + + + creator + com.github.fonttools.ufoLib + formatVersion + 3 + + diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/features.fea b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/features.fea new file mode 100644 index 00000000..50f3fc0a --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/features.fea @@ -0,0 +1 @@ +# this is the feature from BoldWide diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/fontinfo.plist b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/fontinfo.plist new file mode 100644 index 00000000..2204ed8a --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/fontinfo.plist @@ -0,0 +1,69 @@ + + + + + ascender + 800 + capHeight + 800 + copyright + License same as MutatorMath. BSD 3-clause. [test-token: B] + descender + -200 + familyName + MutatorMathTest + guidelines + + + italicAngle + 0 + openTypeNameLicense + License same as MutatorMath. BSD 3-clause. [test-token: B] + openTypeOS2VendorID + LTTR + postscriptBlueValues + + + postscriptDefaultWidthX + 500 + postscriptFamilyBlues + + + postscriptFamilyOtherBlues + + + postscriptFontName + MutatorMathTest-BoldWide + postscriptFullName + MutatorMathTest BoldWide + postscriptOtherBlues + + + postscriptSlantAngle + 0 + postscriptStemSnapH + + + postscriptStemSnapV + + + postscriptWindowsCharacterSet + 1 + styleMapFamilyName + + styleMapStyleName + regular + styleName + BoldWide + unitsPerEm + 1000 + versionMajor + 1 + versionMinor + 2 + xHeight + 500 + year + 2004 + + diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs.background/S_.closed.glif b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs.background/S_.closed.glif new file mode 100644 index 00000000..8edc65fb --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs.background/S_.closed.glif @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs.background/S_.glif b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs.background/S_.glif new file mode 100644 index 00000000..c6e56152 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs.background/S_.glif @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs.background/contents.plist b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs.background/contents.plist new file mode 100644 index 00000000..ad569c1a --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs.background/contents.plist @@ -0,0 +1,10 @@ + + + + + S + S_.glif + S.closed + S_.closed.glif + + diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs.background/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs.background/layerinfo.plist new file mode 100644 index 00000000..11c425fc --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs.background/layerinfo.plist @@ -0,0 +1,8 @@ + + + + + color + 0.5,1,0,0.7 + + diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/A_.glif b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/A_.glif new file mode 100644 index 00000000..2ee56837 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/A_.glif @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/I_.glif b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/I_.glif new file mode 100644 index 00000000..65ac4863 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/I_.glif @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/I_.narrow.glif b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/I_.narrow.glif new file mode 100644 index 00000000..f706273d --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/I_.narrow.glif @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + com.typemytype.robofont.Image.Brightness + 0 + com.typemytype.robofont.Image.Contrast + 1 + com.typemytype.robofont.Image.Saturation + 1 + com.typemytype.robofont.Image.Sharpness + 0.4 + + + diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/I_J_.glif b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/I_J_.glif new file mode 100644 index 00000000..0ede8402 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/I_J_.glif @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/S_.closed.glif b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/S_.closed.glif new file mode 100644 index 00000000..1c43b40f --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/S_.closed.glif @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.typemytype.robofont.Image.Brightness + 0 + com.typemytype.robofont.Image.Contrast + 1 + com.typemytype.robofont.Image.Saturation + 1 + com.typemytype.robofont.Image.Sharpness + 0.4 + + + diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/S_.glif b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/S_.glif new file mode 100644 index 00000000..cd5d502e --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/S_.glif @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.typemytype.robofont.Image.Brightness + 0 + com.typemytype.robofont.Image.Contrast + 1 + com.typemytype.robofont.Image.Saturation + 1 + com.typemytype.robofont.Image.Sharpness + 0.4 + + + diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/contents.plist b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/contents.plist new file mode 100644 index 00000000..9f8a737a --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/contents.plist @@ -0,0 +1,18 @@ + + + + + A + A_.glif + I + I_.glif + I.narrow + I_.narrow.glif + IJ + I_J_.glif + S + S_.glif + S.closed + S_.closed.glif + + diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/layerinfo.plist new file mode 100644 index 00000000..a1a92f92 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/layerinfo.plist @@ -0,0 +1,13 @@ + + + + + color + 1,0.75,0,0.7 + lib + + com.typemytype.robofont.segmentType + curve + + + diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/layercontents.plist b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/layercontents.plist new file mode 100644 index 00000000..8964c569 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/layercontents.plist @@ -0,0 +1,14 @@ + + + + + + foreground + glyphs + + + background + glyphs.background + + + diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/lib.plist b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/lib.plist new file mode 100644 index 00000000..212920f8 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/lib.plist @@ -0,0 +1,396 @@ + + + + + com.defcon.sortDescriptor + + + allowPseudoUnicode + + ascending + + type + alphabetical + + + allowPseudoUnicode + + ascending + + type + category + + + allowPseudoUnicode + + ascending + + type + unicode + + + allowPseudoUnicode + + ascending + + type + script + + + allowPseudoUnicode + + ascending + + type + suffix + + + allowPseudoUnicode + + ascending + + type + decompositionBase + + + com.letterror.lightMeter.prefs + + chunkSize + 5 + diameter + 200 + drawTail + + invert + + toolDiameter + 30 + toolStyle + fluid + + com.typemytype.robofont.background.layerStrokeColor + + 0 + 0.8 + 0.2 + 0.7 + + com.typemytype.robofont.compileSettings.autohint + + com.typemytype.robofont.compileSettings.checkOutlines + + com.typemytype.robofont.compileSettings.createDummyDSIG + + com.typemytype.robofont.compileSettings.decompose + + com.typemytype.robofont.compileSettings.generateFormat + 0 + com.typemytype.robofont.compileSettings.releaseMode + + com.typemytype.robofont.foreground.layerStrokeColor + + 0.5 + 0 + 0.5 + 0.7 + + com.typemytype.robofont.italicSlantOffset + 0 + com.typemytype.robofont.segmentType + curve + com.typemytype.robofont.shouldAddPointsInSplineConversion + 1 + com.typesupply.defcon.sortDescriptor + + + ascending + + space + A + Agrave + Aacute + Acircumflex + Atilde + Adieresis + Aring + B + C + Ccedilla + D + E + Egrave + Eacute + Ecircumflex + Edieresis + F + G + H + I + Igrave + Iacute + Icircumflex + Idieresis + J + K + L + M + N + Ntilde + O + Ograve + Oacute + Ocircumflex + Otilde + Odieresis + P + Q + R + S + Scaron + T + U + Ugrave + Uacute + Ucircumflex + Udieresis + V + W + X + Y + Yacute + Ydieresis + Z + Zcaron + AE + Eth + Oslash + Thorn + Lslash + OE + a + agrave + aacute + acircumflex + atilde + adieresis + aring + b + c + ccedilla + d + e + egrave + eacute + ecircumflex + edieresis + f + g + h + i + igrave + iacute + icircumflex + idieresis + j + k + l + m + n + ntilde + o + ograve + oacute + ocircumflex + otilde + odieresis + p + q + r + s + scaron + t + u + ugrave + uacute + ucircumflex + udieresis + v + w + x + y + yacute + ydieresis + z + zcaron + ordfeminine + ordmasculine + germandbls + ae + eth + oslash + thorn + dotlessi + lslash + oe + zero + one + two + three + four + five + six + seven + eight + nine + onesuperior + twosuperior + threesuperior + onequarter + onehalf + threequarters + underscore + hyphen + endash + emdash + parenleft + parenright + bracketleft + bracketright + braceleft + braceright + numbersign + percent + perthousand + quotesingle + quotedbl + quoteleft + quoteright + quotedblleft + quotedblright + quotesinglbase + quotedblbase + guilsinglleft + guilsinglright + guillemotleft + guillemotright + asterisk + dagger + daggerdbl + period + comma + colon + semicolon + ellipsis + exclam + exclamdown + question + questiondown + slash + backslash + fraction + bar + brokenbar + at + ampersand + section + paragraph + periodcentered + bullet + plus + minus + plusminus + divide + multiply + equal + less + greater + logicalnot + mu + dollar + cent + sterling + currency + yen + Euro + florin + asciicircum + asciitilde + acute + grave + hungarumlaut + circumflex + caron + breve + tilde + macron + dieresis + dotaccent + ring + cedilla + ogonek + copyright + registered + trademark + degree + fi + fl + .notdef + a_b_c + + type + glyphList + + + public.glyphOrder + + A + Aacute + Adieresis + B + C + D + E + F + G + H + I + J + K + L + M + N + O + P + Q + R + S + T + U + V + W + X + Y + Z + S.closed + I.narrow + J.narrow + quotesinglbase + quotedblbase + quotedblleft + quotedblright + comma + period + colon + semicolon + dot + dieresis + acute + space + IJ + arrowdown + arrowleft + arrowright + arrowup + + + diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/metainfo.plist b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/metainfo.plist new file mode 100644 index 00000000..555d9ce4 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/metainfo.plist @@ -0,0 +1,10 @@ + + + + + creator + com.github.fonttools.ufoLib + formatVersion + 3 + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/features.fea b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/features.fea new file mode 100644 index 00000000..d48f133e --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/features.fea @@ -0,0 +1,2 @@ +# this is the feature from lightCondensed +# Hi_this_is_the_feature. diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/fontinfo.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/fontinfo.plist new file mode 100644 index 00000000..9c345653 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/fontinfo.plist @@ -0,0 +1,69 @@ + + + + + ascender + 700 + capHeight + 700 + copyright + License same as MutatorMath. BSD 3-clause. [test-token: C] + descender + -200 + familyName + MutatorMathTest + guidelines + + + italicAngle + 0 + openTypeNameLicense + License same as MutatorMath. BSD 3-clause. [test-token: C] + openTypeOS2VendorID + LTTR + postscriptBlueValues + + + postscriptDefaultWidthX + 500 + postscriptFamilyBlues + + + postscriptFamilyOtherBlues + + + postscriptFontName + MutatorMathTest-LightCondensed + postscriptFullName + MutatorMathTest LightCondensed + postscriptOtherBlues + + + postscriptSlantAngle + 0 + postscriptStemSnapH + + + postscriptStemSnapV + + + postscriptWindowsCharacterSet + 1 + styleMapFamilyName + + styleMapStyleName + regular + styleName + LightCondensed + unitsPerEm + 1000 + versionMajor + 1 + versionMinor + 2 + xHeight + 500 + year + 2004 + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.background/S_.closed.glif b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.background/S_.closed.glif new file mode 100644 index 00000000..961125dd --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.background/S_.closed.glif @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.background/S_.glif b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.background/S_.glif new file mode 100644 index 00000000..824f5951 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.background/S_.glif @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.letterror.skateboard.navigator + + location + + weight + 820 + width + 1000 + + + com.typemytype.robofont.Image.Brightness + 0 + com.typemytype.robofont.Image.Contrast + 1 + com.typemytype.robofont.Image.Saturation + 1 + com.typemytype.robofont.Image.Sharpness + 0.4 + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.background/contents.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.background/contents.plist new file mode 100644 index 00000000..ad569c1a --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.background/contents.plist @@ -0,0 +1,10 @@ + + + + + S + S_.glif + S.closed + S_.closed.glif + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.background/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.background/layerinfo.plist new file mode 100644 index 00000000..f4b11f8f --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.background/layerinfo.plist @@ -0,0 +1,8 @@ + + + + + color + 0,1,1,0.7 + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/S_.closed.glif b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/S_.closed.glif new file mode 100644 index 00000000..b215ae51 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/S_.closed.glif @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.letterror.skateboard.navigator + + location + + weight + 700 + width + 569.078 + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/contents.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/contents.plist new file mode 100644 index 00000000..070780aa --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/contents.plist @@ -0,0 +1,8 @@ + + + + + S.closed + S_.closed.glif + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/layerinfo.plist new file mode 100644 index 00000000..d308c316 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/layerinfo.plist @@ -0,0 +1,8 @@ + + + + + color + 0.5,0,1,0.7 + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/S_.closed.glif b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/S_.closed.glif new file mode 100644 index 00000000..6166c85a --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/S_.closed.glif @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.letterror.skateboard.navigator + + location + + weight + 673.7998527961 + width + 1000 + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/S_.glif b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/S_.glif new file mode 100644 index 00000000..fb72577c --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/S_.glif @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.letterror.skateboard.navigator + + location + + weight + 759.5997715405 + width + 1000 + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/contents.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/contents.plist new file mode 100644 index 00000000..ad569c1a --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/contents.plist @@ -0,0 +1,10 @@ + + + + + S + S_.glif + S.closed + S_.closed.glif + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/layerinfo.plist new file mode 100644 index 00000000..c8b71789 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/layerinfo.plist @@ -0,0 +1,8 @@ + + + + + color + 0,0.25,1,0.7 + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/S_.glif b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/S_.glif new file mode 100644 index 00000000..7b885787 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/S_.glif @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.letterror.skateboard.navigator + + location + + weight + 889.1982375724 + width + 0 + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/contents.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/contents.plist new file mode 100644 index 00000000..269fb998 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/contents.plist @@ -0,0 +1,8 @@ + + + + + S + S_.glif + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/layerinfo.plist new file mode 100644 index 00000000..7c2e64be --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/layerinfo.plist @@ -0,0 +1,8 @@ + + + + + color + 0,1,0.25,0.7 + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbars/E_.glif b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbars/E_.glif new file mode 100644 index 00000000..0efc33a1 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbars/E_.glif @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbars/contents.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbars/contents.plist new file mode 100644 index 00000000..a14a2f5a --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbars/contents.plist @@ -0,0 +1,8 @@ + + + + + E + E_.glif + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbars/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbars/layerinfo.plist new file mode 100644 index 00000000..564c7a6b --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbars/layerinfo.plist @@ -0,0 +1,5 @@ + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support/A_.glif b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support/A_.glif new file mode 100644 index 00000000..cda1ef49 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support/A_.glif @@ -0,0 +1,29 @@ + + + + + + + com.letterror.skateboard.navigator + + location + + space + 0 + weight + 600 + width + 500 + + + com.typemytype.robofont.Image.Brightness + 0 + com.typemytype.robofont.Image.Contrast + 1 + com.typemytype.robofont.Image.Saturation + 1 + com.typemytype.robofont.Image.Sharpness + 0.4 + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support/S_.glif b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support/S_.glif new file mode 100644 index 00000000..104c47bd --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support/S_.glif @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.letterror.skateboard.navigator + + location + + space + 25 + weight + 707.6485770089 + width + 181.3105119978 + + + com.typemytype.robofont.Image.Brightness + 0 + com.typemytype.robofont.Image.Contrast + 1 + com.typemytype.robofont.Image.Saturation + 1 + com.typemytype.robofont.Image.Sharpness + 0.4 + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support/contents.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support/contents.plist new file mode 100644 index 00000000..6aa5de8c --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support/contents.plist @@ -0,0 +1,10 @@ + + + + + A + A_.glif + S + S_.glif + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support/layerinfo.plist new file mode 100644 index 00000000..044b46c6 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support/layerinfo.plist @@ -0,0 +1,13 @@ + + + + + color + 0,1,0.25,0.7 + lib + + com.typemytype.robofont.segmentType + curve + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/A_.glif b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/A_.glif new file mode 100644 index 00000000..9919ca8a --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/A_.glif @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/I_.glif b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/I_.glif new file mode 100644 index 00000000..5833a6b2 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/I_.glif @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/I_.narrow.glif b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/I_.narrow.glif new file mode 100644 index 00000000..6c0ac44b --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/I_.narrow.glif @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + com.typemytype.robofont.Image.Brightness + 0 + com.typemytype.robofont.Image.Contrast + 1 + com.typemytype.robofont.Image.Saturation + 1 + com.typemytype.robofont.Image.Sharpness + 0.4 + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/I_J_.glif b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/I_J_.glif new file mode 100644 index 00000000..66b0b682 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/I_J_.glif @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/S_.closed.glif b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/S_.closed.glif new file mode 100644 index 00000000..2972471f --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/S_.closed.glif @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/S_.glif b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/S_.glif new file mode 100644 index 00000000..0215663a --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/S_.glif @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.typemytype.robofont.Image.Brightness + 0 + com.typemytype.robofont.Image.Contrast + 1 + com.typemytype.robofont.Image.Saturation + 1 + com.typemytype.robofont.Image.Sharpness + 0.4 + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/contents.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/contents.plist new file mode 100644 index 00000000..9f8a737a --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/contents.plist @@ -0,0 +1,18 @@ + + + + + A + A_.glif + I + I_.glif + I.narrow + I_.narrow.glif + IJ + I_J_.glif + S + S_.glif + S.closed + S_.closed.glif + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/layerinfo.plist new file mode 100644 index 00000000..a1a92f92 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/layerinfo.plist @@ -0,0 +1,13 @@ + + + + + color + 1,0.75,0,0.7 + lib + + com.typemytype.robofont.segmentType + curve + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/layercontents.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/layercontents.plist new file mode 100644 index 00000000..4e957cd1 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/layercontents.plist @@ -0,0 +1,30 @@ + + + + + + foreground + glyphs + + + support + glyphs.support + + + support.crossbar + glyphs.support.crossbar + + + background + glyphs.background + + + support.S.wide + glyphs.support.S_.wide + + + support.S.middle + glyphs.support.S_.middle + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/lib.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/lib.plist new file mode 100644 index 00000000..47a92b78 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/lib.plist @@ -0,0 +1,685 @@ + + + + + com.defcon.sortDescriptor + + + allowPseudoUnicode + + ascending + + type + alphabetical + + + allowPseudoUnicode + + ascending + + type + category + + + allowPseudoUnicode + + ascending + + type + unicode + + + allowPseudoUnicode + + ascending + + type + script + + + allowPseudoUnicode + + ascending + + type + suffix + + + allowPseudoUnicode + + ascending + + type + decompositionBase + + + com.letterror.lightMeter.prefs + + chunkSize + 5 + diameter + 200 + drawTail + + invert + + toolDiameter + 30 + toolStyle + fluid + + com.typemytype.robofont.background.layerStrokeColor + + 0 + 0.8 + 0.2 + 0.7 + + com.typemytype.robofont.compileSettings.autohint + + com.typemytype.robofont.compileSettings.checkOutlines + + com.typemytype.robofont.compileSettings.createDummyDSIG + + com.typemytype.robofont.compileSettings.decompose + + com.typemytype.robofont.compileSettings.generateFormat + 0 + com.typemytype.robofont.compileSettings.releaseMode + + com.typemytype.robofont.foreground.layerStrokeColor + + 0.5 + 0 + 0.5 + 0.7 + + com.typemytype.robofont.italicSlantOffset + 0 + com.typemytype.robofont.segmentType + curve + com.typemytype.robofont.shouldAddPointsInSplineConversion + 1 + com.typesupply.MetricsMachine4.groupColors + + @MMK_L_A + + 1 + 0 + 0 + 0.25 + + @MMK_L_C + + 1 + 0.5 + 0 + 0.25 + + @MMK_L_E + + 1 + 1 + 0 + 0.25 + + @MMK_L_I + + 0 + 1 + 0 + 0.25 + + @MMK_L_N + + 0 + 1 + 1 + 0.25 + + @MMK_L_O + + 0 + 0.5 + 1 + 0.25 + + @MMK_L_S + + 0 + 0 + 1 + 0.25 + + @MMK_L_U + + 0.5 + 0 + 1 + 0.25 + + @MMK_L_Y + + 1 + 0 + 1 + 0.25 + + @MMK_L_Z + + 1 + 0 + 0.5 + 0.25 + + @MMK_L_a + + 1 + 0 + 0 + 0.25 + + @MMK_L_c + + 1 + 0.5 + 0 + 0.25 + + @MMK_L_e + + 1 + 1 + 0 + 0.25 + + @MMK_L_i + + 0 + 1 + 0 + 0.25 + + @MMK_L_n + + 0 + 1 + 1 + 0.25 + + @MMK_L_o + + 0 + 0.5 + 1 + 0.25 + + @MMK_L_s + + 0 + 0 + 1 + 0.25 + + @MMK_L_u + + 0.5 + 0 + 1 + 0.25 + + @MMK_L_y + + 1 + 0 + 1 + 0.25 + + @MMK_L_z + + 1 + 0 + 0.5 + 0.25 + + @MMK_R_A + + 1 + 0 + 0 + 0.25 + + @MMK_R_C + + 1 + 0.5 + 0 + 0.25 + + @MMK_R_E + + 1 + 1 + 0 + 0.25 + + @MMK_R_I + + 0 + 1 + 0 + 0.25 + + @MMK_R_N + + 0 + 1 + 1 + 0.25 + + @MMK_R_O + + 0 + 0.5 + 1 + 0.25 + + @MMK_R_S + + 0 + 0 + 1 + 0.25 + + @MMK_R_U + + 0.5 + 0 + 1 + 0.25 + + @MMK_R_Y + + 1 + 0 + 1 + 0.25 + + @MMK_R_Z + + 1 + 0 + 0.5 + 0.25 + + @MMK_R_a + + 1 + 0 + 0 + 0.25 + + @MMK_R_c + + 1 + 0.5 + 0 + 0.25 + + @MMK_R_e + + 1 + 1 + 0 + 0.25 + + @MMK_R_i + + 0 + 1 + 0 + 0.25 + + @MMK_R_n + + 0 + 1 + 1 + 0.25 + + @MMK_R_o + + 0 + 0.5 + 1 + 0.25 + + @MMK_R_s + + 0 + 0 + 1 + 0.25 + + @MMK_R_u + + 0.5 + 0 + 1 + 0.25 + + @MMK_R_y + + 1 + 0 + 1 + 0.25 + + @MMK_R_z + + 1 + 0 + 0.5 + 0.25 + + + com.typesupply.defcon.sortDescriptor + + + ascending + + space + A + Agrave + Aacute + Acircumflex + Atilde + Adieresis + Aring + B + C + Ccedilla + D + E + Egrave + Eacute + Ecircumflex + Edieresis + F + G + H + I + Igrave + Iacute + Icircumflex + Idieresis + J + K + L + M + N + Ntilde + O + Ograve + Oacute + Ocircumflex + Otilde + Odieresis + P + Q + R + S + Scaron + T + U + Ugrave + Uacute + Ucircumflex + Udieresis + V + W + X + Y + Yacute + Ydieresis + Z + Zcaron + AE + Eth + Oslash + Thorn + Lslash + OE + a + agrave + aacute + acircumflex + atilde + adieresis + aring + b + c + ccedilla + d + e + egrave + eacute + ecircumflex + edieresis + f + g + h + i + igrave + iacute + icircumflex + idieresis + j + k + l + m + n + ntilde + o + ograve + oacute + ocircumflex + otilde + odieresis + p + q + r + s + scaron + t + u + ugrave + uacute + ucircumflex + udieresis + v + w + x + y + yacute + ydieresis + z + zcaron + ordfeminine + ordmasculine + germandbls + ae + eth + oslash + thorn + dotlessi + lslash + oe + mu + zero + one + two + three + four + five + six + seven + eight + nine + onesuperior + twosuperior + threesuperior + onequarter + onehalf + threequarters + underscore + hyphen + endash + emdash + parenleft + parenright + bracketleft + bracketright + braceleft + braceright + numbersign + percent + perthousand + quotesingle + quotedbl + quoteleft + quoteright + quotedblleft + quotedblright + quotesinglbase + quotedblbase + guilsinglleft + guilsinglright + asterisk + dagger + daggerdbl + period + comma + colon + semicolon + ellipsis + exclam + exclamdown + question + questiondown + slash + backslash + fraction + bar + brokenbar + at + ampersand + section + paragraph + periodcentered + bullet + plus + minus + plusminus + divide + multiply + equal + less + greater + logicalnot + dollar + cent + sterling + currency + yen + Euro + asciicircum + asciitilde + acute + grave + hungarumlaut + circumflex + caron + breve + tilde + macron + dieresis + dotaccent + ring + cedilla + ogonek + copyright + registered + trademark + degree + florin + guillemotleft + guillemotright + fi + fl + a_b_c + .notdef + + type + glyphList + + + public.glyphOrder + + A + Aacute + Adieresis + B + C + D + E + F + G + H + I + J + K + L + M + N + O + P + Q + R + S + T + U + V + W + X + Y + Z + S.closed + I.narrow + J.narrow + quotesinglbase + quotedblbase + quotedblleft + quotedblright + comma + period + colon + semicolon + arrowleft + arrowup + arrowright + arrowdown + dot + dieresis + acute + space + IJ + + testLibItemKey + + a + b + c + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/metainfo.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/metainfo.plist new file mode 100644 index 00000000..555d9ce4 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/metainfo.plist @@ -0,0 +1,10 @@ + + + + + creator + com.github.fonttools.ufoLib + formatVersion + 3 + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/features.fea b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/features.fea new file mode 100644 index 00000000..29234c51 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/features.fea @@ -0,0 +1 @@ +# this is the feature from lightWide diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/fontinfo.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/fontinfo.plist new file mode 100644 index 00000000..4112d763 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/fontinfo.plist @@ -0,0 +1,69 @@ + + + + + ascender + 700 + capHeight + 700 + copyright + License same as MutatorMath. BSD 3-clause. [test-token: D] + descender + -200 + familyName + MutatorMathTest + guidelines + + + italicAngle + 0 + openTypeNameLicense + License same as MutatorMath. BSD 3-clause. [test-token: D] + openTypeOS2VendorID + LTTR + postscriptBlueValues + + + postscriptDefaultWidthX + 500 + postscriptFamilyBlues + + + postscriptFamilyOtherBlues + + + postscriptFontName + MutatorMathTest-LightWide + postscriptFullName + MutatorMathTest LightWide + postscriptOtherBlues + + + postscriptSlantAngle + 0 + postscriptStemSnapH + + + postscriptStemSnapV + + + postscriptWindowsCharacterSet + 1 + styleMapFamilyName + + styleMapStyleName + regular + styleName + LightWide + unitsPerEm + 1000 + versionMajor + 1 + versionMinor + 2 + xHeight + 500 + year + 2004 + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.background/S_.closed.glif b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.background/S_.closed.glif new file mode 100644 index 00000000..24ce93ad --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.background/S_.closed.glif @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.background/contents.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.background/contents.plist new file mode 100644 index 00000000..070780aa --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.background/contents.plist @@ -0,0 +1,8 @@ + + + + + S.closed + S_.closed.glif + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.background/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.background/layerinfo.plist new file mode 100644 index 00000000..11c425fc --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.background/layerinfo.plist @@ -0,0 +1,8 @@ + + + + + color + 0.5,1,0,0.7 + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_0.00_weight_0.00/contents.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_0.00_weight_0.00/contents.plist new file mode 100644 index 00000000..0c67376e --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_0.00_weight_0.00/contents.plist @@ -0,0 +1,5 @@ + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_0.00_weight_0.00/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_0.00_weight_0.00/layerinfo.plist new file mode 100644 index 00000000..cd2c7c02 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_0.00_weight_0.00/layerinfo.plist @@ -0,0 +1,8 @@ + + + + + color + 0,0.25,1,0.7 + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_500.00_weight_500.00/S_.glif b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_500.00_weight_500.00/S_.glif new file mode 100644 index 00000000..81a594ce --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_500.00_weight_500.00/S_.glif @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_500.00_weight_500.00/contents.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_500.00_weight_500.00/contents.plist new file mode 100644 index 00000000..8087673b --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_500.00_weight_500.00/contents.plist @@ -0,0 +1,8 @@ + + + + + S + S_.glif + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_500.00_weight_500.00/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_500.00_weight_500.00/layerinfo.plist new file mode 100644 index 00000000..11dd5c2b --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_500.00_weight_500.00/layerinfo.plist @@ -0,0 +1,13 @@ + + + + + color + 0,1,0.25,0.7 + lib + + com.typemytype.robofont.segmentType + curve + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_695.65_weight_166.38/contents.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_695.65_weight_166.38/contents.plist new file mode 100644 index 00000000..0c67376e --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_695.65_weight_166.38/contents.plist @@ -0,0 +1,5 @@ + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_695.65_weight_166.38/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_695.65_weight_166.38/layerinfo.plist new file mode 100644 index 00000000..7c15f1ab --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_695.65_weight_166.38/layerinfo.plist @@ -0,0 +1,8 @@ + + + + + color + 0.5,0,1,0.7 + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_720.00_weight_645.00/S_.glif b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_720.00_weight_645.00/S_.glif new file mode 100644 index 00000000..3ea5029d --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_720.00_weight_645.00/S_.glif @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_720.00_weight_645.00/contents.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_720.00_weight_645.00/contents.plist new file mode 100644 index 00000000..8087673b --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_720.00_weight_645.00/contents.plist @@ -0,0 +1,8 @@ + + + + + S + S_.glif + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_720.00_weight_645.00/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_720.00_weight_645.00/layerinfo.plist new file mode 100644 index 00000000..5c424780 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_720.00_weight_645.00/layerinfo.plist @@ -0,0 +1,13 @@ + + + + + color + 0,1,1,0.7 + lib + + com.typemytype.robofont.segmentType + curve + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/A_.glif b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/A_.glif new file mode 100644 index 00000000..6d724993 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/A_.glif @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.typemytype.robofont.Image.Brightness + 0 + com.typemytype.robofont.Image.Contrast + 1 + com.typemytype.robofont.Image.Saturation + 1 + com.typemytype.robofont.Image.Sharpness + 0.4 + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/I_.glif b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/I_.glif new file mode 100644 index 00000000..155e81d0 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/I_.glif @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/I_.narrow.glif b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/I_.narrow.glif new file mode 100644 index 00000000..9d79c5ca --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/I_.narrow.glif @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + com.typemytype.robofont.Image.Brightness + 0 + com.typemytype.robofont.Image.Contrast + 1 + com.typemytype.robofont.Image.Saturation + 1 + com.typemytype.robofont.Image.Sharpness + 0.4 + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/I_J_.glif b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/I_J_.glif new file mode 100644 index 00000000..51d9df58 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/I_J_.glif @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/S_.closed.glif b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/S_.closed.glif new file mode 100644 index 00000000..e6a958d1 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/S_.closed.glif @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/S_.glif b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/S_.glif new file mode 100644 index 00000000..349c3fe9 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/S_.glif @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.typemytype.robofont.Image.Brightness + 0 + com.typemytype.robofont.Image.Contrast + 1 + com.typemytype.robofont.Image.Saturation + 1 + com.typemytype.robofont.Image.Sharpness + 0.4 + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/contents.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/contents.plist new file mode 100644 index 00000000..9f8a737a --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/contents.plist @@ -0,0 +1,18 @@ + + + + + A + A_.glif + I + I_.glif + I.narrow + I_.narrow.glif + IJ + I_J_.glif + S + S_.glif + S.closed + S_.closed.glif + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/layerinfo.plist new file mode 100644 index 00000000..a1a92f92 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/layerinfo.plist @@ -0,0 +1,13 @@ + + + + + color + 1,0.75,0,0.7 + lib + + com.typemytype.robofont.segmentType + curve + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/layercontents.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/layercontents.plist new file mode 100644 index 00000000..8964c569 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/layercontents.plist @@ -0,0 +1,14 @@ + + + + + + foreground + glyphs + + + background + glyphs.background + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/lib.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/lib.plist new file mode 100644 index 00000000..046c3a3c --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/lib.plist @@ -0,0 +1,664 @@ + + + + + com.defcon.sortDescriptor + + + allowPseudoUnicode + + ascending + + type + alphabetical + + + allowPseudoUnicode + + ascending + + type + category + + + allowPseudoUnicode + + ascending + + type + unicode + + + allowPseudoUnicode + + ascending + + type + script + + + allowPseudoUnicode + + ascending + + type + suffix + + + allowPseudoUnicode + + ascending + + type + decompositionBase + + + com.typemytype.robofont.background.layerStrokeColor + + 1 + 0.75 + 0 + 0.7 + + com.typemytype.robofont.compileSettings.autohint + + com.typemytype.robofont.compileSettings.checkOutlines + + com.typemytype.robofont.compileSettings.createDummyDSIG + + com.typemytype.robofont.compileSettings.decompose + + com.typemytype.robofont.compileSettings.generateFormat + 0 + com.typemytype.robofont.compileSettings.releaseMode + + com.typemytype.robofont.foreground.layerStrokeColor + + 0.5 + 0 + 0.5 + 0.7 + + com.typemytype.robofont.italicSlantOffset + 0 + com.typemytype.robofont.segmentType + curve + com.typemytype.robofont.shouldAddPointsInSplineConversion + 1 + com.typesupply.MetricsMachine4.groupColors + + @MMK_L_A + + 1 + 0 + 0 + 0.25 + + @MMK_L_C + + 1 + 0.5 + 0 + 0.25 + + @MMK_L_E + + 1 + 1 + 0 + 0.25 + + @MMK_L_I + + 0 + 1 + 0 + 0.25 + + @MMK_L_N + + 0 + 1 + 1 + 0.25 + + @MMK_L_O + + 0 + 0.5 + 1 + 0.25 + + @MMK_L_S + + 0 + 0 + 1 + 0.25 + + @MMK_L_U + + 0.5 + 0 + 1 + 0.25 + + @MMK_L_Y + + 1 + 0 + 1 + 0.25 + + @MMK_L_Z + + 1 + 0 + 0.5 + 0.25 + + @MMK_L_a + + 1 + 0 + 0 + 0.25 + + @MMK_L_c + + 1 + 0.5 + 0 + 0.25 + + @MMK_L_e + + 1 + 1 + 0 + 0.25 + + @MMK_L_i + + 0 + 1 + 0 + 0.25 + + @MMK_L_n + + 0 + 1 + 1 + 0.25 + + @MMK_L_o + + 0 + 0.5 + 1 + 0.25 + + @MMK_L_s + + 0 + 0 + 1 + 0.25 + + @MMK_L_u + + 0.5 + 0 + 1 + 0.25 + + @MMK_L_y + + 1 + 0 + 1 + 0.25 + + @MMK_L_z + + 1 + 0 + 0.5 + 0.25 + + @MMK_R_A + + 1 + 0 + 0 + 0.25 + + @MMK_R_C + + 1 + 0.5 + 0 + 0.25 + + @MMK_R_E + + 1 + 1 + 0 + 0.25 + + @MMK_R_I + + 0 + 1 + 0 + 0.25 + + @MMK_R_N + + 0 + 1 + 1 + 0.25 + + @MMK_R_O + + 0 + 0.5 + 1 + 0.25 + + @MMK_R_S + + 0 + 0 + 1 + 0.25 + + @MMK_R_U + + 0.5 + 0 + 1 + 0.25 + + @MMK_R_Y + + 1 + 0 + 1 + 0.25 + + @MMK_R_Z + + 1 + 0 + 0.5 + 0.25 + + @MMK_R_a + + 1 + 0 + 0 + 0.25 + + @MMK_R_c + + 1 + 0.5 + 0 + 0.25 + + @MMK_R_e + + 1 + 1 + 0 + 0.25 + + @MMK_R_i + + 0 + 1 + 0 + 0.25 + + @MMK_R_n + + 0 + 1 + 1 + 0.25 + + @MMK_R_o + + 0 + 0.5 + 1 + 0.25 + + @MMK_R_s + + 0 + 0 + 1 + 0.25 + + @MMK_R_u + + 0.5 + 0 + 1 + 0.25 + + @MMK_R_y + + 1 + 0 + 1 + 0.25 + + @MMK_R_z + + 1 + 0 + 0.5 + 0.25 + + + com.typesupply.defcon.sortDescriptor + + + ascending + + space + A + Agrave + Aacute + Acircumflex + Atilde + Adieresis + Aring + B + C + Ccedilla + D + E + Egrave + Eacute + Ecircumflex + Edieresis + F + G + H + I + Igrave + Iacute + Icircumflex + Idieresis + J + K + L + M + N + Ntilde + O + Ograve + Oacute + Ocircumflex + Otilde + Odieresis + P + Q + R + S + Scaron + T + U + Ugrave + Uacute + Ucircumflex + Udieresis + V + W + X + Y + Yacute + Ydieresis + Z + Zcaron + AE + Eth + Oslash + Thorn + Lslash + OE + a + agrave + aacute + acircumflex + atilde + adieresis + aring + b + c + ccedilla + d + e + egrave + eacute + ecircumflex + edieresis + f + g + h + i + igrave + iacute + icircumflex + idieresis + j + k + l + m + n + ntilde + o + ograve + oacute + ocircumflex + otilde + odieresis + p + q + r + s + scaron + t + u + ugrave + uacute + ucircumflex + udieresis + v + w + x + y + yacute + ydieresis + z + zcaron + ordfeminine + ordmasculine + germandbls + ae + eth + oslash + thorn + dotlessi + lslash + oe + zero + one + two + three + four + five + six + seven + eight + nine + onesuperior + twosuperior + threesuperior + onequarter + onehalf + threequarters + underscore + hyphen + endash + emdash + parenleft + parenright + bracketleft + bracketright + braceleft + braceright + numbersign + percent + perthousand + quotesingle + quotedbl + quoteleft + quoteright + quotedblleft + quotedblright + quotesinglbase + quotedblbase + guilsinglleft + guilsinglright + guillemotleft + guillemotright + asterisk + dagger + daggerdbl + period + comma + colon + semicolon + ellipsis + exclam + exclamdown + question + questiondown + slash + backslash + fraction + bar + brokenbar + at + ampersand + section + paragraph + periodcentered + bullet + plus + minus + plusminus + divide + multiply + equal + less + greater + logicalnot + mu + dollar + cent + sterling + currency + yen + Euro + florin + asciicircum + asciitilde + acute + grave + hungarumlaut + circumflex + caron + breve + tilde + macron + dieresis + dotaccent + ring + cedilla + ogonek + copyright + registered + trademark + degree + fi + fl + .notdef + a_b_c + + type + glyphList + + + public.glyphOrder + + A + Aacute + Adieresis + B + C + D + E + F + G + H + I + J + K + L + M + N + O + P + Q + R + S + T + U + V + W + X + Y + Z + S.closed + I.narrow + J.narrow + quotesinglbase + quotedblbase + quotedblleft + quotedblright + comma + period + colon + semicolon + arrowleft + arrowup + arrowright + arrowdown + dot + dieresis + acute + space + IJ + + + diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/metainfo.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/metainfo.plist new file mode 100644 index 00000000..555d9ce4 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/metainfo.plist @@ -0,0 +1,10 @@ + + + + + creator + com.github.fonttools.ufoLib + formatVersion + 3 + + diff --git a/tests/data/MutatorSansLite/MutatorSans_v5_implicit_one_vf.designspace b/tests/data/MutatorSansLite/MutatorSans_v5_implicit_one_vf.designspace new file mode 100644 index 00000000..d46aa7a6 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSans_v5_implicit_one_vf.designspace @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSans_v5_several_vfs.designspace b/tests/data/MutatorSansLite/MutatorSans_v5_several_vfs.designspace new file mode 100644 index 00000000..f87907dc --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSans_v5_several_vfs.designspace @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSans_v5_several_vfs_discrete_axis.designspace b/tests/data/MutatorSansLite/MutatorSans_v5_several_vfs_discrete_axis.designspace new file mode 100644 index 00000000..8b7dfde4 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSans_v5_several_vfs_discrete_axis.designspace @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/features.fea b/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/features.fea new file mode 100644 index 00000000..d48f133e --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/features.fea @@ -0,0 +1,2 @@ +# this is the feature from lightCondensed +# Hi_this_is_the_feature. diff --git a/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/fontinfo.plist b/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/fontinfo.plist new file mode 100644 index 00000000..5868628c --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/fontinfo.plist @@ -0,0 +1,69 @@ + + + + + ascender + 700 + capHeight + 700 + copyright + License same as MutatorMath. BSD 3-clause. [test-token: C] + descender + -200 + familyName + MutatorMathTest + guidelines + + + italicAngle + 0 + openTypeNameLicense + License same as MutatorMath. BSD 3-clause. [test-token: C] + openTypeOS2VendorID + LTTR + postscriptBlueValues + + + postscriptDefaultWidthX + 500 + postscriptFamilyBlues + + + postscriptFamilyOtherBlues + + + postscriptFontName + MutatorMathTest-LightCondensed + postscriptFullName + MutatorMathTest LightCondensed + postscriptOtherBlues + + + postscriptSlantAngle + 0 + postscriptStemSnapH + + + postscriptStemSnapV + + + postscriptWindowsCharacterSet + 1 + styleMapFamilyName + + styleMapStyleName + regular + styleName + SerifLightCondensed + unitsPerEm + 1000 + versionMajor + 1 + versionMinor + 2 + xHeight + 500 + year + 2004 + + diff --git a/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/glyphs/A_.glif b/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/glyphs/A_.glif new file mode 100644 index 00000000..09716ab2 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/glyphs/A_.glif @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/glyphs/contents.plist b/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/glyphs/contents.plist new file mode 100644 index 00000000..be1cec83 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/glyphs/contents.plist @@ -0,0 +1,8 @@ + + + + + A + A_.glif + + diff --git a/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/layercontents.plist b/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/layercontents.plist new file mode 100644 index 00000000..0de42769 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/layercontents.plist @@ -0,0 +1,10 @@ + + + + + + foreground + glyphs + + + diff --git a/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/lib.plist b/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/lib.plist new file mode 100644 index 00000000..47a92b78 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/lib.plist @@ -0,0 +1,685 @@ + + + + + com.defcon.sortDescriptor + + + allowPseudoUnicode + + ascending + + type + alphabetical + + + allowPseudoUnicode + + ascending + + type + category + + + allowPseudoUnicode + + ascending + + type + unicode + + + allowPseudoUnicode + + ascending + + type + script + + + allowPseudoUnicode + + ascending + + type + suffix + + + allowPseudoUnicode + + ascending + + type + decompositionBase + + + com.letterror.lightMeter.prefs + + chunkSize + 5 + diameter + 200 + drawTail + + invert + + toolDiameter + 30 + toolStyle + fluid + + com.typemytype.robofont.background.layerStrokeColor + + 0 + 0.8 + 0.2 + 0.7 + + com.typemytype.robofont.compileSettings.autohint + + com.typemytype.robofont.compileSettings.checkOutlines + + com.typemytype.robofont.compileSettings.createDummyDSIG + + com.typemytype.robofont.compileSettings.decompose + + com.typemytype.robofont.compileSettings.generateFormat + 0 + com.typemytype.robofont.compileSettings.releaseMode + + com.typemytype.robofont.foreground.layerStrokeColor + + 0.5 + 0 + 0.5 + 0.7 + + com.typemytype.robofont.italicSlantOffset + 0 + com.typemytype.robofont.segmentType + curve + com.typemytype.robofont.shouldAddPointsInSplineConversion + 1 + com.typesupply.MetricsMachine4.groupColors + + @MMK_L_A + + 1 + 0 + 0 + 0.25 + + @MMK_L_C + + 1 + 0.5 + 0 + 0.25 + + @MMK_L_E + + 1 + 1 + 0 + 0.25 + + @MMK_L_I + + 0 + 1 + 0 + 0.25 + + @MMK_L_N + + 0 + 1 + 1 + 0.25 + + @MMK_L_O + + 0 + 0.5 + 1 + 0.25 + + @MMK_L_S + + 0 + 0 + 1 + 0.25 + + @MMK_L_U + + 0.5 + 0 + 1 + 0.25 + + @MMK_L_Y + + 1 + 0 + 1 + 0.25 + + @MMK_L_Z + + 1 + 0 + 0.5 + 0.25 + + @MMK_L_a + + 1 + 0 + 0 + 0.25 + + @MMK_L_c + + 1 + 0.5 + 0 + 0.25 + + @MMK_L_e + + 1 + 1 + 0 + 0.25 + + @MMK_L_i + + 0 + 1 + 0 + 0.25 + + @MMK_L_n + + 0 + 1 + 1 + 0.25 + + @MMK_L_o + + 0 + 0.5 + 1 + 0.25 + + @MMK_L_s + + 0 + 0 + 1 + 0.25 + + @MMK_L_u + + 0.5 + 0 + 1 + 0.25 + + @MMK_L_y + + 1 + 0 + 1 + 0.25 + + @MMK_L_z + + 1 + 0 + 0.5 + 0.25 + + @MMK_R_A + + 1 + 0 + 0 + 0.25 + + @MMK_R_C + + 1 + 0.5 + 0 + 0.25 + + @MMK_R_E + + 1 + 1 + 0 + 0.25 + + @MMK_R_I + + 0 + 1 + 0 + 0.25 + + @MMK_R_N + + 0 + 1 + 1 + 0.25 + + @MMK_R_O + + 0 + 0.5 + 1 + 0.25 + + @MMK_R_S + + 0 + 0 + 1 + 0.25 + + @MMK_R_U + + 0.5 + 0 + 1 + 0.25 + + @MMK_R_Y + + 1 + 0 + 1 + 0.25 + + @MMK_R_Z + + 1 + 0 + 0.5 + 0.25 + + @MMK_R_a + + 1 + 0 + 0 + 0.25 + + @MMK_R_c + + 1 + 0.5 + 0 + 0.25 + + @MMK_R_e + + 1 + 1 + 0 + 0.25 + + @MMK_R_i + + 0 + 1 + 0 + 0.25 + + @MMK_R_n + + 0 + 1 + 1 + 0.25 + + @MMK_R_o + + 0 + 0.5 + 1 + 0.25 + + @MMK_R_s + + 0 + 0 + 1 + 0.25 + + @MMK_R_u + + 0.5 + 0 + 1 + 0.25 + + @MMK_R_y + + 1 + 0 + 1 + 0.25 + + @MMK_R_z + + 1 + 0 + 0.5 + 0.25 + + + com.typesupply.defcon.sortDescriptor + + + ascending + + space + A + Agrave + Aacute + Acircumflex + Atilde + Adieresis + Aring + B + C + Ccedilla + D + E + Egrave + Eacute + Ecircumflex + Edieresis + F + G + H + I + Igrave + Iacute + Icircumflex + Idieresis + J + K + L + M + N + Ntilde + O + Ograve + Oacute + Ocircumflex + Otilde + Odieresis + P + Q + R + S + Scaron + T + U + Ugrave + Uacute + Ucircumflex + Udieresis + V + W + X + Y + Yacute + Ydieresis + Z + Zcaron + AE + Eth + Oslash + Thorn + Lslash + OE + a + agrave + aacute + acircumflex + atilde + adieresis + aring + b + c + ccedilla + d + e + egrave + eacute + ecircumflex + edieresis + f + g + h + i + igrave + iacute + icircumflex + idieresis + j + k + l + m + n + ntilde + o + ograve + oacute + ocircumflex + otilde + odieresis + p + q + r + s + scaron + t + u + ugrave + uacute + ucircumflex + udieresis + v + w + x + y + yacute + ydieresis + z + zcaron + ordfeminine + ordmasculine + germandbls + ae + eth + oslash + thorn + dotlessi + lslash + oe + mu + zero + one + two + three + four + five + six + seven + eight + nine + onesuperior + twosuperior + threesuperior + onequarter + onehalf + threequarters + underscore + hyphen + endash + emdash + parenleft + parenright + bracketleft + bracketright + braceleft + braceright + numbersign + percent + perthousand + quotesingle + quotedbl + quoteleft + quoteright + quotedblleft + quotedblright + quotesinglbase + quotedblbase + guilsinglleft + guilsinglright + asterisk + dagger + daggerdbl + period + comma + colon + semicolon + ellipsis + exclam + exclamdown + question + questiondown + slash + backslash + fraction + bar + brokenbar + at + ampersand + section + paragraph + periodcentered + bullet + plus + minus + plusminus + divide + multiply + equal + less + greater + logicalnot + dollar + cent + sterling + currency + yen + Euro + asciicircum + asciitilde + acute + grave + hungarumlaut + circumflex + caron + breve + tilde + macron + dieresis + dotaccent + ring + cedilla + ogonek + copyright + registered + trademark + degree + florin + guillemotleft + guillemotright + fi + fl + a_b_c + .notdef + + type + glyphList + + + public.glyphOrder + + A + Aacute + Adieresis + B + C + D + E + F + G + H + I + J + K + L + M + N + O + P + Q + R + S + T + U + V + W + X + Y + Z + S.closed + I.narrow + J.narrow + quotesinglbase + quotedblbase + quotedblleft + quotedblright + comma + period + colon + semicolon + arrowleft + arrowup + arrowright + arrowdown + dot + dieresis + acute + space + IJ + + testLibItemKey + + a + b + c + + + diff --git a/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/metainfo.plist b/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/metainfo.plist new file mode 100644 index 00000000..555d9ce4 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/metainfo.plist @@ -0,0 +1,10 @@ + + + + + creator + com.github.fonttools.ufoLib + formatVersion + 3 + + diff --git a/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/features.fea b/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/features.fea new file mode 100644 index 00000000..29234c51 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/features.fea @@ -0,0 +1 @@ +# this is the feature from lightWide diff --git a/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/fontinfo.plist b/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/fontinfo.plist new file mode 100644 index 00000000..af5db170 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/fontinfo.plist @@ -0,0 +1,69 @@ + + + + + ascender + 700 + capHeight + 700 + copyright + License same as MutatorMath. BSD 3-clause. [test-token: D] + descender + -200 + familyName + MutatorMathTest + guidelines + + + italicAngle + 0 + openTypeNameLicense + License same as MutatorMath. BSD 3-clause. [test-token: D] + openTypeOS2VendorID + LTTR + postscriptBlueValues + + + postscriptDefaultWidthX + 500 + postscriptFamilyBlues + + + postscriptFamilyOtherBlues + + + postscriptFontName + MutatorMathTest-LightWide + postscriptFullName + MutatorMathTest LightWide + postscriptOtherBlues + + + postscriptSlantAngle + 0 + postscriptStemSnapH + + + postscriptStemSnapV + + + postscriptWindowsCharacterSet + 1 + styleMapFamilyName + + styleMapStyleName + regular + styleName + SerifLightWide + unitsPerEm + 1000 + versionMajor + 1 + versionMinor + 2 + xHeight + 500 + year + 2004 + + diff --git a/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/glyphs/A_.glif b/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/glyphs/A_.glif new file mode 100644 index 00000000..20000b26 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/glyphs/A_.glif @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.typemytype.robofont.Image.Brightness + 0 + com.typemytype.robofont.Image.Contrast + 1 + com.typemytype.robofont.Image.Saturation + 1 + com.typemytype.robofont.Image.Sharpness + 0.4 + + + diff --git a/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/glyphs/contents.plist b/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/glyphs/contents.plist new file mode 100644 index 00000000..be1cec83 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/glyphs/contents.plist @@ -0,0 +1,8 @@ + + + + + A + A_.glif + + diff --git a/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/layercontents.plist b/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/layercontents.plist new file mode 100644 index 00000000..0de42769 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/layercontents.plist @@ -0,0 +1,10 @@ + + + + + + foreground + glyphs + + + diff --git a/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/lib.plist b/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/lib.plist new file mode 100644 index 00000000..046c3a3c --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/lib.plist @@ -0,0 +1,664 @@ + + + + + com.defcon.sortDescriptor + + + allowPseudoUnicode + + ascending + + type + alphabetical + + + allowPseudoUnicode + + ascending + + type + category + + + allowPseudoUnicode + + ascending + + type + unicode + + + allowPseudoUnicode + + ascending + + type + script + + + allowPseudoUnicode + + ascending + + type + suffix + + + allowPseudoUnicode + + ascending + + type + decompositionBase + + + com.typemytype.robofont.background.layerStrokeColor + + 1 + 0.75 + 0 + 0.7 + + com.typemytype.robofont.compileSettings.autohint + + com.typemytype.robofont.compileSettings.checkOutlines + + com.typemytype.robofont.compileSettings.createDummyDSIG + + com.typemytype.robofont.compileSettings.decompose + + com.typemytype.robofont.compileSettings.generateFormat + 0 + com.typemytype.robofont.compileSettings.releaseMode + + com.typemytype.robofont.foreground.layerStrokeColor + + 0.5 + 0 + 0.5 + 0.7 + + com.typemytype.robofont.italicSlantOffset + 0 + com.typemytype.robofont.segmentType + curve + com.typemytype.robofont.shouldAddPointsInSplineConversion + 1 + com.typesupply.MetricsMachine4.groupColors + + @MMK_L_A + + 1 + 0 + 0 + 0.25 + + @MMK_L_C + + 1 + 0.5 + 0 + 0.25 + + @MMK_L_E + + 1 + 1 + 0 + 0.25 + + @MMK_L_I + + 0 + 1 + 0 + 0.25 + + @MMK_L_N + + 0 + 1 + 1 + 0.25 + + @MMK_L_O + + 0 + 0.5 + 1 + 0.25 + + @MMK_L_S + + 0 + 0 + 1 + 0.25 + + @MMK_L_U + + 0.5 + 0 + 1 + 0.25 + + @MMK_L_Y + + 1 + 0 + 1 + 0.25 + + @MMK_L_Z + + 1 + 0 + 0.5 + 0.25 + + @MMK_L_a + + 1 + 0 + 0 + 0.25 + + @MMK_L_c + + 1 + 0.5 + 0 + 0.25 + + @MMK_L_e + + 1 + 1 + 0 + 0.25 + + @MMK_L_i + + 0 + 1 + 0 + 0.25 + + @MMK_L_n + + 0 + 1 + 1 + 0.25 + + @MMK_L_o + + 0 + 0.5 + 1 + 0.25 + + @MMK_L_s + + 0 + 0 + 1 + 0.25 + + @MMK_L_u + + 0.5 + 0 + 1 + 0.25 + + @MMK_L_y + + 1 + 0 + 1 + 0.25 + + @MMK_L_z + + 1 + 0 + 0.5 + 0.25 + + @MMK_R_A + + 1 + 0 + 0 + 0.25 + + @MMK_R_C + + 1 + 0.5 + 0 + 0.25 + + @MMK_R_E + + 1 + 1 + 0 + 0.25 + + @MMK_R_I + + 0 + 1 + 0 + 0.25 + + @MMK_R_N + + 0 + 1 + 1 + 0.25 + + @MMK_R_O + + 0 + 0.5 + 1 + 0.25 + + @MMK_R_S + + 0 + 0 + 1 + 0.25 + + @MMK_R_U + + 0.5 + 0 + 1 + 0.25 + + @MMK_R_Y + + 1 + 0 + 1 + 0.25 + + @MMK_R_Z + + 1 + 0 + 0.5 + 0.25 + + @MMK_R_a + + 1 + 0 + 0 + 0.25 + + @MMK_R_c + + 1 + 0.5 + 0 + 0.25 + + @MMK_R_e + + 1 + 1 + 0 + 0.25 + + @MMK_R_i + + 0 + 1 + 0 + 0.25 + + @MMK_R_n + + 0 + 1 + 1 + 0.25 + + @MMK_R_o + + 0 + 0.5 + 1 + 0.25 + + @MMK_R_s + + 0 + 0 + 1 + 0.25 + + @MMK_R_u + + 0.5 + 0 + 1 + 0.25 + + @MMK_R_y + + 1 + 0 + 1 + 0.25 + + @MMK_R_z + + 1 + 0 + 0.5 + 0.25 + + + com.typesupply.defcon.sortDescriptor + + + ascending + + space + A + Agrave + Aacute + Acircumflex + Atilde + Adieresis + Aring + B + C + Ccedilla + D + E + Egrave + Eacute + Ecircumflex + Edieresis + F + G + H + I + Igrave + Iacute + Icircumflex + Idieresis + J + K + L + M + N + Ntilde + O + Ograve + Oacute + Ocircumflex + Otilde + Odieresis + P + Q + R + S + Scaron + T + U + Ugrave + Uacute + Ucircumflex + Udieresis + V + W + X + Y + Yacute + Ydieresis + Z + Zcaron + AE + Eth + Oslash + Thorn + Lslash + OE + a + agrave + aacute + acircumflex + atilde + adieresis + aring + b + c + ccedilla + d + e + egrave + eacute + ecircumflex + edieresis + f + g + h + i + igrave + iacute + icircumflex + idieresis + j + k + l + m + n + ntilde + o + ograve + oacute + ocircumflex + otilde + odieresis + p + q + r + s + scaron + t + u + ugrave + uacute + ucircumflex + udieresis + v + w + x + y + yacute + ydieresis + z + zcaron + ordfeminine + ordmasculine + germandbls + ae + eth + oslash + thorn + dotlessi + lslash + oe + zero + one + two + three + four + five + six + seven + eight + nine + onesuperior + twosuperior + threesuperior + onequarter + onehalf + threequarters + underscore + hyphen + endash + emdash + parenleft + parenright + bracketleft + bracketright + braceleft + braceright + numbersign + percent + perthousand + quotesingle + quotedbl + quoteleft + quoteright + quotedblleft + quotedblright + quotesinglbase + quotedblbase + guilsinglleft + guilsinglright + guillemotleft + guillemotright + asterisk + dagger + daggerdbl + period + comma + colon + semicolon + ellipsis + exclam + exclamdown + question + questiondown + slash + backslash + fraction + bar + brokenbar + at + ampersand + section + paragraph + periodcentered + bullet + plus + minus + plusminus + divide + multiply + equal + less + greater + logicalnot + mu + dollar + cent + sterling + currency + yen + Euro + florin + asciicircum + asciitilde + acute + grave + hungarumlaut + circumflex + caron + breve + tilde + macron + dieresis + dotaccent + ring + cedilla + ogonek + copyright + registered + trademark + degree + fi + fl + .notdef + a_b_c + + type + glyphList + + + public.glyphOrder + + A + Aacute + Adieresis + B + C + D + E + F + G + H + I + J + K + L + M + N + O + P + Q + R + S + T + U + V + W + X + Y + Z + S.closed + I.narrow + J.narrow + quotesinglbase + quotedblbase + quotedblleft + quotedblright + comma + period + colon + semicolon + arrowleft + arrowup + arrowright + arrowdown + dot + dieresis + acute + space + IJ + + + diff --git a/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/metainfo.plist b/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/metainfo.plist new file mode 100644 index 00000000..555d9ce4 --- /dev/null +++ b/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/metainfo.plist @@ -0,0 +1,10 @@ + + + + + creator + com.github.fonttools.ufoLib + formatVersion + 3 + + diff --git a/tests/test_main.py b/tests/test_main.py index 7acd0f06..8ab4d48d 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -1,10 +1,13 @@ +import logging import platform import shutil +from textwrap import dedent import fontTools.designspaceLib as designspaceLib import fontTools.ttLib import pytest import ufoLib2 +from fontTools.misc.testTools import getXML import fontmake.__main__ @@ -757,3 +760,239 @@ def test_autohinting(data_dir, tmp_path, autohint_options): assert "fpgm" in test_output_ttf # hinted else: assert "fpgm" not in test_output_ttf # unhinted + + +def test_main_designspace_v5_builds_STAT(data_dir, tmp_path): + fontmake.__main__.main( + [ + "--verbose", + "DEBUG", + "-m", + str( + data_dir + / "MutatorSansLite" + / "MutatorSans_v5_implicit_one_vf.designspace" + ), + "-o", + "variable", + "--output-dir", + str(tmp_path), + ] + ) + test_output_ttf = fontTools.ttLib.TTFont( + tmp_path / "MutatorSans_v5_implicit_one_vf-VF.ttf" + ) + stat = test_output_ttf["STAT"] + assert ( + getXML(stat.toXML) + == dedent( + """\ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + """ + ).splitlines() + ) + + +def test_main_designspace_v5_builds_all_vfs(data_dir, tmp_path): + fontmake.__main__.main( + [ + "-m", + str( + data_dir + / "MutatorSansLite" + / "MutatorFamily_v5_discrete_axis.designspace" + ), + "-o", + "variable", + "--output-dir", + str(tmp_path), + ] + ) + + assert (tmp_path / "MutatorSansVariable_Weight_Width.ttf").exists() + assert (tmp_path / "MutatorSansVariable_Weight.ttf").exists() + assert (tmp_path / "MutatorSansVariable_Width.ttf").exists() + assert (tmp_path / "MutatorSerifVariable_Width.ttf").exists() + + +def test_main_designspace_v5_select_no_matching_fonts_shows_nice_message( + data_dir, tmp_path, caplog +): + with caplog.at_level(logging.WARNING): + fontmake.__main__.main( + [ + "-m", + str( + data_dir + / "MutatorSansLite" + / "MutatorFamily_v5_discrete_axis.designspace" + ), + "--variable-fonts", + "NothingMatchesThisRegex", + "-o", + "variable", + "--output-dir", + str(tmp_path), + ] + ) + + assert "No variable fonts matching NothingMatchesThisRegex" in caplog.text + + # Nothing gets built + assert not (tmp_path / "MutatorSansVariable_Weight_Width.ttf").exists() + assert not (tmp_path / "MutatorSansVariable_Weight.ttf").exists() + assert not (tmp_path / "MutatorSansVariable_Width.ttf").exists() + assert not (tmp_path / "MutatorSerifVariable_Width.ttf").exists() + + +def test_main_designspace_v5_select_vfs_to_build(data_dir, tmp_path): + fontmake.__main__.main( + [ + "-m", + str( + data_dir + / "MutatorSansLite" + / "MutatorFamily_v5_discrete_axis.designspace" + ), + "--variable-fonts", + "MutatorSansVariable_Weight.*", + "-o", + "variable", + "--output-dir", + str(tmp_path), + ] + ) + + assert (tmp_path / "MutatorSansVariable_Weight_Width.ttf").exists() + assert (tmp_path / "MutatorSansVariable_Weight.ttf").exists() + assert not (tmp_path / "MutatorSansVariable_Width.ttf").exists() + assert not (tmp_path / "MutatorSerifVariable_Width.ttf").exists() + + +def test_main_designspace_v5_can_use_output_path_with_1_vf(data_dir, tmp_path): + fontmake.__main__.main( + [ + "-m", + str( + data_dir / "MutatorSansLite" / "MutatorSans_v5_several_vfs.designspace" + ), + "-o", + "variable", + "--variable-fonts", + "MutatorSansVariable_Width", + "--output-path", + str(tmp_path / "MySingleVF.ttf"), + ] + ) + + assert (tmp_path / "MySingleVF.ttf").exists() + + +def test_main_designspace_v5_dont_interpolate_discrete_axis(data_dir, tmp_path): + fontmake.__main__.main( + [ + "-m", + str( + data_dir + / "MutatorSansLite" + / "MutatorSans_v5_several_vfs_discrete_axis.designspace" + ), + "-o", + "variable", + "--output-dir", + str(tmp_path), + ] + ) + assert (tmp_path / "MutatorSansCondensedVariable_Weight.ttf").exists() + assert (tmp_path / "MutatorSansExtendedVariable_Weight.ttf").exists()