diff options
author | Sadaf Ebrahimi <sadafebrahimi@google.com> | 2022-05-12 18:05:00 +0000 |
---|---|---|
committer | Sadaf Ebrahimi <sadafebrahimi@google.com> | 2022-05-12 18:05:00 +0000 |
commit | fc762b549913f1b63f8ad0949d5cb1e8c797bc09 (patch) | |
tree | 1dff6c1c2a08ce8152e5b964fc0021acdf9696f1 /Tests | |
parent | 0b59a54a78ee22be83fe249c724c19ebd7d26ede (diff) | |
download | fonttools-fc762b549913f1b63f8ad0949d5cb1e8c797bc09.tar.gz |
Updating fonttools 4.31.2 to fonttools 4.33.3
Test: treehugger
Change-Id: I9367f96628439f01492f561c1ef52a561b7194d8
Diffstat (limited to 'Tests')
59 files changed, 11332 insertions, 284 deletions
diff --git a/Tests/config_test.py b/Tests/config_test.py new file mode 100644 index 00000000..58163913 --- /dev/null +++ b/Tests/config_test.py @@ -0,0 +1,135 @@ +from fontTools.misc.configTools import AbstractConfig, Options +import pytest +from fontTools.config import ( + OPTIONS, + Config, + ConfigUnknownOptionError, + ConfigValueParsingError, + ConfigValueValidationError, +) +from fontTools.ttLib import TTFont + + +def test_can_register_option(): + MY_OPTION = Config.register_option( + name="tests:MY_OPTION", + help="Test option, value should be True or False, default = True", + default=True, + parse=lambda v: v in ("True", "true", 1, True), + validate=lambda v: v == True or v == False, + ) + + assert MY_OPTION.name == "tests:MY_OPTION" + assert ( + MY_OPTION.help == "Test option, value should be True or False, default = True" + ) + assert MY_OPTION.default == True + assert MY_OPTION.parse("true") == True + assert MY_OPTION.validate("hello") == False + + ttFont = TTFont(cfg={"tests:MY_OPTION": True}) + assert True == ttFont.cfg.get("tests:MY_OPTION") + assert True == ttFont.cfg.get(MY_OPTION) + + +# to parametrize tests of Config mapping interface accepting either a str or Option +@pytest.fixture( + params=[ + pytest.param("fontTools.otlLib.optimize.gpos:COMPRESSION_LEVEL", id="str"), + pytest.param( + OPTIONS["fontTools.otlLib.optimize.gpos:COMPRESSION_LEVEL"], id="Option" + ), + ] +) +def COMPRESSION_LEVEL(request): + return request.param + + +def test_ttfont_has_config(COMPRESSION_LEVEL): + ttFont = TTFont(cfg={COMPRESSION_LEVEL: 8}) + assert 8 == ttFont.cfg.get(COMPRESSION_LEVEL) + + +def test_ttfont_can_take_superset_of_fonttools_config(COMPRESSION_LEVEL): + # Create MyConfig with all options from fontTools.config plus some + my_options = Options(Config.options) + MY_OPTION = my_options.register("custom:my_option", "help", "default", str, any) + + class MyConfig(AbstractConfig): + options = my_options + + ttFont = TTFont(cfg=MyConfig({"custom:my_option": "my_value"})) + assert 0 == ttFont.cfg.get(COMPRESSION_LEVEL) + assert "my_value" == ttFont.cfg.get(MY_OPTION) + + # but the default Config doens't know about MY_OPTION + with pytest.raises(ConfigUnknownOptionError): + TTFont(cfg={MY_OPTION: "my_value"}) + + +def test_no_config_returns_default_values(COMPRESSION_LEVEL): + ttFont = TTFont() + assert 0 == ttFont.cfg.get(COMPRESSION_LEVEL) + assert 3 == ttFont.cfg.get(COMPRESSION_LEVEL, 3) + + +def test_can_set_config(COMPRESSION_LEVEL): + ttFont = TTFont() + ttFont.cfg.set(COMPRESSION_LEVEL, 5) + assert 5 == ttFont.cfg.get(COMPRESSION_LEVEL) + ttFont.cfg.set(COMPRESSION_LEVEL, 6) + assert 6 == ttFont.cfg.get(COMPRESSION_LEVEL) + + +def test_different_ttfonts_have_different_configs(COMPRESSION_LEVEL): + cfg = Config({COMPRESSION_LEVEL: 5}) + ttFont1 = TTFont(cfg=cfg) + ttFont2 = TTFont(cfg=cfg) + ttFont2.cfg.set(COMPRESSION_LEVEL, 6) + assert 5 == ttFont1.cfg.get(COMPRESSION_LEVEL) + assert 6 == ttFont2.cfg.get(COMPRESSION_LEVEL) + + +def test_cannot_set_inexistent_key(): + with pytest.raises(ConfigUnknownOptionError): + TTFont(cfg={"notALib.notAModule.inexistent": 4}) + + +def test_value_not_parsed_by_default(COMPRESSION_LEVEL): + # Note: value given as a string + with pytest.raises(ConfigValueValidationError): + TTFont(cfg={COMPRESSION_LEVEL: "8"}) + + +def test_value_gets_parsed_if_asked(COMPRESSION_LEVEL): + # Note: value given as a string + ttFont = TTFont(cfg=Config({COMPRESSION_LEVEL: "8"}, parse_values=True)) + assert 8 == ttFont.cfg.get(COMPRESSION_LEVEL) + + +def test_value_parsing_can_error(COMPRESSION_LEVEL): + with pytest.raises(ConfigValueParsingError): + TTFont( + cfg=Config( + {COMPRESSION_LEVEL: "not an int"}, + parse_values=True, + ) + ) + + +def test_value_gets_validated(COMPRESSION_LEVEL): + # Note: 12 is not a valid value for GPOS compression level (must be in 0-9) + with pytest.raises(ConfigValueValidationError): + TTFont(cfg={COMPRESSION_LEVEL: 12}) + + +def test_implements_mutable_mapping(COMPRESSION_LEVEL): + cfg = Config() + cfg[COMPRESSION_LEVEL] = 2 + assert 2 == cfg[COMPRESSION_LEVEL] + assert list(iter(cfg)) + assert 1 == len(cfg) + del cfg[COMPRESSION_LEVEL] + assert 0 == cfg[COMPRESSION_LEVEL] + assert not list(iter(cfg)) + assert 0 == len(cfg) diff --git a/Tests/designspaceLib/__init__.py b/Tests/designspaceLib/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/Tests/designspaceLib/__init__.py diff --git a/Tests/designspaceLib/data/convert5to4_output/AktivGroteskVF_Italics_Wght.designspace b/Tests/designspaceLib/data/convert5to4_output/AktivGroteskVF_Italics_Wght.designspace new file mode 100644 index 00000000..aa8e4f9c --- /dev/null +++ b/Tests/designspaceLib/data/convert5to4_output/AktivGroteskVF_Italics_Wght.designspace @@ -0,0 +1,114 @@ +<?xml version='1.0' encoding='UTF-8'?> +<designspace format="4.1"> + <axes> + <axis tag="wght" name="Weight" minimum="100" maximum="900" default="400"> + <map input="100" output="22"/> + <map input="200" output="38"/> + <map input="300" output="57"/> + <map input="400" output="84"/> + <map input="500" output="98"/> + <map input="600" output="115"/> + <map input="700" output="133"/> + <map input="800" output="158"/> + <map input="900" output="185"/> + </axis> + </axes> + <rules processing="last"> + <rule name="BRACKET.CYR"> + <sub name="ghe.loclSRB" with="ghe.ital.loclSRB"/> + <sub name="ghe.loclMKD" with="ghe.ital.loclMKD"/> + <sub name="de.loclMKDSRB" with="de.ital.loclMKDSRB"/> + <sub name="pe.loclMKDSRB" with="pe.ital.loclMKDSRB"/> + <sub name="te.loclMKDSRB" with="te.ital.loclMKDSRB"/> + <sub name="gje.loclMKD" with="gje.ital.loclMKD"/> + <sub name="sha.loclMKDSRB" with="sha.ital.loclMKDSRB"/> + </rule> + </rules> + <sources> + <source filename="../AktivGrotesk_HairIt.ufo" name="Aktiv Grotesk Hair Italic"> + <location> + <dimension name="Weight" xvalue="22"/> + </location> + </source> + <source filename="../AktivGrotesk_It.ufo" name="Aktiv Grotesk Italic"> + <location> + <dimension name="Weight" xvalue="84"/> + </location> + </source> + <source filename="../AktivGrotesk_It.ufo" name="Aktiv Grotesk Italic {126,100,1}" layer="{126,100,1}"> + <location> + <dimension name="Weight" xvalue="133"/> + </location> + </source> + <source filename="../AktivGrotesk_BlkIt.ufo" name="Aktiv Grotesk Black Italic"> + <location> + <dimension name="Weight" xvalue="185"/> + </location> + </source> + </sources> + <instances> + <instance name="Aktiv Grotesk Hair Italic" familyname="Aktiv Grotesk" stylename="Hair Italic" filename="../instances/AktivGrotesk_HairIt.ufo" postscriptfontname="AktivGrotesk-HairItalic" stylemapfamilyname="Aktiv Grotesk Hair" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="22"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Thin Italic" familyname="Aktiv Grotesk" stylename="Thin Italic" filename="../instances/AktivGrotesk_ThIt.ufo" postscriptfontname="AktivGrotesk-ThinItalic" stylemapfamilyname="Aktiv Grotesk Thin" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="38"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Light Italic" familyname="Aktiv Grotesk" stylename="Light Italic" filename="../instances/AktivGrotesk_LtIt.ufo" postscriptfontname="AktivGrotesk-LightItalic" stylemapfamilyname="Aktiv Grotesk Light" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="57"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Italic" familyname="Aktiv Grotesk" stylename="Italic" filename="../instances/AktivGrotesk_It.ufo" postscriptfontname="AktivGrotesk-Italic" stylemapfamilyname="Aktiv Grotesk" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="84"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Medium Italic" familyname="Aktiv Grotesk" stylename="Medium Italic" filename="../instances/AktivGrotesk_MdIt.ufo" postscriptfontname="AktivGrotesk-MediumItalic" stylemapfamilyname="Aktiv Grotesk Medium" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="98"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk SemiBold Italic" familyname="Aktiv Grotesk" stylename="SemiBold Italic" filename="../../build/instances/AktivGrotesk_SBdIt.ufo" postscriptfontname="AktivGrotesk-SemiBoldItalic" stylemapfamilyname="Aktiv Grotesk SemiBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="115"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Bold Italic" familyname="Aktiv Grotesk" stylename="Bold Italic" filename="../instances/AktivGrotesk_BdIt.ufo" postscriptfontname="AktivGrotesk-BoldItalic" stylemapfamilyname="Aktiv Grotesk" stylemapstylename="bold italic"> + <location> + <dimension name="Weight" xvalue="133"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk XBold Italic" familyname="Aktiv Grotesk" stylename="XBold Italic" filename="../instances/AktivGrotesk_XBdIt.ufo" postscriptfontname="AktivGrotesk-XBoldItalic" stylemapfamilyname="Aktiv Grotesk XBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="158"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Black Italic" familyname="Aktiv Grotesk" stylename="Black Italic" filename="../instances/AktivGrotesk_BlkIt.ufo" postscriptfontname="AktivGrotesk-BlackItalic" stylemapfamilyname="Aktiv Grotesk Black" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="185"/> + </location> + <kerning/> + <info/> + </instance> + </instances> +</designspace> diff --git a/Tests/designspaceLib/data/convert5to4_output/AktivGroteskVF_Italics_WghtWdth.designspace b/Tests/designspaceLib/data/convert5to4_output/AktivGroteskVF_Italics_WghtWdth.designspace new file mode 100644 index 00000000..2e22c019 --- /dev/null +++ b/Tests/designspaceLib/data/convert5to4_output/AktivGroteskVF_Italics_WghtWdth.designspace @@ -0,0 +1,316 @@ +<?xml version='1.0' encoding='UTF-8'?> +<designspace format="4.1"> + <axes> + <axis tag="wght" name="Weight" minimum="100" maximum="900" default="400"> + <map input="100" output="22"/> + <map input="200" output="38"/> + <map input="300" output="57"/> + <map input="400" output="84"/> + <map input="500" output="98"/> + <map input="600" output="115"/> + <map input="700" output="133"/> + <map input="800" output="158"/> + <map input="900" output="185"/> + </axis> + <axis tag="wdth" name="Width" minimum="75" maximum="125" default="100"/> + </axes> + <rules processing="last"> + <rule name="BRACKET.CYR"> + <sub name="ghe.loclSRB" with="ghe.ital.loclSRB"/> + <sub name="ghe.loclMKD" with="ghe.ital.loclMKD"/> + <sub name="de.loclMKDSRB" with="de.ital.loclMKDSRB"/> + <sub name="pe.loclMKDSRB" with="pe.ital.loclMKDSRB"/> + <sub name="te.loclMKDSRB" with="te.ital.loclMKDSRB"/> + <sub name="gje.loclMKD" with="gje.ital.loclMKD"/> + <sub name="sha.loclMKDSRB" with="sha.ital.loclMKDSRB"/> + </rule> + <rule name="BRACKET.116.185"> + <conditionset> + <condition name="Weight" minimum="116" maximum="185"/> + <condition name="Width" minimum="75" maximum="97.5"/> + </conditionset> + <sub name="cent" with="cent.BRACKET.130"/> + <sub name="dollar" with="dollar.BRACKET.130"/> + </rule> + </rules> + <sources> + <source filename="../AktivGroteskCd_HairIt.ufo" name="Aktiv Grotesk Cd Hair Italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="75"/> + </location> + </source> + <source filename="../AktivGrotesk_HairIt.ufo" name="Aktiv Grotesk Hair Italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="100"/> + </location> + </source> + <source filename="../AktivGroteskEx_HairIt.ufo" name="Aktiv Grotesk Ex Hair Italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="125"/> + </location> + </source> + <source filename="../AktivGroteskCd_It.ufo" name="Aktiv Grotesk Cd Italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="75"/> + </location> + </source> + <source filename="../AktivGrotesk_It.ufo" name="Aktiv Grotesk Italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="100"/> + </location> + </source> + <source filename="../AktivGrotesk_It.ufo" name="Aktiv Grotesk Italic {126,100,1}" layer="{126,100,1}"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="100"/> + </location> + </source> + <source filename="../AktivGroteskEx_It.ufo" name="Aktiv Grotesk Ex Italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="125"/> + </location> + </source> + <source filename="../AktivGroteskCd_BlkIt.ufo" name="Aktiv Grotesk Cd Black Italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="75"/> + </location> + </source> + <source filename="../AktivGrotesk_BlkIt.ufo" name="Aktiv Grotesk Black Italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="100"/> + </location> + </source> + <source filename="../AktivGroteskEx_BlkIt.ufo" name="Aktiv Grotesk Ex Black Italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="125"/> + </location> + </source> + </sources> + <instances> + <instance name="Aktiv Grotesk Cd Hair Italic" familyname="Aktiv Grotesk" stylename="Cd Hair Italic" filename="../instances/AktivGroteskCd_HairIt.ufo" postscriptfontname="AktivGrotesk-CdHairItalic" stylemapfamilyname="Aktiv Grotesk Cd Hair" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="75"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Hair Italic" familyname="Aktiv Grotesk" stylename="Hair Italic" filename="../instances/AktivGrotesk_HairIt.ufo" postscriptfontname="AktivGrotesk-HairItalic" stylemapfamilyname="Aktiv Grotesk Hair" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="100"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex Hair Italic" familyname="Aktiv Grotesk" stylename="Ex Hair Italic" filename="../instances/AktivGroteskEx_HairIt.ufo" postscriptfontname="AktivGrotesk-ExHairItalic" stylemapfamilyname="Aktiv Grotesk Ex Hair" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="125"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd Thin Italic" familyname="Aktiv Grotesk" stylename="Cd Thin Italic" filename="../instances/AktivGroteskCd_ThIt.ufo" postscriptfontname="AktivGrotesk-CdThinItalic" stylemapfamilyname="Aktiv Grotesk Cd Thin" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="75"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Thin Italic" familyname="Aktiv Grotesk" stylename="Thin Italic" filename="../instances/AktivGrotesk_ThIt.ufo" postscriptfontname="AktivGrotesk-ThinItalic" stylemapfamilyname="Aktiv Grotesk Thin" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="100"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex Thin Italic" familyname="Aktiv Grotesk" stylename="Ex Thin Italic" filename="../instances/AktivGroteskEx_ThIt.ufo" postscriptfontname="AktivGrotesk-ExThinItalic" stylemapfamilyname="Aktiv Grotesk Ex Thin" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="125"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd Light Italic" familyname="Aktiv Grotesk" stylename="Cd Light Italic" filename="../instances/AktivGroteskCd_LtIt.ufo" postscriptfontname="AktivGrotesk-CdLightItalic" stylemapfamilyname="Aktiv Grotesk Cd Light" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="75"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Light Italic" familyname="Aktiv Grotesk" stylename="Light Italic" filename="../instances/AktivGrotesk_LtIt.ufo" postscriptfontname="AktivGrotesk-LightItalic" stylemapfamilyname="Aktiv Grotesk Light" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="100"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex Light Italic" familyname="Aktiv Grotesk" stylename="Ex Light Italic" filename="../instances/AktivGroteskEx_LtIt.ufo" postscriptfontname="AktivGrotesk-ExLightItalic" stylemapfamilyname="Aktiv Grotesk Ex Light" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="125"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd Italic" familyname="Aktiv Grotesk" stylename="Cd Italic" filename="../instances/AktivGroteskCd_It.ufo" postscriptfontname="AktivGrotesk-CdItalic" stylemapfamilyname="Aktiv Grotesk Cd" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="75"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Italic" familyname="Aktiv Grotesk" stylename="Italic" filename="../instances/AktivGrotesk_It.ufo" postscriptfontname="AktivGrotesk-Italic" stylemapfamilyname="Aktiv Grotesk" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="100"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex Italic" familyname="Aktiv Grotesk" stylename="Ex Italic" filename="../instances/AktivGroteskEx_It.ufo" postscriptfontname="AktivGrotesk-ExItalic" stylemapfamilyname="Aktiv Grotesk Ex" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="125"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd Medium Italic" familyname="Aktiv Grotesk" stylename="Cd Medium Italic" filename="../instances/AktivGroteskCd_MdIt.ufo" postscriptfontname="AktivGrotesk-CdMediumItalic" stylemapfamilyname="Aktiv Grotesk Cd Medium" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="75"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Medium Italic" familyname="Aktiv Grotesk" stylename="Medium Italic" filename="../instances/AktivGrotesk_MdIt.ufo" postscriptfontname="AktivGrotesk-MediumItalic" stylemapfamilyname="Aktiv Grotesk Medium" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="100"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex Medium Italic" familyname="Aktiv Grotesk" stylename="Ex Medium Italic" filename="../instances/AktivGroteskEx_MdIt.ufo" postscriptfontname="AktivGrotesk-ExMediumItalic" stylemapfamilyname="Aktiv Grotesk Ex Medium" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="125"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd SemiBold Italic" familyname="Aktiv Grotesk" stylename="Cd SemiBold Italic" filename="../../build/instances/AktivGroteskCd_SBdIt.ufo" postscriptfontname="AktivGrotesk-CdSemiBoldItalic" stylemapfamilyname="Aktiv Grotesk Cd SemiBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="75"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk SemiBold Italic" familyname="Aktiv Grotesk" stylename="SemiBold Italic" filename="../../build/instances/AktivGrotesk_SBdIt.ufo" postscriptfontname="AktivGrotesk-SemiBoldItalic" stylemapfamilyname="Aktiv Grotesk SemiBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="100"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex SemiBold Italic" familyname="Aktiv Grotesk" stylename="Ex SemiBold Italic" filename="../../build/instances/AktivGroteskEx_SBdIt.ufo" postscriptfontname="AktivGrotesk-ExSemiBoldItalic" stylemapfamilyname="Aktiv Grotesk Ex SemiBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="125"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd Bold Italic" familyname="Aktiv Grotesk" stylename="Cd Bold Italic" filename="../instances/AktivGroteskCd_BdIt.ufo" postscriptfontname="AktivGrotesk-CdBoldItalic" stylemapfamilyname="Aktiv Grotesk Cd" stylemapstylename="bold italic"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="75"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Bold Italic" familyname="Aktiv Grotesk" stylename="Bold Italic" filename="../instances/AktivGrotesk_BdIt.ufo" postscriptfontname="AktivGrotesk-BoldItalic" stylemapfamilyname="Aktiv Grotesk" stylemapstylename="bold italic"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="100"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex Bold Italic" familyname="Aktiv Grotesk" stylename="Ex Bold Italic" filename="../instances/AktivGroteskEx_BdIt.ufo" postscriptfontname="AktivGrotesk-ExBoldItalic" stylemapfamilyname="Aktiv Grotesk Ex" stylemapstylename="bold italic"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="125"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd XBold Italic" familyname="Aktiv Grotesk" stylename="Cd XBold Italic" filename="../instances/AktivGroteskCd_XBdIt.ufo" postscriptfontname="AktivGrotesk-CdXBoldItalic" stylemapfamilyname="Aktiv Grotesk Cd XBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="75"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk XBold Italic" familyname="Aktiv Grotesk" stylename="XBold Italic" filename="../instances/AktivGrotesk_XBdIt.ufo" postscriptfontname="AktivGrotesk-XBoldItalic" stylemapfamilyname="Aktiv Grotesk XBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="100"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex XBold Italic" familyname="Aktiv Grotesk" stylename="Ex XBold Italic" filename="../instances/AktivGroteskEx_XBdIt.ufo" postscriptfontname="AktivGrotesk-ExXBoldItalic" stylemapfamilyname="Aktiv Grotesk Ex XBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="125"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd Black Italic" familyname="Aktiv Grotesk" stylename="Cd Black Italic" filename="../instances/AktivGroteskCd_BlkIt.ufo" postscriptfontname="AktivGrotesk-CdBlackItalic" stylemapfamilyname="Aktiv Grotesk Cd Black" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="75"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Black Italic" familyname="Aktiv Grotesk" stylename="Black Italic" filename="../instances/AktivGrotesk_BlkIt.ufo" postscriptfontname="AktivGrotesk-BlackItalic" stylemapfamilyname="Aktiv Grotesk Black" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="100"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex Black Italic" familyname="Aktiv Grotesk" stylename="Ex Black Italic" filename="../instances/AktivGroteskEx_BlkIt.ufo" postscriptfontname="AktivGrotesk-ExBlackItalic" stylemapfamilyname="Aktiv Grotesk Ex Black" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="125"/> + </location> + <kerning/> + <info/> + </instance> + </instances> +</designspace> diff --git a/Tests/designspaceLib/data/convert5to4_output/AktivGroteskVF_Wght.designspace b/Tests/designspaceLib/data/convert5to4_output/AktivGroteskVF_Wght.designspace new file mode 100644 index 00000000..2ae35f77 --- /dev/null +++ b/Tests/designspaceLib/data/convert5to4_output/AktivGroteskVF_Wght.designspace @@ -0,0 +1,103 @@ +<?xml version='1.0' encoding='UTF-8'?> +<designspace format="4.1"> + <axes> + <axis tag="wght" name="Weight" minimum="100" maximum="900" default="400"> + <map input="100" output="22"/> + <map input="200" output="38"/> + <map input="300" output="57"/> + <map input="400" output="84"/> + <map input="500" output="98"/> + <map input="600" output="115"/> + <map input="700" output="133"/> + <map input="800" output="158"/> + <map input="900" output="185"/> + </axis> + </axes> + <sources> + <source filename="../AktivGrotesk_Hair.ufo" name="Aktiv Grotesk Hair"> + <location> + <dimension name="Weight" xvalue="22"/> + </location> + </source> + <source filename="../AktivGrotesk_Rg.ufo" name="Aktiv Grotesk Regular" familyname="Aktiv Grotesk"> + <location> + <dimension name="Weight" xvalue="84"/> + </location> + </source> + <source filename="../AktivGrotesk_Rg.ufo" name="Aktiv Grotesk Regular" layer="{126,100,0}"> + <location> + <dimension name="Weight" xvalue="133"/> + </location> + </source> + <source filename="../AktivGrotesk_Blk.ufo" name="Aktiv Grotesk Black"> + <location> + <dimension name="Weight" xvalue="185"/> + </location> + </source> + </sources> + <instances> + <instance name="Aktiv Grotesk Hair" familyname="Aktiv Grotesk" stylename="Hair" filename="../instances/AktivGrotesk_Hair.ufo" postscriptfontname="AktivGrotesk-Hair" stylemapfamilyname="Aktiv Grotesk Hair" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="22"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Thin" familyname="Aktiv Grotesk" stylename="Thin" filename="../instances/AktivGrotesk_Th.ufo" postscriptfontname="AktivGrotesk-Thin" stylemapfamilyname="Aktiv Grotesk Thin" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="38"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Light" familyname="Aktiv Grotesk" stylename="Light" filename="../instances/AktivGrotesk_Lt.ufo" postscriptfontname="AktivGrotesk-Light" stylemapfamilyname="Aktiv Grotesk Light" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="57"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk " familyname="Aktiv Grotesk" stylename="" filename="../instances/AktivGrotesk_Rg.ufo" postscriptfontname="AktivGrotesk-" stylemapfamilyname="Aktiv Grotesk" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="84"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Medium" familyname="Aktiv Grotesk" stylename="Medium" filename="../instances/AktivGrotesk_Md.ufo" postscriptfontname="AktivGrotesk-Medium" stylemapfamilyname="Aktiv Grotesk Medium" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="98"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk SemiBold" familyname="Aktiv Grotesk" stylename="SemiBold" filename="../../build/instances/AktivGrotesk_SBd.ufo" postscriptfontname="AktivGrotesk-SemiBold" stylemapfamilyname="Aktiv Grotesk SemiBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="115"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Bold" familyname="Aktiv Grotesk" stylename="Bold" filename="../instances/AktivGrotesk_Bd.ufo" postscriptfontname="AktivGrotesk-Bold" stylemapfamilyname="Aktiv Grotesk" stylemapstylename="bold"> + <location> + <dimension name="Weight" xvalue="133"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk XBold" familyname="Aktiv Grotesk" stylename="XBold" filename="../instances/AktivGrotesk_XBd.ufo" postscriptfontname="AktivGrotesk-XBold" stylemapfamilyname="Aktiv Grotesk XBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="158"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Black" familyname="Aktiv Grotesk" stylename="Black" filename="../instances/AktivGrotesk_Blk.ufo" postscriptfontname="AktivGrotesk-Black" stylemapfamilyname="Aktiv Grotesk Black" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="185"/> + </location> + <kerning/> + <info/> + </instance> + </instances> +</designspace> diff --git a/Tests/designspaceLib/data/convert5to4_output/AktivGroteskVF_WghtWdth.designspace b/Tests/designspaceLib/data/convert5to4_output/AktivGroteskVF_WghtWdth.designspace new file mode 100644 index 00000000..219d2262 --- /dev/null +++ b/Tests/designspaceLib/data/convert5to4_output/AktivGroteskVF_WghtWdth.designspace @@ -0,0 +1,307 @@ +<?xml version='1.0' encoding='UTF-8'?> +<designspace format="4.1"> + <axes> + <axis tag="wght" name="Weight" minimum="100" maximum="900" default="400"> + <map input="100" output="22"/> + <map input="200" output="38"/> + <map input="300" output="57"/> + <map input="400" output="84"/> + <map input="500" output="98"/> + <map input="600" output="115"/> + <map input="700" output="133"/> + <map input="800" output="158"/> + <map input="900" output="185"/> + </axis> + <axis tag="wdth" name="Width" minimum="75" maximum="125" default="100"/> + </axes> + <rules processing="last"> + <rule name="BRACKET.116.185"> + <conditionset> + <condition name="Weight" minimum="116" maximum="185"/> + <condition name="Width" minimum="75" maximum="97.5"/> + </conditionset> + <sub name="cent" with="cent.BRACKET.130"/> + <sub name="dollar" with="dollar.BRACKET.130"/> + </rule> + </rules> + <sources> + <source filename="../AktivGroteskCd_Hair.ufo" name="Aktiv Grotesk Cd Hair"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="75"/> + </location> + </source> + <source filename="../AktivGrotesk_Hair.ufo" name="Aktiv Grotesk Hair"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="100"/> + </location> + </source> + <source filename="../AktivGroteskEx_Hair.ufo" name="Aktiv Grotesk Ex Hair"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="125"/> + </location> + </source> + <source filename="../AktivGroteskCd_Rg.ufo" name="Aktiv Grotesk Cd"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="75"/> + </location> + </source> + <source filename="../AktivGrotesk_Rg.ufo" name="Aktiv Grotesk Regular" familyname="Aktiv Grotesk"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="100"/> + </location> + </source> + <source filename="../AktivGrotesk_Rg.ufo" name="Aktiv Grotesk Regular" layer="{126,100,0}"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="100"/> + </location> + </source> + <source filename="../AktivGroteskEx_Rg.ufo" name="Aktiv Grotesk Ex"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="125"/> + </location> + </source> + <source filename="../AktivGroteskCd_Blk.ufo" name="Aktiv Grotesk Cd Black"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="75"/> + </location> + </source> + <source filename="../AktivGrotesk_Blk.ufo" name="Aktiv Grotesk Black"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="100"/> + </location> + </source> + <source filename="../AktivGroteskEx_Blk.ufo" name="Aktiv Grotesk Ex Black"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="125"/> + </location> + </source> + </sources> + <instances> + <instance name="Aktiv Grotesk Cd Hair" familyname="Aktiv Grotesk" stylename="Cd Hair" filename="../instances/AktivGroteskCd_Hair.ufo" postscriptfontname="AktivGrotesk-CdHair" stylemapfamilyname="Aktiv Grotesk Cd Hair" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="75"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Hair" familyname="Aktiv Grotesk" stylename="Hair" filename="../instances/AktivGrotesk_Hair.ufo" postscriptfontname="AktivGrotesk-Hair" stylemapfamilyname="Aktiv Grotesk Hair" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="100"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex Hair" familyname="Aktiv Grotesk" stylename="Ex Hair" filename="../instances/AktivGroteskEx_Hair.ufo" postscriptfontname="AktivGrotesk-ExHair" stylemapfamilyname="Aktiv Grotesk Ex Hair" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="125"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd Thin" familyname="Aktiv Grotesk" stylename="Cd Thin" filename="../instances/AktivGroteskCd_Th.ufo" postscriptfontname="AktivGrotesk-CdThin" stylemapfamilyname="Aktiv Grotesk Cd Thin" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="75"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Thin" familyname="Aktiv Grotesk" stylename="Thin" filename="../instances/AktivGrotesk_Th.ufo" postscriptfontname="AktivGrotesk-Thin" stylemapfamilyname="Aktiv Grotesk Thin" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="100"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex Thin" familyname="Aktiv Grotesk" stylename="Ex Thin" filename="../instances/AktivGroteskEx_Th.ufo" postscriptfontname="AktivGrotesk-ExThin" stylemapfamilyname="Aktiv Grotesk Ex Thin" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="125"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd Light" familyname="Aktiv Grotesk" stylename="Cd Light" filename="../instances/AktivGroteskCd_Lt.ufo" postscriptfontname="AktivGrotesk-CdLight" stylemapfamilyname="Aktiv Grotesk Cd Light" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="75"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Light" familyname="Aktiv Grotesk" stylename="Light" filename="../instances/AktivGrotesk_Lt.ufo" postscriptfontname="AktivGrotesk-Light" stylemapfamilyname="Aktiv Grotesk Light" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="100"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex Light" familyname="Aktiv Grotesk" stylename="Ex Light" filename="../instances/AktivGroteskEx_Lt.ufo" postscriptfontname="AktivGrotesk-ExLight" stylemapfamilyname="Aktiv Grotesk Ex Light" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="125"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd" familyname="Aktiv Grotesk" stylename="Cd" filename="../instances/AktivGroteskCd_Rg.ufo" postscriptfontname="AktivGrotesk-Cd" stylemapfamilyname="Aktiv Grotesk Cd" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="75"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk " familyname="Aktiv Grotesk" stylename="" filename="../instances/AktivGrotesk_Rg.ufo" postscriptfontname="AktivGrotesk-" stylemapfamilyname="Aktiv Grotesk" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="100"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex" familyname="Aktiv Grotesk" stylename="Ex" filename="../instances/AktivGroteskEx_Rg.ufo" postscriptfontname="AktivGrotesk-Ex" stylemapfamilyname="Aktiv Grotesk Ex" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="125"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd Medium" familyname="Aktiv Grotesk" stylename="Cd Medium" filename="../instances/AktivGroteskCd_Md.ufo" postscriptfontname="AktivGrotesk-CdMedium" stylemapfamilyname="Aktiv Grotesk Cd Medium" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="75"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Medium" familyname="Aktiv Grotesk" stylename="Medium" filename="../instances/AktivGrotesk_Md.ufo" postscriptfontname="AktivGrotesk-Medium" stylemapfamilyname="Aktiv Grotesk Medium" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="100"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex Medium" familyname="Aktiv Grotesk" stylename="Ex Medium" filename="../instances/AktivGroteskEx_Md.ufo" postscriptfontname="AktivGrotesk-ExMedium" stylemapfamilyname="Aktiv Grotesk Ex Medium" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="125"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd SemiBold" familyname="Aktiv Grotesk" stylename="Cd SemiBold" filename="../../build/instances/AktivGroteskCd_SBd.ufo" postscriptfontname="AktivGrotesk-CdSemiBold" stylemapfamilyname="Aktiv Grotesk Cd SemiBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="75"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk SemiBold" familyname="Aktiv Grotesk" stylename="SemiBold" filename="../../build/instances/AktivGrotesk_SBd.ufo" postscriptfontname="AktivGrotesk-SemiBold" stylemapfamilyname="Aktiv Grotesk SemiBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="100"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex SemiBold" familyname="Aktiv Grotesk" stylename="Ex SemiBold" filename="../../build/instances/AktivGroteskEx_SBd.ufo" postscriptfontname="AktivGrotesk-ExSemiBold" stylemapfamilyname="Aktiv Grotesk Ex SemiBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="125"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd Bold" familyname="Aktiv Grotesk" stylename="Cd Bold" filename="../instances/AktivGroteskCd_Bd.ufo" postscriptfontname="AktivGrotesk-CdBold" stylemapfamilyname="Aktiv Grotesk Cd" stylemapstylename="bold"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="75"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Bold" familyname="Aktiv Grotesk" stylename="Bold" filename="../instances/AktivGrotesk_Bd.ufo" postscriptfontname="AktivGrotesk-Bold" stylemapfamilyname="Aktiv Grotesk" stylemapstylename="bold"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="100"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex Bold" familyname="Aktiv Grotesk" stylename="Ex Bold" filename="../instances/AktivGroteskEx_Bd.ufo" postscriptfontname="AktivGrotesk-ExBold" stylemapfamilyname="Aktiv Grotesk Ex" stylemapstylename="bold"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="125"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd XBold" familyname="Aktiv Grotesk" stylename="Cd XBold" filename="../instances/AktivGroteskCd_XBd.ufo" postscriptfontname="AktivGrotesk-CdXBold" stylemapfamilyname="Aktiv Grotesk Cd XBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="75"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk XBold" familyname="Aktiv Grotesk" stylename="XBold" filename="../instances/AktivGrotesk_XBd.ufo" postscriptfontname="AktivGrotesk-XBold" stylemapfamilyname="Aktiv Grotesk XBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="100"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex XBold" familyname="Aktiv Grotesk" stylename="Ex XBold" filename="../instances/AktivGroteskEx_XBd.ufo" postscriptfontname="AktivGrotesk-ExXBold" stylemapfamilyname="Aktiv Grotesk Ex XBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="125"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd Black" familyname="Aktiv Grotesk" stylename="Cd Black" filename="../instances/AktivGroteskCd_Blk.ufo" postscriptfontname="AktivGrotesk-CdBlack" stylemapfamilyname="Aktiv Grotesk Cd Black" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="75"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Black" familyname="Aktiv Grotesk" stylename="Black" filename="../instances/AktivGrotesk_Blk.ufo" postscriptfontname="AktivGrotesk-Black" stylemapfamilyname="Aktiv Grotesk Black" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="100"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex Black" familyname="Aktiv Grotesk" stylename="Ex Black" filename="../instances/AktivGroteskEx_Blk.ufo" postscriptfontname="AktivGrotesk-ExBlack" stylemapfamilyname="Aktiv Grotesk Ex Black" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="125"/> + </location> + <kerning/> + <info/> + </instance> + </instances> +</designspace> diff --git a/Tests/designspaceLib/data/convert5to4_output/AktivGroteskVF_WghtWdthItal.designspace b/Tests/designspaceLib/data/convert5to4_output/AktivGroteskVF_WghtWdthItal.designspace new file mode 100644 index 00000000..5b419bad --- /dev/null +++ b/Tests/designspaceLib/data/convert5to4_output/AktivGroteskVF_WghtWdthItal.designspace @@ -0,0 +1,670 @@ +<?xml version='1.0' encoding='UTF-8'?> +<designspace format="4.1"> + <axes> + <axis tag="wght" name="Weight" minimum="100" maximum="900" default="400"> + <map input="100" output="22"/> + <map input="200" output="38"/> + <map input="300" output="57"/> + <map input="400" output="84"/> + <map input="500" output="98"/> + <map input="600" output="115"/> + <map input="700" output="133"/> + <map input="800" output="158"/> + <map input="900" output="185"/> + </axis> + <axis tag="wdth" name="Width" minimum="75" maximum="125" default="100"/> + <axis tag="ital" name="Italic" minimum="0" maximum="1" default="0"/> + </axes> + <rules processing="last"> + <rule name="BRACKET.CYR"> + <conditionset> + <condition name="Italic" minimum="0.1" maximum="1"/> + </conditionset> + <sub name="ghe.loclSRB" with="ghe.ital.loclSRB"/> + <sub name="ghe.loclMKD" with="ghe.ital.loclMKD"/> + <sub name="de.loclMKDSRB" with="de.ital.loclMKDSRB"/> + <sub name="pe.loclMKDSRB" with="pe.ital.loclMKDSRB"/> + <sub name="te.loclMKDSRB" with="te.ital.loclMKDSRB"/> + <sub name="gje.loclMKD" with="gje.ital.loclMKD"/> + <sub name="sha.loclMKDSRB" with="sha.ital.loclMKDSRB"/> + </rule> + <rule name="BRACKET.116.185"> + <conditionset> + <condition name="Weight" minimum="116" maximum="185"/> + <condition name="Width" minimum="75" maximum="97.5"/> + </conditionset> + <sub name="cent" with="cent.BRACKET.130"/> + <sub name="dollar" with="dollar.BRACKET.130"/> + </rule> + </rules> + <sources> + <source filename="../AktivGroteskCd_Hair.ufo" name="Aktiv Grotesk Cd Hair"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="../AktivGroteskCd_HairIt.ufo" name="Aktiv Grotesk Cd Hair Italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="../AktivGrotesk_Hair.ufo" name="Aktiv Grotesk Hair"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="../AktivGrotesk_HairIt.ufo" name="Aktiv Grotesk Hair Italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="../AktivGroteskEx_Hair.ufo" name="Aktiv Grotesk Ex Hair"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="../AktivGroteskEx_HairIt.ufo" name="Aktiv Grotesk Ex Hair Italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="../AktivGroteskCd_Rg.ufo" name="Aktiv Grotesk Cd"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="../AktivGroteskCd_It.ufo" name="Aktiv Grotesk Cd Italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="../AktivGrotesk_Rg.ufo" name="Aktiv Grotesk Regular" familyname="Aktiv Grotesk"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="../AktivGrotesk_Rg.ufo" name="Aktiv Grotesk Regular" layer="{126,100,0}"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="../AktivGrotesk_It.ufo" name="Aktiv Grotesk Italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="../AktivGrotesk_It.ufo" name="Aktiv Grotesk Italic {126,100,1}" layer="{126,100,1}"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="../AktivGroteskEx_Rg.ufo" name="Aktiv Grotesk Ex"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="../AktivGroteskEx_It.ufo" name="Aktiv Grotesk Ex Italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="../AktivGroteskCd_Blk.ufo" name="Aktiv Grotesk Cd Black"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="../AktivGroteskCd_BlkIt.ufo" name="Aktiv Grotesk Cd Black Italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="../AktivGrotesk_Blk.ufo" name="Aktiv Grotesk Black"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="../AktivGrotesk_BlkIt.ufo" name="Aktiv Grotesk Black Italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="../AktivGroteskEx_Blk.ufo" name="Aktiv Grotesk Ex Black"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="../AktivGroteskEx_BlkIt.ufo" name="Aktiv Grotesk Ex Black Italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + </sources> + <instances> + <instance name="Aktiv Grotesk Cd Hair" familyname="Aktiv Grotesk" stylename="Cd Hair" filename="../instances/AktivGroteskCd_Hair.ufo" postscriptfontname="AktivGrotesk-CdHair" stylemapfamilyname="Aktiv Grotesk Cd Hair" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd Hair Italic" familyname="Aktiv Grotesk" stylename="Cd Hair Italic" filename="../instances/AktivGroteskCd_HairIt.ufo" postscriptfontname="AktivGrotesk-CdHairItalic" stylemapfamilyname="Aktiv Grotesk Cd Hair" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Hair" familyname="Aktiv Grotesk" stylename="Hair" filename="../instances/AktivGrotesk_Hair.ufo" postscriptfontname="AktivGrotesk-Hair" stylemapfamilyname="Aktiv Grotesk Hair" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Hair Italic" familyname="Aktiv Grotesk" stylename="Hair Italic" filename="../instances/AktivGrotesk_HairIt.ufo" postscriptfontname="AktivGrotesk-HairItalic" stylemapfamilyname="Aktiv Grotesk Hair" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex Hair" familyname="Aktiv Grotesk" stylename="Ex Hair" filename="../instances/AktivGroteskEx_Hair.ufo" postscriptfontname="AktivGrotesk-ExHair" stylemapfamilyname="Aktiv Grotesk Ex Hair" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex Hair Italic" familyname="Aktiv Grotesk" stylename="Ex Hair Italic" filename="../instances/AktivGroteskEx_HairIt.ufo" postscriptfontname="AktivGrotesk-ExHairItalic" stylemapfamilyname="Aktiv Grotesk Ex Hair" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd Thin" familyname="Aktiv Grotesk" stylename="Cd Thin" filename="../instances/AktivGroteskCd_Th.ufo" postscriptfontname="AktivGrotesk-CdThin" stylemapfamilyname="Aktiv Grotesk Cd Thin" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd Thin Italic" familyname="Aktiv Grotesk" stylename="Cd Thin Italic" filename="../instances/AktivGroteskCd_ThIt.ufo" postscriptfontname="AktivGrotesk-CdThinItalic" stylemapfamilyname="Aktiv Grotesk Cd Thin" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Thin" familyname="Aktiv Grotesk" stylename="Thin" filename="../instances/AktivGrotesk_Th.ufo" postscriptfontname="AktivGrotesk-Thin" stylemapfamilyname="Aktiv Grotesk Thin" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Thin Italic" familyname="Aktiv Grotesk" stylename="Thin Italic" filename="../instances/AktivGrotesk_ThIt.ufo" postscriptfontname="AktivGrotesk-ThinItalic" stylemapfamilyname="Aktiv Grotesk Thin" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex Thin" familyname="Aktiv Grotesk" stylename="Ex Thin" filename="../instances/AktivGroteskEx_Th.ufo" postscriptfontname="AktivGrotesk-ExThin" stylemapfamilyname="Aktiv Grotesk Ex Thin" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex Thin Italic" familyname="Aktiv Grotesk" stylename="Ex Thin Italic" filename="../instances/AktivGroteskEx_ThIt.ufo" postscriptfontname="AktivGrotesk-ExThinItalic" stylemapfamilyname="Aktiv Grotesk Ex Thin" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd Light" familyname="Aktiv Grotesk" stylename="Cd Light" filename="../instances/AktivGroteskCd_Lt.ufo" postscriptfontname="AktivGrotesk-CdLight" stylemapfamilyname="Aktiv Grotesk Cd Light" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd Light Italic" familyname="Aktiv Grotesk" stylename="Cd Light Italic" filename="../instances/AktivGroteskCd_LtIt.ufo" postscriptfontname="AktivGrotesk-CdLightItalic" stylemapfamilyname="Aktiv Grotesk Cd Light" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Light" familyname="Aktiv Grotesk" stylename="Light" filename="../instances/AktivGrotesk_Lt.ufo" postscriptfontname="AktivGrotesk-Light" stylemapfamilyname="Aktiv Grotesk Light" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Light Italic" familyname="Aktiv Grotesk" stylename="Light Italic" filename="../instances/AktivGrotesk_LtIt.ufo" postscriptfontname="AktivGrotesk-LightItalic" stylemapfamilyname="Aktiv Grotesk Light" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex Light" familyname="Aktiv Grotesk" stylename="Ex Light" filename="../instances/AktivGroteskEx_Lt.ufo" postscriptfontname="AktivGrotesk-ExLight" stylemapfamilyname="Aktiv Grotesk Ex Light" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex Light Italic" familyname="Aktiv Grotesk" stylename="Ex Light Italic" filename="../instances/AktivGroteskEx_LtIt.ufo" postscriptfontname="AktivGrotesk-ExLightItalic" stylemapfamilyname="Aktiv Grotesk Ex Light" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd" familyname="Aktiv Grotesk" stylename="Cd" filename="../instances/AktivGroteskCd_Rg.ufo" postscriptfontname="AktivGrotesk-Cd" stylemapfamilyname="Aktiv Grotesk Cd" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd Italic" familyname="Aktiv Grotesk" stylename="Cd Italic" filename="../instances/AktivGroteskCd_It.ufo" postscriptfontname="AktivGrotesk-CdItalic" stylemapfamilyname="Aktiv Grotesk Cd" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk " familyname="Aktiv Grotesk" stylename="" filename="../instances/AktivGrotesk_Rg.ufo" postscriptfontname="AktivGrotesk-" stylemapfamilyname="Aktiv Grotesk" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Italic" familyname="Aktiv Grotesk" stylename="Italic" filename="../instances/AktivGrotesk_It.ufo" postscriptfontname="AktivGrotesk-Italic" stylemapfamilyname="Aktiv Grotesk" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex" familyname="Aktiv Grotesk" stylename="Ex" filename="../instances/AktivGroteskEx_Rg.ufo" postscriptfontname="AktivGrotesk-Ex" stylemapfamilyname="Aktiv Grotesk Ex" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex Italic" familyname="Aktiv Grotesk" stylename="Ex Italic" filename="../instances/AktivGroteskEx_It.ufo" postscriptfontname="AktivGrotesk-ExItalic" stylemapfamilyname="Aktiv Grotesk Ex" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd Medium" familyname="Aktiv Grotesk" stylename="Cd Medium" filename="../instances/AktivGroteskCd_Md.ufo" postscriptfontname="AktivGrotesk-CdMedium" stylemapfamilyname="Aktiv Grotesk Cd Medium" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd Medium Italic" familyname="Aktiv Grotesk" stylename="Cd Medium Italic" filename="../instances/AktivGroteskCd_MdIt.ufo" postscriptfontname="AktivGrotesk-CdMediumItalic" stylemapfamilyname="Aktiv Grotesk Cd Medium" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Medium" familyname="Aktiv Grotesk" stylename="Medium" filename="../instances/AktivGrotesk_Md.ufo" postscriptfontname="AktivGrotesk-Medium" stylemapfamilyname="Aktiv Grotesk Medium" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Medium Italic" familyname="Aktiv Grotesk" stylename="Medium Italic" filename="../instances/AktivGrotesk_MdIt.ufo" postscriptfontname="AktivGrotesk-MediumItalic" stylemapfamilyname="Aktiv Grotesk Medium" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex Medium" familyname="Aktiv Grotesk" stylename="Ex Medium" filename="../instances/AktivGroteskEx_Md.ufo" postscriptfontname="AktivGrotesk-ExMedium" stylemapfamilyname="Aktiv Grotesk Ex Medium" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex Medium Italic" familyname="Aktiv Grotesk" stylename="Ex Medium Italic" filename="../instances/AktivGroteskEx_MdIt.ufo" postscriptfontname="AktivGrotesk-ExMediumItalic" stylemapfamilyname="Aktiv Grotesk Ex Medium" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd SemiBold" familyname="Aktiv Grotesk" stylename="Cd SemiBold" filename="../../build/instances/AktivGroteskCd_SBd.ufo" postscriptfontname="AktivGrotesk-CdSemiBold" stylemapfamilyname="Aktiv Grotesk Cd SemiBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd SemiBold Italic" familyname="Aktiv Grotesk" stylename="Cd SemiBold Italic" filename="../../build/instances/AktivGroteskCd_SBdIt.ufo" postscriptfontname="AktivGrotesk-CdSemiBoldItalic" stylemapfamilyname="Aktiv Grotesk Cd SemiBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk SemiBold" familyname="Aktiv Grotesk" stylename="SemiBold" filename="../../build/instances/AktivGrotesk_SBd.ufo" postscriptfontname="AktivGrotesk-SemiBold" stylemapfamilyname="Aktiv Grotesk SemiBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk SemiBold Italic" familyname="Aktiv Grotesk" stylename="SemiBold Italic" filename="../../build/instances/AktivGrotesk_SBdIt.ufo" postscriptfontname="AktivGrotesk-SemiBoldItalic" stylemapfamilyname="Aktiv Grotesk SemiBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex SemiBold" familyname="Aktiv Grotesk" stylename="Ex SemiBold" filename="../../build/instances/AktivGroteskEx_SBd.ufo" postscriptfontname="AktivGrotesk-ExSemiBold" stylemapfamilyname="Aktiv Grotesk Ex SemiBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex SemiBold Italic" familyname="Aktiv Grotesk" stylename="Ex SemiBold Italic" filename="../../build/instances/AktivGroteskEx_SBdIt.ufo" postscriptfontname="AktivGrotesk-ExSemiBoldItalic" stylemapfamilyname="Aktiv Grotesk Ex SemiBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd Bold" familyname="Aktiv Grotesk" stylename="Cd Bold" filename="../instances/AktivGroteskCd_Bd.ufo" postscriptfontname="AktivGrotesk-CdBold" stylemapfamilyname="Aktiv Grotesk Cd" stylemapstylename="bold"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd Bold Italic" familyname="Aktiv Grotesk" stylename="Cd Bold Italic" filename="../instances/AktivGroteskCd_BdIt.ufo" postscriptfontname="AktivGrotesk-CdBoldItalic" stylemapfamilyname="Aktiv Grotesk Cd" stylemapstylename="bold italic"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Bold" familyname="Aktiv Grotesk" stylename="Bold" filename="../instances/AktivGrotesk_Bd.ufo" postscriptfontname="AktivGrotesk-Bold" stylemapfamilyname="Aktiv Grotesk" stylemapstylename="bold"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Bold Italic" familyname="Aktiv Grotesk" stylename="Bold Italic" filename="../instances/AktivGrotesk_BdIt.ufo" postscriptfontname="AktivGrotesk-BoldItalic" stylemapfamilyname="Aktiv Grotesk" stylemapstylename="bold italic"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex Bold" familyname="Aktiv Grotesk" stylename="Ex Bold" filename="../instances/AktivGroteskEx_Bd.ufo" postscriptfontname="AktivGrotesk-ExBold" stylemapfamilyname="Aktiv Grotesk Ex" stylemapstylename="bold"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex Bold Italic" familyname="Aktiv Grotesk" stylename="Ex Bold Italic" filename="../instances/AktivGroteskEx_BdIt.ufo" postscriptfontname="AktivGrotesk-ExBoldItalic" stylemapfamilyname="Aktiv Grotesk Ex" stylemapstylename="bold italic"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd XBold" familyname="Aktiv Grotesk" stylename="Cd XBold" filename="../instances/AktivGroteskCd_XBd.ufo" postscriptfontname="AktivGrotesk-CdXBold" stylemapfamilyname="Aktiv Grotesk Cd XBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd XBold Italic" familyname="Aktiv Grotesk" stylename="Cd XBold Italic" filename="../instances/AktivGroteskCd_XBdIt.ufo" postscriptfontname="AktivGrotesk-CdXBoldItalic" stylemapfamilyname="Aktiv Grotesk Cd XBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk XBold" familyname="Aktiv Grotesk" stylename="XBold" filename="../instances/AktivGrotesk_XBd.ufo" postscriptfontname="AktivGrotesk-XBold" stylemapfamilyname="Aktiv Grotesk XBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk XBold Italic" familyname="Aktiv Grotesk" stylename="XBold Italic" filename="../instances/AktivGrotesk_XBdIt.ufo" postscriptfontname="AktivGrotesk-XBoldItalic" stylemapfamilyname="Aktiv Grotesk XBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex XBold" familyname="Aktiv Grotesk" stylename="Ex XBold" filename="../instances/AktivGroteskEx_XBd.ufo" postscriptfontname="AktivGrotesk-ExXBold" stylemapfamilyname="Aktiv Grotesk Ex XBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex XBold Italic" familyname="Aktiv Grotesk" stylename="Ex XBold Italic" filename="../instances/AktivGroteskEx_XBdIt.ufo" postscriptfontname="AktivGrotesk-ExXBoldItalic" stylemapfamilyname="Aktiv Grotesk Ex XBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd Black" familyname="Aktiv Grotesk" stylename="Cd Black" filename="../instances/AktivGroteskCd_Blk.ufo" postscriptfontname="AktivGrotesk-CdBlack" stylemapfamilyname="Aktiv Grotesk Cd Black" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Cd Black Italic" familyname="Aktiv Grotesk" stylename="Cd Black Italic" filename="../instances/AktivGroteskCd_BlkIt.ufo" postscriptfontname="AktivGrotesk-CdBlackItalic" stylemapfamilyname="Aktiv Grotesk Cd Black" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Black" familyname="Aktiv Grotesk" stylename="Black" filename="../instances/AktivGrotesk_Blk.ufo" postscriptfontname="AktivGrotesk-Black" stylemapfamilyname="Aktiv Grotesk Black" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Black Italic" familyname="Aktiv Grotesk" stylename="Black Italic" filename="../instances/AktivGrotesk_BlkIt.ufo" postscriptfontname="AktivGrotesk-BlackItalic" stylemapfamilyname="Aktiv Grotesk Black" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex Black" familyname="Aktiv Grotesk" stylename="Ex Black" filename="../instances/AktivGroteskEx_Blk.ufo" postscriptfontname="AktivGrotesk-ExBlack" stylemapfamilyname="Aktiv Grotesk Ex Black" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Aktiv Grotesk Ex Black Italic" familyname="Aktiv Grotesk" stylename="Ex Black Italic" filename="../instances/AktivGroteskEx_BlkIt.ufo" postscriptfontname="AktivGrotesk-ExBlackItalic" stylemapfamilyname="Aktiv Grotesk Ex Black" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + <kerning/> + <info/> + </instance> + </instances> +</designspace> diff --git a/Tests/designspaceLib/data/convert5to4_output/SourceSerif4Variable-Italic.designspace b/Tests/designspaceLib/data/convert5to4_output/SourceSerif4Variable-Italic.designspace new file mode 100644 index 00000000..adfe245d --- /dev/null +++ b/Tests/designspaceLib/data/convert5to4_output/SourceSerif4Variable-Italic.designspace @@ -0,0 +1,326 @@ +<?xml version='1.0' encoding='UTF-8'?> +<designspace format="4.1"> + <axes> + <axis tag="wght" name="weight" minimum="200" maximum="900" default="400"> + <map input="200" output="0"/> + <map input="300" output="145"/> + <map input="400" output="394"/> + <map input="600" output="594"/> + <map input="700" output="823"/> + <map input="900" output="1000"/> + </axis> + <axis tag="opsz" name="optical" minimum="8" maximum="60" default="20"/> + </axes> + <sources> + <source filename="../caption/master_0/SourceSerif-Italic_c0.ufo"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="8"/> + </location> + </source> + <source filename="../caption/master_1/SourceSerif-Italic_c1.ufo"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="8"/> + </location> + </source> + <source filename="../caption/master_2/SourceSerif-Italic_c2.ufo"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="8"/> + </location> + </source> + <source filename="../text/master_0/SourceSerif-Italic_0.ufo"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="20"/> + </location> + </source> + <source filename="../text/master_1/SourceSerif-Italic_1.ufo"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="20"/> + </location> + </source> + <source filename="../text/master_2/SourceSerif-Italic_2.ufo"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="20"/> + </location> + </source> + <source filename="../display/master_0/SourceSerif-Italic_d0.ufo"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="60"/> + </location> + </source> + <source filename="../display/master_1/SourceSerif-Italic_d1.ufo"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="60"/> + </location> + </source> + <source filename="../display/master_2/SourceSerif-Italic_d2.ufo"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="60"/> + </location> + </source> + </sources> + <instances> + <instance name="Source Serif 4 Caption ExtraLight Italic" familyname="Source Serif 4" stylename="Caption ExtraLight Italic" filename="Source Serif 4-Caption ExtraLight Italic.ttf" postscriptfontname="SourceSerif4Italic-CaptionExtraLight" stylemapfamilyname="Source Serif 4 Caption ExtraLight Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="8"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Caption Light Italic" familyname="Source Serif 4" stylename="Caption Light Italic" filename="Source Serif 4-Caption Light Italic.ttf" postscriptfontname="SourceSerif4Italic-CaptionLight" stylemapfamilyname="Source Serif 4 Caption Light Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="8"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Caption Italic" familyname="Source Serif 4" stylename="Caption Italic" filename="Source Serif 4-Caption Italic.ttf" postscriptfontname="SourceSerif4Italic-CaptionRegular" stylemapfamilyname="Source Serif 4 Caption Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="8"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Caption Semibold Italic" familyname="Source Serif 4" stylename="Caption Semibold Italic" filename="Source Serif 4-Caption Semibold Italic.ttf" postscriptfontname="SourceSerif4Italic-CaptionSemibold" stylemapfamilyname="Source Serif 4 Caption Semibold Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="8"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Caption Bold Italic" familyname="Source Serif 4" stylename="Caption Bold Italic" filename="Source Serif 4-Caption Bold Italic.ttf" postscriptfontname="SourceSerif4Italic-CaptionBold" stylemapfamilyname="Source Serif 4 Caption Bold Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="8"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Caption Black Italic" familyname="Source Serif 4" stylename="Caption Black Italic" filename="Source Serif 4-Caption Black Italic.ttf" postscriptfontname="SourceSerif4Italic-CaptionBlack" stylemapfamilyname="Source Serif 4 Caption Black Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="8"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 SmText ExtraLight Italic" familyname="Source Serif 4" stylename="SmText ExtraLight Italic" filename="Source Serif 4-SmText ExtraLight Italic.ttf" postscriptfontname="SourceSerif4Italic-SmTextExtraLight" stylemapfamilyname="Source Serif 4 SmallText ExtraLight Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="16"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 SmText Light Italic" familyname="Source Serif 4" stylename="SmText Light Italic" filename="Source Serif 4-SmText Light Italic.ttf" postscriptfontname="SourceSerif4Italic-SmTextLight" stylemapfamilyname="Source Serif 4 SmallText Light Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="16"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 SmText Italic" familyname="Source Serif 4" stylename="SmText Italic" filename="Source Serif 4-SmText Italic.ttf" postscriptfontname="SourceSerif4Italic-SmTextRegular" stylemapfamilyname="Source Serif 4 SmallText Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="16"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 SmText Semibold Italic" familyname="Source Serif 4" stylename="SmText Semibold Italic" filename="Source Serif 4-SmText Semibold Italic.ttf" postscriptfontname="SourceSerif4Italic-SmTextSemibold" stylemapfamilyname="Source Serif 4 SmallText Semibold Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="16"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 SmText Bold Italic" familyname="Source Serif 4" stylename="SmText Bold Italic" filename="Source Serif 4-SmText Bold Italic.ttf" postscriptfontname="SourceSerif4Italic-SmTextBold" stylemapfamilyname="Source Serif 4 SmallText Bold Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="16"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 SmText Black Italic" familyname="Source Serif 4" stylename="SmText Black Italic" filename="Source Serif 4-SmText Black Italic.ttf" postscriptfontname="SourceSerif4Italic-SmTextBlack" stylemapfamilyname="Source Serif 4 SmallText Black Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="16"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 ExtraLight Italic" familyname="Source Serif 4" stylename="ExtraLight Italic" filename="Source Serif 4-ExtraLight Italic.ttf" postscriptfontname="SourceSerif4Italic-ExtraLight" stylemapfamilyname="Source Serif 4 ExtraLight Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="20"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Light Italic" familyname="Source Serif 4" stylename="Light Italic" filename="Source Serif 4-Light Italic.ttf" postscriptfontname="SourceSerif4Italic-Light" stylemapfamilyname="Source Serif 4 Light Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="20"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Italic" familyname="Source Serif 4" stylename="Italic" filename="Source Serif 4-Italic.ttf" postscriptfontname="SourceSerif4Italic-Regular" stylemapfamilyname="Source Serif 4 Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="20"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Semibold Italic" familyname="Source Serif 4" stylename="Semibold Italic" filename="Source Serif 4-Semibold Italic.ttf" postscriptfontname="SourceSerif4Italic-Semibold" stylemapfamilyname="Source Serif 4 Semibold Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="20"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Bold Italic" familyname="Source Serif 4" stylename="Bold Italic" filename="Source Serif 4-Bold Italic.ttf" postscriptfontname="SourceSerif4Italic-Bold" stylemapfamilyname="Source Serif 4 Bold Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="20"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Black Italic" familyname="Source Serif 4" stylename="Black Italic" filename="Source Serif 4-Black Italic.ttf" postscriptfontname="SourceSerif4Italic-Black" stylemapfamilyname="Source Serif 4 Black Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="20"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Subhead ExtraLight Italic" familyname="Source Serif 4" stylename="Subhead ExtraLight Italic" filename="Source Serif 4-Subhead ExtraLight Italic.ttf" postscriptfontname="SourceSerif4Italic-SubheadExtraLight" stylemapfamilyname="Source Serif 4 Subhead ExtraLight Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="32"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Subhead Light Italic" familyname="Source Serif 4" stylename="Subhead Light Italic" filename="Source Serif 4-Subhead Light Italic.ttf" postscriptfontname="SourceSerif4Italic-SubheadLight" stylemapfamilyname="Source Serif 4 Subhead Light Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="32"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Subhead Italic" familyname="Source Serif 4" stylename="Subhead Italic" filename="Source Serif 4-Subhead Italic.ttf" postscriptfontname="SourceSerif4Italic-SubheadRegular" stylemapfamilyname="Source Serif 4 Subhead Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="32"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Subhead Semibold Italic" familyname="Source Serif 4" stylename="Subhead Semibold Italic" filename="Source Serif 4-Subhead Semibold Italic.ttf" postscriptfontname="SourceSerif4Italic-SubheadSemibold" stylemapfamilyname="Source Serif 4 Subhead Semibold Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="32"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Subhead Bold Italic" familyname="Source Serif 4" stylename="Subhead Bold Italic" filename="Source Serif 4-Subhead Bold Italic.ttf" postscriptfontname="SourceSerif4Italic-SubheadBold" stylemapfamilyname="Source Serif 4 Subhead Bold Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="32"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Subhead Black Italic" familyname="Source Serif 4" stylename="Subhead Black Italic" filename="Source Serif 4-Subhead Black Italic.ttf" postscriptfontname="SourceSerif4Italic-SubheadBlack" stylemapfamilyname="Source Serif 4 Subhead Black Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="32"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Display ExtraLight Italic" familyname="Source Serif 4" stylename="Display ExtraLight Italic" filename="Source Serif 4-Display ExtraLight Italic.ttf" postscriptfontname="SourceSerif4Italic-DisplayExtraLight" stylemapfamilyname="Source Serif 4 Display ExtraLight Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="60"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Display Light Italic" familyname="Source Serif 4" stylename="Display Light Italic" filename="Source Serif 4-Display Light Italic.ttf" postscriptfontname="SourceSerif4Italic-DisplayLight" stylemapfamilyname="Source Serif 4 Display Light Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="60"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Display Italic" familyname="Source Serif 4" stylename="Display Italic" filename="Source Serif 4-Display Italic.ttf" postscriptfontname="SourceSerif4Italic-DisplayRegular" stylemapfamilyname="Source Serif 4 Display Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="60"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Display Semibold Italic" familyname="Source Serif 4" stylename="Display Semibold Italic" filename="Source Serif 4-Display Semibold Italic.ttf" postscriptfontname="SourceSerif4Italic-DisplaySemibold" stylemapfamilyname="Source Serif 4 Display Semibold Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="60"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Display Bold Italic" familyname="Source Serif 4" stylename="Display Bold Italic" filename="Source Serif 4-Display Bold Italic.ttf" postscriptfontname="SourceSerif4Italic-DisplayBold" stylemapfamilyname="Source Serif 4 Display Bold Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="60"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Display Black Italic" familyname="Source Serif 4" stylename="Display Black Italic" filename="Source Serif 4-Display Black Italic.ttf" postscriptfontname="SourceSerif4Italic-DisplayBlack" stylemapfamilyname="Source Serif 4 Display Black Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="60"/> + </location> + <kerning/> + <info/> + </instance> + </instances> + <lib> + <dict> + <key>public.skipExportGlyphs</key> + <array> + <string>caron.alt</string> + <string>commabelowcmb.alt</string> + <string>f.liga</string> + <string>f.ligalong</string> + <string>tonos.cap</string> + <string>dieresiscmb.tight</string> + <string>turkicdsccmb</string> + </array> + </dict> + </lib> +</designspace> diff --git a/Tests/designspaceLib/data/convert5to4_output/SourceSerif4Variable-Roman.designspace b/Tests/designspaceLib/data/convert5to4_output/SourceSerif4Variable-Roman.designspace new file mode 100644 index 00000000..30f181e3 --- /dev/null +++ b/Tests/designspaceLib/data/convert5to4_output/SourceSerif4Variable-Roman.designspace @@ -0,0 +1,334 @@ +<?xml version='1.0' encoding='UTF-8'?> +<designspace format="4.1"> + <axes> + <axis tag="wght" name="weight" minimum="200" maximum="900" default="400"> + <map input="200" output="0"/> + <map input="300" output="145"/> + <map input="400" output="394"/> + <map input="600" output="594"/> + <map input="700" output="823"/> + <map input="900" output="1000"/> + </axis> + <axis tag="opsz" name="optical" minimum="8" maximum="60" default="20"/> + </axes> + <sources> + <source filename="../caption/master_0/SourceSerif_c0.ufo"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="8"/> + </location> + </source> + <source filename="../caption/master_1/SourceSerif_c1.ufo"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="8"/> + </location> + </source> + <source filename="../caption/master_2/SourceSerif_c2.ufo"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="8"/> + </location> + </source> + <source filename="../text/master_0/SourceSerif_0.ufo"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="20"/> + </location> + </source> + <source filename="../text/master_1/SourceSerif_1.ufo" familyname="Source Serif 4"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="20"/> + </location> + </source> + <source filename="../text/master_2/SourceSerif_2.ufo"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="20"/> + </location> + </source> + <source filename="../display/master_0/SourceSerif_d0.ufo"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="60"/> + </location> + </source> + <source filename="../display/master_1/SourceSerif_d1.ufo"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="60"/> + </location> + </source> + <source filename="../display/master_2/SourceSerif_d2.ufo"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="60"/> + </location> + </source> + </sources> + <instances> + <instance name="Source Serif 4 Caption ExtraLight" familyname="Source Serif 4" stylename="Caption ExtraLight" filename="Source Serif 4-Caption ExtraLight.ttf" postscriptfontname="SourceSerif4Roman-CaptionExtraLight" stylemapfamilyname="Source Serif 4 Caption ExtraLight" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="8"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Caption Light" familyname="Source Serif 4" stylename="Caption Light" filename="Source Serif 4-Caption Light.ttf" postscriptfontname="SourceSerif4Roman-CaptionLight" stylemapfamilyname="Source Serif 4 Caption Light" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="8"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Caption" familyname="Source Serif 4" stylename="Caption" filename="Source Serif 4-Caption.ttf" postscriptfontname="SourceSerif4Roman-CaptionRegular" stylemapfamilyname="Source Serif 4 Caption" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="8"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Caption Semibold" familyname="Source Serif 4" stylename="Caption Semibold" filename="Source Serif 4-Caption Semibold.ttf" postscriptfontname="SourceSerif4Roman-CaptionSemibold" stylemapfamilyname="Source Serif 4 Caption Semibold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="8"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Caption Bold" familyname="Source Serif 4" stylename="Caption Bold" filename="Source Serif 4-Caption Bold.ttf" postscriptfontname="SourceSerif4Roman-CaptionBold" stylemapfamilyname="Source Serif 4 Caption Bold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="8"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Caption Black" familyname="Source Serif 4" stylename="Caption Black" filename="Source Serif 4-Caption Black.ttf" postscriptfontname="SourceSerif4Roman-CaptionBlack" stylemapfamilyname="Source Serif 4 Caption Black" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="8"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 SmText ExtraLight" familyname="Source Serif 4" stylename="SmText ExtraLight" filename="Source Serif 4-SmText ExtraLight.ttf" postscriptfontname="SourceSerif4Roman-SmTextExtraLight" stylemapfamilyname="Source Serif 4 SmallText ExtraLight" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="16"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 SmText Light" familyname="Source Serif 4" stylename="SmText Light" filename="Source Serif 4-SmText Light.ttf" postscriptfontname="SourceSerif4Roman-SmTextLight" stylemapfamilyname="Source Serif 4 SmallText Light" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="16"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 SmText" familyname="Source Serif 4" stylename="SmText" filename="Source Serif 4-SmText.ttf" postscriptfontname="SourceSerif4Roman-SmTextRegular" stylemapfamilyname="Source Serif 4 SmallText" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="16"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 SmText Semibold" familyname="Source Serif 4" stylename="SmText Semibold" filename="Source Serif 4-SmText Semibold.ttf" postscriptfontname="SourceSerif4Roman-SmTextSemibold" stylemapfamilyname="Source Serif 4 SmallText Semibold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="16"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 SmText Bold" familyname="Source Serif 4" stylename="SmText Bold" filename="Source Serif 4-SmText Bold.ttf" postscriptfontname="SourceSerif4Roman-SmTextBold" stylemapfamilyname="Source Serif 4 SmallText Bold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="16"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 SmText Black" familyname="Source Serif 4" stylename="SmText Black" filename="Source Serif 4-SmText Black.ttf" postscriptfontname="SourceSerif4Roman-SmTextBlack" stylemapfamilyname="Source Serif 4 SmallText Black" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="16"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 ExtraLight" familyname="Source Serif 4" stylename="ExtraLight" filename="Source Serif 4-ExtraLight.ttf" postscriptfontname="SourceSerif4Roman-ExtraLight" stylemapfamilyname="Source Serif 4 ExtraLight" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="20"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Light" familyname="Source Serif 4" stylename="Light" filename="Source Serif 4-Light.ttf" postscriptfontname="SourceSerif4Roman-Light" stylemapfamilyname="Source Serif 4 Light" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="20"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Regular" familyname="Source Serif 4" stylename="Regular" filename="Source Serif 4-Regular.ttf" postscriptfontname="SourceSerif4Roman-Regular" stylemapfamilyname="Source Serif 4" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="20"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Semibold" familyname="Source Serif 4" stylename="Semibold" filename="Source Serif 4-Semibold.ttf" postscriptfontname="SourceSerif4Roman-Semibold" stylemapfamilyname="Source Serif 4 Semibold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="20"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Bold" familyname="Source Serif 4" stylename="Bold" filename="Source Serif 4-Bold.ttf" postscriptfontname="SourceSerif4Roman-Bold" stylemapfamilyname="Source Serif 4 Bold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="20"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Black" familyname="Source Serif 4" stylename="Black" filename="Source Serif 4-Black.ttf" postscriptfontname="SourceSerif4Roman-Black" stylemapfamilyname="Source Serif 4 Black" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="20"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Subhead ExtraLight" familyname="Source Serif 4" stylename="Subhead ExtraLight" filename="Source Serif 4-Subhead ExtraLight.ttf" postscriptfontname="SourceSerif4Roman-SubheadExtraLight" stylemapfamilyname="Source Serif 4 Subhead ExtraLight" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="32"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Subhead Light" familyname="Source Serif 4" stylename="Subhead Light" filename="Source Serif 4-Subhead Light.ttf" postscriptfontname="SourceSerif4Roman-SubheadLight" stylemapfamilyname="Source Serif 4 Subhead Light" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="32"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Subhead" familyname="Source Serif 4" stylename="Subhead" filename="Source Serif 4-Subhead.ttf" postscriptfontname="SourceSerif4Roman-SubheadRegular" stylemapfamilyname="Source Serif 4 Subhead" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="32"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Subhead Semibold" familyname="Source Serif 4" stylename="Subhead Semibold" filename="Source Serif 4-Subhead Semibold.ttf" postscriptfontname="SourceSerif4Roman-SubheadSemibold" stylemapfamilyname="Source Serif 4 Subhead Semibold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="32"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Subhead Bold" familyname="Source Serif 4" stylename="Subhead Bold" filename="Source Serif 4-Subhead Bold.ttf" postscriptfontname="SourceSerif4Roman-SubheadBold" stylemapfamilyname="Source Serif 4 Subhead Bold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="32"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Subhead Black" familyname="Source Serif 4" stylename="Subhead Black" filename="Source Serif 4-Subhead Black.ttf" postscriptfontname="SourceSerif4Roman-SubheadBlack" stylemapfamilyname="Source Serif 4 Subhead Black" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="32"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Display ExtraLight" familyname="Source Serif 4" stylename="Display ExtraLight" filename="Source Serif 4-Display ExtraLight.ttf" postscriptfontname="SourceSerif4Roman-DisplayExtraLight" stylemapfamilyname="Source Serif 4 Display ExtraLight" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="60"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Display Light" familyname="Source Serif 4" stylename="Display Light" filename="Source Serif 4-Display Light.ttf" postscriptfontname="SourceSerif4Roman-DisplayLight" stylemapfamilyname="Source Serif 4 Display Light" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="60"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Display" familyname="Source Serif 4" stylename="Display" filename="Source Serif 4-Display.ttf" postscriptfontname="SourceSerif4Roman-DisplayRegular" stylemapfamilyname="Source Serif 4 Display" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="60"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Display Semibold" familyname="Source Serif 4" stylename="Display Semibold" filename="Source Serif 4-Display Semibold.ttf" postscriptfontname="SourceSerif4Roman-DisplaySemibold" stylemapfamilyname="Source Serif 4 Display Semibold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="60"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Display Bold" familyname="Source Serif 4" stylename="Display Bold" filename="Source Serif 4-Display Bold.ttf" postscriptfontname="SourceSerif4Roman-DisplayBold" stylemapfamilyname="Source Serif 4 Display Bold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="60"/> + </location> + <kerning/> + <info/> + </instance> + <instance name="Source Serif 4 Display Black" familyname="Source Serif 4" stylename="Display Black" filename="Source Serif 4-Display Black.ttf" postscriptfontname="SourceSerif4Roman-DisplayBlack" stylemapfamilyname="Source Serif 4 Display Black" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="60"/> + </location> + <kerning/> + <info/> + </instance> + </instances> + <lib> + <dict> + <key>public.skipExportGlyphs</key> + <array> + <string>caron.alt</string> + <string>commabelowcmb.alt</string> + <string>tonos.cap</string> + <string>f.ligalong</string> + <string>dieresiscmb.tight</string> + <string>IJ</string> + <string>Tbar</string> + <string>colontriangularmod</string> + <string>crossmark</string> + <string>ij</string> + <string>overline</string> + <string>similar</string> + <string>tbar</string> + <string>triangularbullet</string> + <string>turkicdsccmb</string> + </array> + </dict> + </lib> +</designspace> diff --git a/Tests/designspaceLib/data/split_output/AktivGroteskVF_Italics_Wght.designspace b/Tests/designspaceLib/data/split_output/AktivGroteskVF_Italics_Wght.designspace new file mode 100644 index 00000000..dc38cd7d --- /dev/null +++ b/Tests/designspaceLib/data/split_output/AktivGroteskVF_Italics_Wght.designspace @@ -0,0 +1,96 @@ +<?xml version='1.0' encoding='UTF-8'?> +<designspace format="5.0"> + <axes> + <axis tag="wght" name="Weight" minimum="100" maximum="900" default="400"> + <map input="100" output="22"/> + <map input="200" output="38"/> + <map input="300" output="57"/> + <map input="400" output="84"/> + <map input="500" output="98"/> + <map input="600" output="115"/> + <map input="700" output="133"/> + <map input="800" output="158"/> + <map input="900" output="185"/> + </axis> + </axes> + <rules processing="last"> + <rule name="BRACKET.CYR"> + <sub name="ghe.loclSRB" with="ghe.ital.loclSRB"/> + <sub name="ghe.loclMKD" with="ghe.ital.loclMKD"/> + <sub name="de.loclMKDSRB" with="de.ital.loclMKDSRB"/> + <sub name="pe.loclMKDSRB" with="pe.ital.loclMKDSRB"/> + <sub name="te.loclMKDSRB" with="te.ital.loclMKDSRB"/> + <sub name="gje.loclMKD" with="gje.ital.loclMKD"/> + <sub name="sha.loclMKDSRB" with="sha.ital.loclMKDSRB"/> + </rule> + </rules> + <sources> + <source filename="../AktivGrotesk_HairIt.ufo" name="Aktiv Grotesk Hair Italic"> + <location> + <dimension name="Weight" xvalue="22"/> + </location> + </source> + <source filename="../AktivGrotesk_It.ufo" name="Aktiv Grotesk Italic"> + <location> + <dimension name="Weight" xvalue="84"/> + </location> + </source> + <source filename="../AktivGrotesk_It.ufo" name="Aktiv Grotesk Italic {126,100,1}" layer="{126,100,1}"> + <location> + <dimension name="Weight" xvalue="133"/> + </location> + </source> + <source filename="../AktivGrotesk_BlkIt.ufo" name="Aktiv Grotesk Black Italic"> + <location> + <dimension name="Weight" xvalue="185"/> + </location> + </source> + </sources> + <instances> + <instance name="Aktiv Grotesk Hair Italic" familyname="Aktiv Grotesk" stylename="Hair Italic" filename="../instances/AktivGrotesk_HairIt.ufo" postscriptfontname="AktivGrotesk-HairItalic" stylemapfamilyname="Aktiv Grotesk Hair" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="22"/> + </location> + </instance> + <instance name="Aktiv Grotesk Thin Italic" familyname="Aktiv Grotesk" stylename="Thin Italic" filename="../instances/AktivGrotesk_ThIt.ufo" postscriptfontname="AktivGrotesk-ThinItalic" stylemapfamilyname="Aktiv Grotesk Thin" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="38"/> + </location> + </instance> + <instance name="Aktiv Grotesk Light Italic" familyname="Aktiv Grotesk" stylename="Light Italic" filename="../instances/AktivGrotesk_LtIt.ufo" postscriptfontname="AktivGrotesk-LightItalic" stylemapfamilyname="Aktiv Grotesk Light" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="57"/> + </location> + </instance> + <instance name="Aktiv Grotesk Italic" familyname="Aktiv Grotesk" stylename="Italic" filename="../instances/AktivGrotesk_It.ufo" postscriptfontname="AktivGrotesk-Italic" stylemapfamilyname="Aktiv Grotesk" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="84"/> + </location> + </instance> + <instance name="Aktiv Grotesk Medium Italic" familyname="Aktiv Grotesk" stylename="Medium Italic" filename="../instances/AktivGrotesk_MdIt.ufo" postscriptfontname="AktivGrotesk-MediumItalic" stylemapfamilyname="Aktiv Grotesk Medium" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="98"/> + </location> + </instance> + <instance name="Aktiv Grotesk SemiBold Italic" familyname="Aktiv Grotesk" stylename="SemiBold Italic" filename="../../build/instances/AktivGrotesk_SBdIt.ufo" postscriptfontname="AktivGrotesk-SemiBoldItalic" stylemapfamilyname="Aktiv Grotesk SemiBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="115"/> + </location> + </instance> + <instance name="Aktiv Grotesk Bold Italic" familyname="Aktiv Grotesk" stylename="Bold Italic" filename="../instances/AktivGrotesk_BdIt.ufo" postscriptfontname="AktivGrotesk-BoldItalic" stylemapfamilyname="Aktiv Grotesk" stylemapstylename="bold italic"> + <location> + <dimension name="Weight" xvalue="133"/> + </location> + </instance> + <instance name="Aktiv Grotesk XBold Italic" familyname="Aktiv Grotesk" stylename="XBold Italic" filename="../instances/AktivGrotesk_XBdIt.ufo" postscriptfontname="AktivGrotesk-XBoldItalic" stylemapfamilyname="Aktiv Grotesk XBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="158"/> + </location> + </instance> + <instance name="Aktiv Grotesk Black Italic" familyname="Aktiv Grotesk" stylename="Black Italic" filename="../instances/AktivGrotesk_BlkIt.ufo" postscriptfontname="AktivGrotesk-BlackItalic" stylemapfamilyname="Aktiv Grotesk Black" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="185"/> + </location> + </instance> + </instances> +</designspace> diff --git a/Tests/designspaceLib/data/split_output/AktivGroteskVF_Italics_WghtWdth.designspace b/Tests/designspaceLib/data/split_output/AktivGroteskVF_Italics_WghtWdth.designspace new file mode 100644 index 00000000..8cda9140 --- /dev/null +++ b/Tests/designspaceLib/data/split_output/AktivGroteskVF_Italics_WghtWdth.designspace @@ -0,0 +1,262 @@ +<?xml version='1.0' encoding='UTF-8'?> +<designspace format="5.0"> + <axes> + <axis tag="wght" name="Weight" minimum="100" maximum="900" default="400"> + <map input="100" output="22"/> + <map input="200" output="38"/> + <map input="300" output="57"/> + <map input="400" output="84"/> + <map input="500" output="98"/> + <map input="600" output="115"/> + <map input="700" output="133"/> + <map input="800" output="158"/> + <map input="900" output="185"/> + </axis> + <axis tag="wdth" name="Width" minimum="75" maximum="125" default="100"/> + </axes> + <rules processing="last"> + <rule name="BRACKET.CYR"> + <sub name="ghe.loclSRB" with="ghe.ital.loclSRB"/> + <sub name="ghe.loclMKD" with="ghe.ital.loclMKD"/> + <sub name="de.loclMKDSRB" with="de.ital.loclMKDSRB"/> + <sub name="pe.loclMKDSRB" with="pe.ital.loclMKDSRB"/> + <sub name="te.loclMKDSRB" with="te.ital.loclMKDSRB"/> + <sub name="gje.loclMKD" with="gje.ital.loclMKD"/> + <sub name="sha.loclMKDSRB" with="sha.ital.loclMKDSRB"/> + </rule> + <rule name="BRACKET.116.185"> + <conditionset> + <condition name="Weight" minimum="116" maximum="185"/> + <condition name="Width" minimum="75" maximum="97.5"/> + </conditionset> + <sub name="cent" with="cent.BRACKET.130"/> + <sub name="dollar" with="dollar.BRACKET.130"/> + </rule> + </rules> + <sources> + <source filename="../AktivGroteskCd_HairIt.ufo" name="Aktiv Grotesk Cd Hair Italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="75"/> + </location> + </source> + <source filename="../AktivGrotesk_HairIt.ufo" name="Aktiv Grotesk Hair Italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="100"/> + </location> + </source> + <source filename="../AktivGroteskEx_HairIt.ufo" name="Aktiv Grotesk Ex Hair Italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="125"/> + </location> + </source> + <source filename="../AktivGroteskCd_It.ufo" name="Aktiv Grotesk Cd Italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="75"/> + </location> + </source> + <source filename="../AktivGrotesk_It.ufo" name="Aktiv Grotesk Italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="100"/> + </location> + </source> + <source filename="../AktivGrotesk_It.ufo" name="Aktiv Grotesk Italic {126,100,1}" layer="{126,100,1}"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="100"/> + </location> + </source> + <source filename="../AktivGroteskEx_It.ufo" name="Aktiv Grotesk Ex Italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="125"/> + </location> + </source> + <source filename="../AktivGroteskCd_BlkIt.ufo" name="Aktiv Grotesk Cd Black Italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="75"/> + </location> + </source> + <source filename="../AktivGrotesk_BlkIt.ufo" name="Aktiv Grotesk Black Italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="100"/> + </location> + </source> + <source filename="../AktivGroteskEx_BlkIt.ufo" name="Aktiv Grotesk Ex Black Italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="125"/> + </location> + </source> + </sources> + <instances> + <instance name="Aktiv Grotesk Cd Hair Italic" familyname="Aktiv Grotesk" stylename="Cd Hair Italic" filename="../instances/AktivGroteskCd_HairIt.ufo" postscriptfontname="AktivGrotesk-CdHairItalic" stylemapfamilyname="Aktiv Grotesk Cd Hair" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="75"/> + </location> + </instance> + <instance name="Aktiv Grotesk Hair Italic" familyname="Aktiv Grotesk" stylename="Hair Italic" filename="../instances/AktivGrotesk_HairIt.ufo" postscriptfontname="AktivGrotesk-HairItalic" stylemapfamilyname="Aktiv Grotesk Hair" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="100"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Hair Italic" familyname="Aktiv Grotesk" stylename="Ex Hair Italic" filename="../instances/AktivGroteskEx_HairIt.ufo" postscriptfontname="AktivGrotesk-ExHairItalic" stylemapfamilyname="Aktiv Grotesk Ex Hair" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="125"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Thin Italic" familyname="Aktiv Grotesk" stylename="Cd Thin Italic" filename="../instances/AktivGroteskCd_ThIt.ufo" postscriptfontname="AktivGrotesk-CdThinItalic" stylemapfamilyname="Aktiv Grotesk Cd Thin" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="75"/> + </location> + </instance> + <instance name="Aktiv Grotesk Thin Italic" familyname="Aktiv Grotesk" stylename="Thin Italic" filename="../instances/AktivGrotesk_ThIt.ufo" postscriptfontname="AktivGrotesk-ThinItalic" stylemapfamilyname="Aktiv Grotesk Thin" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="100"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Thin Italic" familyname="Aktiv Grotesk" stylename="Ex Thin Italic" filename="../instances/AktivGroteskEx_ThIt.ufo" postscriptfontname="AktivGrotesk-ExThinItalic" stylemapfamilyname="Aktiv Grotesk Ex Thin" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="125"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Light Italic" familyname="Aktiv Grotesk" stylename="Cd Light Italic" filename="../instances/AktivGroteskCd_LtIt.ufo" postscriptfontname="AktivGrotesk-CdLightItalic" stylemapfamilyname="Aktiv Grotesk Cd Light" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="75"/> + </location> + </instance> + <instance name="Aktiv Grotesk Light Italic" familyname="Aktiv Grotesk" stylename="Light Italic" filename="../instances/AktivGrotesk_LtIt.ufo" postscriptfontname="AktivGrotesk-LightItalic" stylemapfamilyname="Aktiv Grotesk Light" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="100"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Light Italic" familyname="Aktiv Grotesk" stylename="Ex Light Italic" filename="../instances/AktivGroteskEx_LtIt.ufo" postscriptfontname="AktivGrotesk-ExLightItalic" stylemapfamilyname="Aktiv Grotesk Ex Light" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="125"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Italic" familyname="Aktiv Grotesk" stylename="Cd Italic" filename="../instances/AktivGroteskCd_It.ufo" postscriptfontname="AktivGrotesk-CdItalic" stylemapfamilyname="Aktiv Grotesk Cd" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="75"/> + </location> + </instance> + <instance name="Aktiv Grotesk Italic" familyname="Aktiv Grotesk" stylename="Italic" filename="../instances/AktivGrotesk_It.ufo" postscriptfontname="AktivGrotesk-Italic" stylemapfamilyname="Aktiv Grotesk" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="100"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Italic" familyname="Aktiv Grotesk" stylename="Ex Italic" filename="../instances/AktivGroteskEx_It.ufo" postscriptfontname="AktivGrotesk-ExItalic" stylemapfamilyname="Aktiv Grotesk Ex" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="125"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Medium Italic" familyname="Aktiv Grotesk" stylename="Cd Medium Italic" filename="../instances/AktivGroteskCd_MdIt.ufo" postscriptfontname="AktivGrotesk-CdMediumItalic" stylemapfamilyname="Aktiv Grotesk Cd Medium" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="75"/> + </location> + </instance> + <instance name="Aktiv Grotesk Medium Italic" familyname="Aktiv Grotesk" stylename="Medium Italic" filename="../instances/AktivGrotesk_MdIt.ufo" postscriptfontname="AktivGrotesk-MediumItalic" stylemapfamilyname="Aktiv Grotesk Medium" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="100"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Medium Italic" familyname="Aktiv Grotesk" stylename="Ex Medium Italic" filename="../instances/AktivGroteskEx_MdIt.ufo" postscriptfontname="AktivGrotesk-ExMediumItalic" stylemapfamilyname="Aktiv Grotesk Ex Medium" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="125"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd SemiBold Italic" familyname="Aktiv Grotesk" stylename="Cd SemiBold Italic" filename="../../build/instances/AktivGroteskCd_SBdIt.ufo" postscriptfontname="AktivGrotesk-CdSemiBoldItalic" stylemapfamilyname="Aktiv Grotesk Cd SemiBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="75"/> + </location> + </instance> + <instance name="Aktiv Grotesk SemiBold Italic" familyname="Aktiv Grotesk" stylename="SemiBold Italic" filename="../../build/instances/AktivGrotesk_SBdIt.ufo" postscriptfontname="AktivGrotesk-SemiBoldItalic" stylemapfamilyname="Aktiv Grotesk SemiBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="100"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex SemiBold Italic" familyname="Aktiv Grotesk" stylename="Ex SemiBold Italic" filename="../../build/instances/AktivGroteskEx_SBdIt.ufo" postscriptfontname="AktivGrotesk-ExSemiBoldItalic" stylemapfamilyname="Aktiv Grotesk Ex SemiBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="125"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Bold Italic" familyname="Aktiv Grotesk" stylename="Cd Bold Italic" filename="../instances/AktivGroteskCd_BdIt.ufo" postscriptfontname="AktivGrotesk-CdBoldItalic" stylemapfamilyname="Aktiv Grotesk Cd" stylemapstylename="bold italic"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="75"/> + </location> + </instance> + <instance name="Aktiv Grotesk Bold Italic" familyname="Aktiv Grotesk" stylename="Bold Italic" filename="../instances/AktivGrotesk_BdIt.ufo" postscriptfontname="AktivGrotesk-BoldItalic" stylemapfamilyname="Aktiv Grotesk" stylemapstylename="bold italic"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="100"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Bold Italic" familyname="Aktiv Grotesk" stylename="Ex Bold Italic" filename="../instances/AktivGroteskEx_BdIt.ufo" postscriptfontname="AktivGrotesk-ExBoldItalic" stylemapfamilyname="Aktiv Grotesk Ex" stylemapstylename="bold italic"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="125"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd XBold Italic" familyname="Aktiv Grotesk" stylename="Cd XBold Italic" filename="../instances/AktivGroteskCd_XBdIt.ufo" postscriptfontname="AktivGrotesk-CdXBoldItalic" stylemapfamilyname="Aktiv Grotesk Cd XBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="75"/> + </location> + </instance> + <instance name="Aktiv Grotesk XBold Italic" familyname="Aktiv Grotesk" stylename="XBold Italic" filename="../instances/AktivGrotesk_XBdIt.ufo" postscriptfontname="AktivGrotesk-XBoldItalic" stylemapfamilyname="Aktiv Grotesk XBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="100"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex XBold Italic" familyname="Aktiv Grotesk" stylename="Ex XBold Italic" filename="../instances/AktivGroteskEx_XBdIt.ufo" postscriptfontname="AktivGrotesk-ExXBoldItalic" stylemapfamilyname="Aktiv Grotesk Ex XBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="125"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Black Italic" familyname="Aktiv Grotesk" stylename="Cd Black Italic" filename="../instances/AktivGroteskCd_BlkIt.ufo" postscriptfontname="AktivGrotesk-CdBlackItalic" stylemapfamilyname="Aktiv Grotesk Cd Black" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="75"/> + </location> + </instance> + <instance name="Aktiv Grotesk Black Italic" familyname="Aktiv Grotesk" stylename="Black Italic" filename="../instances/AktivGrotesk_BlkIt.ufo" postscriptfontname="AktivGrotesk-BlackItalic" stylemapfamilyname="Aktiv Grotesk Black" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="100"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Black Italic" familyname="Aktiv Grotesk" stylename="Ex Black Italic" filename="../instances/AktivGroteskEx_BlkIt.ufo" postscriptfontname="AktivGrotesk-ExBlackItalic" stylemapfamilyname="Aktiv Grotesk Ex Black" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="125"/> + </location> + </instance> + </instances> +</designspace> diff --git a/Tests/designspaceLib/data/split_output/AktivGroteskVF_Wght.designspace b/Tests/designspaceLib/data/split_output/AktivGroteskVF_Wght.designspace new file mode 100644 index 00000000..db621655 --- /dev/null +++ b/Tests/designspaceLib/data/split_output/AktivGroteskVF_Wght.designspace @@ -0,0 +1,85 @@ +<?xml version='1.0' encoding='UTF-8'?> +<designspace format="5.0"> + <axes> + <axis tag="wght" name="Weight" minimum="100" maximum="900" default="400"> + <map input="100" output="22"/> + <map input="200" output="38"/> + <map input="300" output="57"/> + <map input="400" output="84"/> + <map input="500" output="98"/> + <map input="600" output="115"/> + <map input="700" output="133"/> + <map input="800" output="158"/> + <map input="900" output="185"/> + </axis> + </axes> + <sources> + <source filename="../AktivGrotesk_Hair.ufo" name="Aktiv Grotesk Hair"> + <location> + <dimension name="Weight" xvalue="22"/> + </location> + </source> + <source filename="../AktivGrotesk_Rg.ufo" name="Aktiv Grotesk Regular" familyname="Aktiv Grotesk"> + <location> + <dimension name="Weight" xvalue="84"/> + </location> + </source> + <source filename="../AktivGrotesk_Rg.ufo" name="Aktiv Grotesk Regular" layer="{126,100,0}"> + <location> + <dimension name="Weight" xvalue="133"/> + </location> + </source> + <source filename="../AktivGrotesk_Blk.ufo" name="Aktiv Grotesk Black"> + <location> + <dimension name="Weight" xvalue="185"/> + </location> + </source> + </sources> + <instances> + <instance name="Aktiv Grotesk Hair" familyname="Aktiv Grotesk" stylename="Hair" filename="../instances/AktivGrotesk_Hair.ufo" postscriptfontname="AktivGrotesk-Hair" stylemapfamilyname="Aktiv Grotesk Hair" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="22"/> + </location> + </instance> + <instance name="Aktiv Grotesk Thin" familyname="Aktiv Grotesk" stylename="Thin" filename="../instances/AktivGrotesk_Th.ufo" postscriptfontname="AktivGrotesk-Thin" stylemapfamilyname="Aktiv Grotesk Thin" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="38"/> + </location> + </instance> + <instance name="Aktiv Grotesk Light" familyname="Aktiv Grotesk" stylename="Light" filename="../instances/AktivGrotesk_Lt.ufo" postscriptfontname="AktivGrotesk-Light" stylemapfamilyname="Aktiv Grotesk Light" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="57"/> + </location> + </instance> + <instance name="Aktiv Grotesk " familyname="Aktiv Grotesk" stylename="" filename="../instances/AktivGrotesk_Rg.ufo" postscriptfontname="AktivGrotesk-" stylemapfamilyname="Aktiv Grotesk" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="84"/> + </location> + </instance> + <instance name="Aktiv Grotesk Medium" familyname="Aktiv Grotesk" stylename="Medium" filename="../instances/AktivGrotesk_Md.ufo" postscriptfontname="AktivGrotesk-Medium" stylemapfamilyname="Aktiv Grotesk Medium" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="98"/> + </location> + </instance> + <instance name="Aktiv Grotesk SemiBold" familyname="Aktiv Grotesk" stylename="SemiBold" filename="../../build/instances/AktivGrotesk_SBd.ufo" postscriptfontname="AktivGrotesk-SemiBold" stylemapfamilyname="Aktiv Grotesk SemiBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="115"/> + </location> + </instance> + <instance name="Aktiv Grotesk Bold" familyname="Aktiv Grotesk" stylename="Bold" filename="../instances/AktivGrotesk_Bd.ufo" postscriptfontname="AktivGrotesk-Bold" stylemapfamilyname="Aktiv Grotesk" stylemapstylename="bold"> + <location> + <dimension name="Weight" xvalue="133"/> + </location> + </instance> + <instance name="Aktiv Grotesk XBold" familyname="Aktiv Grotesk" stylename="XBold" filename="../instances/AktivGrotesk_XBd.ufo" postscriptfontname="AktivGrotesk-XBold" stylemapfamilyname="Aktiv Grotesk XBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="158"/> + </location> + </instance> + <instance name="Aktiv Grotesk Black" familyname="Aktiv Grotesk" stylename="Black" filename="../instances/AktivGrotesk_Blk.ufo" postscriptfontname="AktivGrotesk-Black" stylemapfamilyname="Aktiv Grotesk Black" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="185"/> + </location> + </instance> + </instances> +</designspace> diff --git a/Tests/designspaceLib/data/split_output/AktivGroteskVF_WghtWdth.designspace b/Tests/designspaceLib/data/split_output/AktivGroteskVF_WghtWdth.designspace new file mode 100644 index 00000000..113c6897 --- /dev/null +++ b/Tests/designspaceLib/data/split_output/AktivGroteskVF_WghtWdth.designspace @@ -0,0 +1,253 @@ +<?xml version='1.0' encoding='UTF-8'?> +<designspace format="5.0"> + <axes> + <axis tag="wght" name="Weight" minimum="100" maximum="900" default="400"> + <map input="100" output="22"/> + <map input="200" output="38"/> + <map input="300" output="57"/> + <map input="400" output="84"/> + <map input="500" output="98"/> + <map input="600" output="115"/> + <map input="700" output="133"/> + <map input="800" output="158"/> + <map input="900" output="185"/> + </axis> + <axis tag="wdth" name="Width" minimum="75" maximum="125" default="100"/> + </axes> + <rules processing="last"> + <rule name="BRACKET.116.185"> + <conditionset> + <condition name="Weight" minimum="116" maximum="185"/> + <condition name="Width" minimum="75" maximum="97.5"/> + </conditionset> + <sub name="cent" with="cent.BRACKET.130"/> + <sub name="dollar" with="dollar.BRACKET.130"/> + </rule> + </rules> + <sources> + <source filename="../AktivGroteskCd_Hair.ufo" name="Aktiv Grotesk Cd Hair"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="75"/> + </location> + </source> + <source filename="../AktivGrotesk_Hair.ufo" name="Aktiv Grotesk Hair"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="100"/> + </location> + </source> + <source filename="../AktivGroteskEx_Hair.ufo" name="Aktiv Grotesk Ex Hair"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="125"/> + </location> + </source> + <source filename="../AktivGroteskCd_Rg.ufo" name="Aktiv Grotesk Cd"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="75"/> + </location> + </source> + <source filename="../AktivGrotesk_Rg.ufo" name="Aktiv Grotesk Regular" familyname="Aktiv Grotesk"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="100"/> + </location> + </source> + <source filename="../AktivGrotesk_Rg.ufo" name="Aktiv Grotesk Regular" layer="{126,100,0}"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="100"/> + </location> + </source> + <source filename="../AktivGroteskEx_Rg.ufo" name="Aktiv Grotesk Ex"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="125"/> + </location> + </source> + <source filename="../AktivGroteskCd_Blk.ufo" name="Aktiv Grotesk Cd Black"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="75"/> + </location> + </source> + <source filename="../AktivGrotesk_Blk.ufo" name="Aktiv Grotesk Black"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="100"/> + </location> + </source> + <source filename="../AktivGroteskEx_Blk.ufo" name="Aktiv Grotesk Ex Black"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="125"/> + </location> + </source> + </sources> + <instances> + <instance name="Aktiv Grotesk Cd Hair" familyname="Aktiv Grotesk" stylename="Cd Hair" filename="../instances/AktivGroteskCd_Hair.ufo" postscriptfontname="AktivGrotesk-CdHair" stylemapfamilyname="Aktiv Grotesk Cd Hair" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="75"/> + </location> + </instance> + <instance name="Aktiv Grotesk Hair" familyname="Aktiv Grotesk" stylename="Hair" filename="../instances/AktivGrotesk_Hair.ufo" postscriptfontname="AktivGrotesk-Hair" stylemapfamilyname="Aktiv Grotesk Hair" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="100"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Hair" familyname="Aktiv Grotesk" stylename="Ex Hair" filename="../instances/AktivGroteskEx_Hair.ufo" postscriptfontname="AktivGrotesk-ExHair" stylemapfamilyname="Aktiv Grotesk Ex Hair" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="125"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Thin" familyname="Aktiv Grotesk" stylename="Cd Thin" filename="../instances/AktivGroteskCd_Th.ufo" postscriptfontname="AktivGrotesk-CdThin" stylemapfamilyname="Aktiv Grotesk Cd Thin" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="75"/> + </location> + </instance> + <instance name="Aktiv Grotesk Thin" familyname="Aktiv Grotesk" stylename="Thin" filename="../instances/AktivGrotesk_Th.ufo" postscriptfontname="AktivGrotesk-Thin" stylemapfamilyname="Aktiv Grotesk Thin" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="100"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Thin" familyname="Aktiv Grotesk" stylename="Ex Thin" filename="../instances/AktivGroteskEx_Th.ufo" postscriptfontname="AktivGrotesk-ExThin" stylemapfamilyname="Aktiv Grotesk Ex Thin" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="125"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Light" familyname="Aktiv Grotesk" stylename="Cd Light" filename="../instances/AktivGroteskCd_Lt.ufo" postscriptfontname="AktivGrotesk-CdLight" stylemapfamilyname="Aktiv Grotesk Cd Light" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="75"/> + </location> + </instance> + <instance name="Aktiv Grotesk Light" familyname="Aktiv Grotesk" stylename="Light" filename="../instances/AktivGrotesk_Lt.ufo" postscriptfontname="AktivGrotesk-Light" stylemapfamilyname="Aktiv Grotesk Light" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="100"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Light" familyname="Aktiv Grotesk" stylename="Ex Light" filename="../instances/AktivGroteskEx_Lt.ufo" postscriptfontname="AktivGrotesk-ExLight" stylemapfamilyname="Aktiv Grotesk Ex Light" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="125"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd" familyname="Aktiv Grotesk" stylename="Cd" filename="../instances/AktivGroteskCd_Rg.ufo" postscriptfontname="AktivGrotesk-Cd" stylemapfamilyname="Aktiv Grotesk Cd" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="75"/> + </location> + </instance> + <instance name="Aktiv Grotesk " familyname="Aktiv Grotesk" stylename="" filename="../instances/AktivGrotesk_Rg.ufo" postscriptfontname="AktivGrotesk-" stylemapfamilyname="Aktiv Grotesk" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="100"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex" familyname="Aktiv Grotesk" stylename="Ex" filename="../instances/AktivGroteskEx_Rg.ufo" postscriptfontname="AktivGrotesk-Ex" stylemapfamilyname="Aktiv Grotesk Ex" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="125"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Medium" familyname="Aktiv Grotesk" stylename="Cd Medium" filename="../instances/AktivGroteskCd_Md.ufo" postscriptfontname="AktivGrotesk-CdMedium" stylemapfamilyname="Aktiv Grotesk Cd Medium" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="75"/> + </location> + </instance> + <instance name="Aktiv Grotesk Medium" familyname="Aktiv Grotesk" stylename="Medium" filename="../instances/AktivGrotesk_Md.ufo" postscriptfontname="AktivGrotesk-Medium" stylemapfamilyname="Aktiv Grotesk Medium" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="100"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Medium" familyname="Aktiv Grotesk" stylename="Ex Medium" filename="../instances/AktivGroteskEx_Md.ufo" postscriptfontname="AktivGrotesk-ExMedium" stylemapfamilyname="Aktiv Grotesk Ex Medium" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="125"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd SemiBold" familyname="Aktiv Grotesk" stylename="Cd SemiBold" filename="../../build/instances/AktivGroteskCd_SBd.ufo" postscriptfontname="AktivGrotesk-CdSemiBold" stylemapfamilyname="Aktiv Grotesk Cd SemiBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="75"/> + </location> + </instance> + <instance name="Aktiv Grotesk SemiBold" familyname="Aktiv Grotesk" stylename="SemiBold" filename="../../build/instances/AktivGrotesk_SBd.ufo" postscriptfontname="AktivGrotesk-SemiBold" stylemapfamilyname="Aktiv Grotesk SemiBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="100"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex SemiBold" familyname="Aktiv Grotesk" stylename="Ex SemiBold" filename="../../build/instances/AktivGroteskEx_SBd.ufo" postscriptfontname="AktivGrotesk-ExSemiBold" stylemapfamilyname="Aktiv Grotesk Ex SemiBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="125"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Bold" familyname="Aktiv Grotesk" stylename="Cd Bold" filename="../instances/AktivGroteskCd_Bd.ufo" postscriptfontname="AktivGrotesk-CdBold" stylemapfamilyname="Aktiv Grotesk Cd" stylemapstylename="bold"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="75"/> + </location> + </instance> + <instance name="Aktiv Grotesk Bold" familyname="Aktiv Grotesk" stylename="Bold" filename="../instances/AktivGrotesk_Bd.ufo" postscriptfontname="AktivGrotesk-Bold" stylemapfamilyname="Aktiv Grotesk" stylemapstylename="bold"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="100"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Bold" familyname="Aktiv Grotesk" stylename="Ex Bold" filename="../instances/AktivGroteskEx_Bd.ufo" postscriptfontname="AktivGrotesk-ExBold" stylemapfamilyname="Aktiv Grotesk Ex" stylemapstylename="bold"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="125"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd XBold" familyname="Aktiv Grotesk" stylename="Cd XBold" filename="../instances/AktivGroteskCd_XBd.ufo" postscriptfontname="AktivGrotesk-CdXBold" stylemapfamilyname="Aktiv Grotesk Cd XBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="75"/> + </location> + </instance> + <instance name="Aktiv Grotesk XBold" familyname="Aktiv Grotesk" stylename="XBold" filename="../instances/AktivGrotesk_XBd.ufo" postscriptfontname="AktivGrotesk-XBold" stylemapfamilyname="Aktiv Grotesk XBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="100"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex XBold" familyname="Aktiv Grotesk" stylename="Ex XBold" filename="../instances/AktivGroteskEx_XBd.ufo" postscriptfontname="AktivGrotesk-ExXBold" stylemapfamilyname="Aktiv Grotesk Ex XBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="125"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Black" familyname="Aktiv Grotesk" stylename="Cd Black" filename="../instances/AktivGroteskCd_Blk.ufo" postscriptfontname="AktivGrotesk-CdBlack" stylemapfamilyname="Aktiv Grotesk Cd Black" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="75"/> + </location> + </instance> + <instance name="Aktiv Grotesk Black" familyname="Aktiv Grotesk" stylename="Black" filename="../instances/AktivGrotesk_Blk.ufo" postscriptfontname="AktivGrotesk-Black" stylemapfamilyname="Aktiv Grotesk Black" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="100"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Black" familyname="Aktiv Grotesk" stylename="Ex Black" filename="../instances/AktivGroteskEx_Blk.ufo" postscriptfontname="AktivGrotesk-ExBlack" stylemapfamilyname="Aktiv Grotesk Ex Black" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="125"/> + </location> + </instance> + </instances> +</designspace> diff --git a/Tests/designspaceLib/data/split_output/AktivGroteskVF_WghtWdthItal.designspace b/Tests/designspaceLib/data/split_output/AktivGroteskVF_WghtWdthItal.designspace new file mode 100644 index 00000000..4a1ef48f --- /dev/null +++ b/Tests/designspaceLib/data/split_output/AktivGroteskVF_WghtWdthItal.designspace @@ -0,0 +1,562 @@ +<?xml version='1.0' encoding='UTF-8'?> +<designspace format="5.0"> + <axes> + <axis tag="wght" name="Weight" minimum="100" maximum="900" default="400"> + <map input="100" output="22"/> + <map input="200" output="38"/> + <map input="300" output="57"/> + <map input="400" output="84"/> + <map input="500" output="98"/> + <map input="600" output="115"/> + <map input="700" output="133"/> + <map input="800" output="158"/> + <map input="900" output="185"/> + </axis> + <axis tag="wdth" name="Width" minimum="75" maximum="125" default="100"/> + <axis tag="ital" name="Italic" minimum="0" maximum="1" default="0"/> + </axes> + <rules processing="last"> + <rule name="BRACKET.CYR"> + <conditionset> + <condition name="Italic" minimum="0.1" maximum="1"/> + </conditionset> + <sub name="ghe.loclSRB" with="ghe.ital.loclSRB"/> + <sub name="ghe.loclMKD" with="ghe.ital.loclMKD"/> + <sub name="de.loclMKDSRB" with="de.ital.loclMKDSRB"/> + <sub name="pe.loclMKDSRB" with="pe.ital.loclMKDSRB"/> + <sub name="te.loclMKDSRB" with="te.ital.loclMKDSRB"/> + <sub name="gje.loclMKD" with="gje.ital.loclMKD"/> + <sub name="sha.loclMKDSRB" with="sha.ital.loclMKDSRB"/> + </rule> + <rule name="BRACKET.116.185"> + <conditionset> + <condition name="Weight" minimum="116" maximum="185"/> + <condition name="Width" minimum="75" maximum="97.5"/> + </conditionset> + <sub name="cent" with="cent.BRACKET.130"/> + <sub name="dollar" with="dollar.BRACKET.130"/> + </rule> + </rules> + <sources> + <source filename="../AktivGroteskCd_Hair.ufo" name="Aktiv Grotesk Cd Hair"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="../AktivGroteskCd_HairIt.ufo" name="Aktiv Grotesk Cd Hair Italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="../AktivGrotesk_Hair.ufo" name="Aktiv Grotesk Hair"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="../AktivGrotesk_HairIt.ufo" name="Aktiv Grotesk Hair Italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="../AktivGroteskEx_Hair.ufo" name="Aktiv Grotesk Ex Hair"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="../AktivGroteskEx_HairIt.ufo" name="Aktiv Grotesk Ex Hair Italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="../AktivGroteskCd_Rg.ufo" name="Aktiv Grotesk Cd"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="../AktivGroteskCd_It.ufo" name="Aktiv Grotesk Cd Italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="../AktivGrotesk_Rg.ufo" name="Aktiv Grotesk Regular" familyname="Aktiv Grotesk"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="../AktivGrotesk_Rg.ufo" name="Aktiv Grotesk Regular" layer="{126,100,0}"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="../AktivGrotesk_It.ufo" name="Aktiv Grotesk Italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="../AktivGrotesk_It.ufo" name="Aktiv Grotesk Italic {126,100,1}" layer="{126,100,1}"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="../AktivGroteskEx_Rg.ufo" name="Aktiv Grotesk Ex"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="../AktivGroteskEx_It.ufo" name="Aktiv Grotesk Ex Italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="../AktivGroteskCd_Blk.ufo" name="Aktiv Grotesk Cd Black"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="../AktivGroteskCd_BlkIt.ufo" name="Aktiv Grotesk Cd Black Italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="../AktivGrotesk_Blk.ufo" name="Aktiv Grotesk Black"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="../AktivGrotesk_BlkIt.ufo" name="Aktiv Grotesk Black Italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="../AktivGroteskEx_Blk.ufo" name="Aktiv Grotesk Ex Black"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="../AktivGroteskEx_BlkIt.ufo" name="Aktiv Grotesk Ex Black Italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + </sources> + <instances> + <instance name="Aktiv Grotesk Cd Hair" familyname="Aktiv Grotesk" stylename="Cd Hair" filename="../instances/AktivGroteskCd_Hair.ufo" postscriptfontname="AktivGrotesk-CdHair" stylemapfamilyname="Aktiv Grotesk Cd Hair" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Hair Italic" familyname="Aktiv Grotesk" stylename="Cd Hair Italic" filename="../instances/AktivGroteskCd_HairIt.ufo" postscriptfontname="AktivGrotesk-CdHairItalic" stylemapfamilyname="Aktiv Grotesk Cd Hair" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Hair" familyname="Aktiv Grotesk" stylename="Hair" filename="../instances/AktivGrotesk_Hair.ufo" postscriptfontname="AktivGrotesk-Hair" stylemapfamilyname="Aktiv Grotesk Hair" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Hair Italic" familyname="Aktiv Grotesk" stylename="Hair Italic" filename="../instances/AktivGrotesk_HairIt.ufo" postscriptfontname="AktivGrotesk-HairItalic" stylemapfamilyname="Aktiv Grotesk Hair" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Hair" familyname="Aktiv Grotesk" stylename="Ex Hair" filename="../instances/AktivGroteskEx_Hair.ufo" postscriptfontname="AktivGrotesk-ExHair" stylemapfamilyname="Aktiv Grotesk Ex Hair" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Hair Italic" familyname="Aktiv Grotesk" stylename="Ex Hair Italic" filename="../instances/AktivGroteskEx_HairIt.ufo" postscriptfontname="AktivGrotesk-ExHairItalic" stylemapfamilyname="Aktiv Grotesk Ex Hair" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Thin" familyname="Aktiv Grotesk" stylename="Cd Thin" filename="../instances/AktivGroteskCd_Th.ufo" postscriptfontname="AktivGrotesk-CdThin" stylemapfamilyname="Aktiv Grotesk Cd Thin" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Thin Italic" familyname="Aktiv Grotesk" stylename="Cd Thin Italic" filename="../instances/AktivGroteskCd_ThIt.ufo" postscriptfontname="AktivGrotesk-CdThinItalic" stylemapfamilyname="Aktiv Grotesk Cd Thin" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Thin" familyname="Aktiv Grotesk" stylename="Thin" filename="../instances/AktivGrotesk_Th.ufo" postscriptfontname="AktivGrotesk-Thin" stylemapfamilyname="Aktiv Grotesk Thin" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Thin Italic" familyname="Aktiv Grotesk" stylename="Thin Italic" filename="../instances/AktivGrotesk_ThIt.ufo" postscriptfontname="AktivGrotesk-ThinItalic" stylemapfamilyname="Aktiv Grotesk Thin" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Thin" familyname="Aktiv Grotesk" stylename="Ex Thin" filename="../instances/AktivGroteskEx_Th.ufo" postscriptfontname="AktivGrotesk-ExThin" stylemapfamilyname="Aktiv Grotesk Ex Thin" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Thin Italic" familyname="Aktiv Grotesk" stylename="Ex Thin Italic" filename="../instances/AktivGroteskEx_ThIt.ufo" postscriptfontname="AktivGrotesk-ExThinItalic" stylemapfamilyname="Aktiv Grotesk Ex Thin" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Light" familyname="Aktiv Grotesk" stylename="Cd Light" filename="../instances/AktivGroteskCd_Lt.ufo" postscriptfontname="AktivGrotesk-CdLight" stylemapfamilyname="Aktiv Grotesk Cd Light" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Light Italic" familyname="Aktiv Grotesk" stylename="Cd Light Italic" filename="../instances/AktivGroteskCd_LtIt.ufo" postscriptfontname="AktivGrotesk-CdLightItalic" stylemapfamilyname="Aktiv Grotesk Cd Light" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Light" familyname="Aktiv Grotesk" stylename="Light" filename="../instances/AktivGrotesk_Lt.ufo" postscriptfontname="AktivGrotesk-Light" stylemapfamilyname="Aktiv Grotesk Light" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Light Italic" familyname="Aktiv Grotesk" stylename="Light Italic" filename="../instances/AktivGrotesk_LtIt.ufo" postscriptfontname="AktivGrotesk-LightItalic" stylemapfamilyname="Aktiv Grotesk Light" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Light" familyname="Aktiv Grotesk" stylename="Ex Light" filename="../instances/AktivGroteskEx_Lt.ufo" postscriptfontname="AktivGrotesk-ExLight" stylemapfamilyname="Aktiv Grotesk Ex Light" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Light Italic" familyname="Aktiv Grotesk" stylename="Ex Light Italic" filename="../instances/AktivGroteskEx_LtIt.ufo" postscriptfontname="AktivGrotesk-ExLightItalic" stylemapfamilyname="Aktiv Grotesk Ex Light" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd" familyname="Aktiv Grotesk" stylename="Cd" filename="../instances/AktivGroteskCd_Rg.ufo" postscriptfontname="AktivGrotesk-Cd" stylemapfamilyname="Aktiv Grotesk Cd" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Italic" familyname="Aktiv Grotesk" stylename="Cd Italic" filename="../instances/AktivGroteskCd_It.ufo" postscriptfontname="AktivGrotesk-CdItalic" stylemapfamilyname="Aktiv Grotesk Cd" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk " familyname="Aktiv Grotesk" stylename="" filename="../instances/AktivGrotesk_Rg.ufo" postscriptfontname="AktivGrotesk-" stylemapfamilyname="Aktiv Grotesk" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Italic" familyname="Aktiv Grotesk" stylename="Italic" filename="../instances/AktivGrotesk_It.ufo" postscriptfontname="AktivGrotesk-Italic" stylemapfamilyname="Aktiv Grotesk" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex" familyname="Aktiv Grotesk" stylename="Ex" filename="../instances/AktivGroteskEx_Rg.ufo" postscriptfontname="AktivGrotesk-Ex" stylemapfamilyname="Aktiv Grotesk Ex" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Italic" familyname="Aktiv Grotesk" stylename="Ex Italic" filename="../instances/AktivGroteskEx_It.ufo" postscriptfontname="AktivGrotesk-ExItalic" stylemapfamilyname="Aktiv Grotesk Ex" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Medium" familyname="Aktiv Grotesk" stylename="Cd Medium" filename="../instances/AktivGroteskCd_Md.ufo" postscriptfontname="AktivGrotesk-CdMedium" stylemapfamilyname="Aktiv Grotesk Cd Medium" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Medium Italic" familyname="Aktiv Grotesk" stylename="Cd Medium Italic" filename="../instances/AktivGroteskCd_MdIt.ufo" postscriptfontname="AktivGrotesk-CdMediumItalic" stylemapfamilyname="Aktiv Grotesk Cd Medium" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Medium" familyname="Aktiv Grotesk" stylename="Medium" filename="../instances/AktivGrotesk_Md.ufo" postscriptfontname="AktivGrotesk-Medium" stylemapfamilyname="Aktiv Grotesk Medium" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Medium Italic" familyname="Aktiv Grotesk" stylename="Medium Italic" filename="../instances/AktivGrotesk_MdIt.ufo" postscriptfontname="AktivGrotesk-MediumItalic" stylemapfamilyname="Aktiv Grotesk Medium" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Medium" familyname="Aktiv Grotesk" stylename="Ex Medium" filename="../instances/AktivGroteskEx_Md.ufo" postscriptfontname="AktivGrotesk-ExMedium" stylemapfamilyname="Aktiv Grotesk Ex Medium" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Medium Italic" familyname="Aktiv Grotesk" stylename="Ex Medium Italic" filename="../instances/AktivGroteskEx_MdIt.ufo" postscriptfontname="AktivGrotesk-ExMediumItalic" stylemapfamilyname="Aktiv Grotesk Ex Medium" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd SemiBold" familyname="Aktiv Grotesk" stylename="Cd SemiBold" filename="../../build/instances/AktivGroteskCd_SBd.ufo" postscriptfontname="AktivGrotesk-CdSemiBold" stylemapfamilyname="Aktiv Grotesk Cd SemiBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd SemiBold Italic" familyname="Aktiv Grotesk" stylename="Cd SemiBold Italic" filename="../../build/instances/AktivGroteskCd_SBdIt.ufo" postscriptfontname="AktivGrotesk-CdSemiBoldItalic" stylemapfamilyname="Aktiv Grotesk Cd SemiBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk SemiBold" familyname="Aktiv Grotesk" stylename="SemiBold" filename="../../build/instances/AktivGrotesk_SBd.ufo" postscriptfontname="AktivGrotesk-SemiBold" stylemapfamilyname="Aktiv Grotesk SemiBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk SemiBold Italic" familyname="Aktiv Grotesk" stylename="SemiBold Italic" filename="../../build/instances/AktivGrotesk_SBdIt.ufo" postscriptfontname="AktivGrotesk-SemiBoldItalic" stylemapfamilyname="Aktiv Grotesk SemiBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex SemiBold" familyname="Aktiv Grotesk" stylename="Ex SemiBold" filename="../../build/instances/AktivGroteskEx_SBd.ufo" postscriptfontname="AktivGrotesk-ExSemiBold" stylemapfamilyname="Aktiv Grotesk Ex SemiBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex SemiBold Italic" familyname="Aktiv Grotesk" stylename="Ex SemiBold Italic" filename="../../build/instances/AktivGroteskEx_SBdIt.ufo" postscriptfontname="AktivGrotesk-ExSemiBoldItalic" stylemapfamilyname="Aktiv Grotesk Ex SemiBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Bold" familyname="Aktiv Grotesk" stylename="Cd Bold" filename="../instances/AktivGroteskCd_Bd.ufo" postscriptfontname="AktivGrotesk-CdBold" stylemapfamilyname="Aktiv Grotesk Cd" stylemapstylename="bold"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Bold Italic" familyname="Aktiv Grotesk" stylename="Cd Bold Italic" filename="../instances/AktivGroteskCd_BdIt.ufo" postscriptfontname="AktivGrotesk-CdBoldItalic" stylemapfamilyname="Aktiv Grotesk Cd" stylemapstylename="bold italic"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Bold" familyname="Aktiv Grotesk" stylename="Bold" filename="../instances/AktivGrotesk_Bd.ufo" postscriptfontname="AktivGrotesk-Bold" stylemapfamilyname="Aktiv Grotesk" stylemapstylename="bold"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Bold Italic" familyname="Aktiv Grotesk" stylename="Bold Italic" filename="../instances/AktivGrotesk_BdIt.ufo" postscriptfontname="AktivGrotesk-BoldItalic" stylemapfamilyname="Aktiv Grotesk" stylemapstylename="bold italic"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Bold" familyname="Aktiv Grotesk" stylename="Ex Bold" filename="../instances/AktivGroteskEx_Bd.ufo" postscriptfontname="AktivGrotesk-ExBold" stylemapfamilyname="Aktiv Grotesk Ex" stylemapstylename="bold"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Bold Italic" familyname="Aktiv Grotesk" stylename="Ex Bold Italic" filename="../instances/AktivGroteskEx_BdIt.ufo" postscriptfontname="AktivGrotesk-ExBoldItalic" stylemapfamilyname="Aktiv Grotesk Ex" stylemapstylename="bold italic"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd XBold" familyname="Aktiv Grotesk" stylename="Cd XBold" filename="../instances/AktivGroteskCd_XBd.ufo" postscriptfontname="AktivGrotesk-CdXBold" stylemapfamilyname="Aktiv Grotesk Cd XBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd XBold Italic" familyname="Aktiv Grotesk" stylename="Cd XBold Italic" filename="../instances/AktivGroteskCd_XBdIt.ufo" postscriptfontname="AktivGrotesk-CdXBoldItalic" stylemapfamilyname="Aktiv Grotesk Cd XBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk XBold" familyname="Aktiv Grotesk" stylename="XBold" filename="../instances/AktivGrotesk_XBd.ufo" postscriptfontname="AktivGrotesk-XBold" stylemapfamilyname="Aktiv Grotesk XBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk XBold Italic" familyname="Aktiv Grotesk" stylename="XBold Italic" filename="../instances/AktivGrotesk_XBdIt.ufo" postscriptfontname="AktivGrotesk-XBoldItalic" stylemapfamilyname="Aktiv Grotesk XBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex XBold" familyname="Aktiv Grotesk" stylename="Ex XBold" filename="../instances/AktivGroteskEx_XBd.ufo" postscriptfontname="AktivGrotesk-ExXBold" stylemapfamilyname="Aktiv Grotesk Ex XBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex XBold Italic" familyname="Aktiv Grotesk" stylename="Ex XBold Italic" filename="../instances/AktivGroteskEx_XBdIt.ufo" postscriptfontname="AktivGrotesk-ExXBoldItalic" stylemapfamilyname="Aktiv Grotesk Ex XBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Black" familyname="Aktiv Grotesk" stylename="Cd Black" filename="../instances/AktivGroteskCd_Blk.ufo" postscriptfontname="AktivGrotesk-CdBlack" stylemapfamilyname="Aktiv Grotesk Cd Black" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Black Italic" familyname="Aktiv Grotesk" stylename="Cd Black Italic" filename="../instances/AktivGroteskCd_BlkIt.ufo" postscriptfontname="AktivGrotesk-CdBlackItalic" stylemapfamilyname="Aktiv Grotesk Cd Black" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Black" familyname="Aktiv Grotesk" stylename="Black" filename="../instances/AktivGrotesk_Blk.ufo" postscriptfontname="AktivGrotesk-Black" stylemapfamilyname="Aktiv Grotesk Black" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Black Italic" familyname="Aktiv Grotesk" stylename="Black Italic" filename="../instances/AktivGrotesk_BlkIt.ufo" postscriptfontname="AktivGrotesk-BlackItalic" stylemapfamilyname="Aktiv Grotesk Black" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Black" familyname="Aktiv Grotesk" stylename="Ex Black" filename="../instances/AktivGroteskEx_Blk.ufo" postscriptfontname="AktivGrotesk-ExBlack" stylemapfamilyname="Aktiv Grotesk Ex Black" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Black Italic" familyname="Aktiv Grotesk" stylename="Ex Black Italic" filename="../instances/AktivGroteskEx_BlkIt.ufo" postscriptfontname="AktivGrotesk-ExBlackItalic" stylemapfamilyname="Aktiv Grotesk Ex Black" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + </instances> +</designspace> diff --git a/Tests/designspaceLib/data/split_output/MutatorSansVariable_Weight.designspace b/Tests/designspaceLib/data/split_output/MutatorSansVariable_Weight.designspace new file mode 100644 index 00000000..6dcc6002 --- /dev/null +++ b/Tests/designspaceLib/data/split_output/MutatorSansVariable_Weight.designspace @@ -0,0 +1,55 @@ +<?xml version='1.0' encoding='UTF-8'?> +<designspace format="5.0"> + <axes> + <axis tag="wght" name="weight" minimum="300" maximum="700" default="300"> + <map input="300" output="0"/> + <map input="500" output="500"/> + <map input="700" output="1000"/> + </axis> + </axes> + <rules> + <rule name="fold_I_serifs"> + <sub name="I" with="I.narrow"/> + </rule> + <rule name="fold_S_terminals"> + <conditionset> + <condition name="weight" minimum="0" maximum="500"/> + </conditionset> + <sub name="S" with="S.closed"/> + </rule> + </rules> + <sources> + <source filename="../MutatorSansLightCondensed.ufo" name="master.MutatorMathTest.LightCondensed.0" familyname="MutatorMathTest" stylename="LightCondensed"> + <location> + <dimension name="weight" xvalue="0"/> + </location> + </source> + <source filename="../MutatorSansBoldCondensed.ufo" name="master.MutatorMathTest.BoldCondensed.1" familyname="MutatorMathTest" stylename="BoldCondensed"> + <location> + <dimension name="weight" xvalue="1000"/> + </location> + </source> + <source filename="../MutatorSansLightCondensed.ufo" name="support.crossbar" layer="support.crossbar"> + <location> + <dimension name="weight" xvalue="700"/> + </location> + </source> + </sources> + <instances> + <instance name="MutatorMathTest Sans Light Condensed" familyname="MutatorMathTest" stylename="Sans Light Condensed" filename="MutatorMathTest-Sans Light Condensed.ttf" postscriptfontname="MutatorMathTest-SansLightCondensed" stylemapfamilyname="MutatorMathTest Sans Light Condensed" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + </location> + </instance> + <instance name="MutatorMathTest Sans Bold Condensed" familyname="MutatorMathTest" stylename="Sans Bold Condensed" filename="MutatorMathTest-Sans Bold Condensed.ttf" postscriptfontname="MutatorMathTest-SansBoldCondensed" stylemapfamilyname="MutatorMathTest Sans Bold Condensed" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + </location> + </instance> + <instance name="MutatorMathTest Sans Light Condensed" familyname="MutatorMathTest" stylename="Sans Light Condensed" filename="MutatorMathTest-Sans Light Condensed.ttf" postscriptfontname="MutatorMathTest-SansLightCondensed" stylemapfamilyname="MutatorMathTest Sans Light Condensed" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + </location> + </instance> + </instances> +</designspace> diff --git a/Tests/designspaceLib/data/split_output/MutatorSansVariable_Weight_Width.designspace b/Tests/designspaceLib/data/split_output/MutatorSansVariable_Weight_Width.designspace new file mode 100644 index 00000000..e83be97f --- /dev/null +++ b/Tests/designspaceLib/data/split_output/MutatorSansVariable_Weight_Width.designspace @@ -0,0 +1,129 @@ +<?xml version='1.0' encoding='UTF-8'?> +<designspace format="5.0"> + <axes> + <axis tag="wght" name="weight" minimum="300" maximum="700" default="300"> + <map input="300" output="0"/> + <map input="500" output="500"/> + <map input="700" output="1000"/> + </axis> + <axis tag="wdth" name="width" minimum="50" maximum="200" default="50"> + <map input="50" output="0"/> + <map input="100" output="500"/> + <map input="200" output="1000"/> + </axis> + </axes> + <rules> + <rule name="fold_I_serifs"> + <conditionset> + <condition name="width" minimum="0" maximum="328"/> + </conditionset> + <sub name="I" with="I.narrow"/> + </rule> + <rule name="fold_S_terminals"> + <conditionset> + <condition name="weight" minimum="0" maximum="500"/> + </conditionset> + <sub name="S" with="S.closed"/> + </rule> + </rules> + <sources> + <source filename="../MutatorSansLightCondensed.ufo" name="master.MutatorMathTest.LightCondensed.0" familyname="MutatorMathTest" stylename="LightCondensed"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="width" xvalue="0"/> + </location> + </source> + <source filename="../MutatorSansBoldCondensed.ufo" name="master.MutatorMathTest.BoldCondensed.1" familyname="MutatorMathTest" stylename="BoldCondensed"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="width" xvalue="0"/> + </location> + </source> + <source filename="../MutatorSansLightWide.ufo" name="master.MutatorMathTest.LightWide.2" familyname="MutatorMathTest" stylename="LightWide"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="width" xvalue="1000"/> + </location> + </source> + <source filename="../MutatorSansBoldWide.ufo" name="master.MutatorMathTest.BoldWide.3" familyname="MutatorMathTest" stylename="BoldWide"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="width" xvalue="1000"/> + </location> + </source> + <source filename="../MutatorSansLightCondensed.ufo" name="support.crossbar" layer="support.crossbar"> + <location> + <dimension name="weight" xvalue="700"/> + <dimension name="width" xvalue="0"/> + </location> + </source> + <source filename="../MutatorSansLightCondensed.ufo" name="support.S.wide" layer="support.S.wide"> + <location> + <dimension name="weight" xvalue="700"/> + <dimension name="width" xvalue="1000"/> + </location> + </source> + <source filename="../MutatorSansLightCondensed.ufo" name="support.S.middle" layer="support.S.middle"> + <location> + <dimension name="weight" xvalue="700"/> + <dimension name="width" xvalue="569.078"/> + </location> + </source> + </sources> + <instances> + <instance name="MutatorMathTest Sans Light Condensed" familyname="MutatorMathTest" stylename="Sans Light Condensed" filename="MutatorMathTest-Sans Light Condensed.ttf" postscriptfontname="MutatorMathTest-SansLightCondensed" stylemapfamilyname="MutatorMathTest Sans Light Condensed" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="width" xvalue="0"/> + </location> + </instance> + <instance name="MutatorMathTest Sans Bold Condensed" familyname="MutatorMathTest" stylename="Sans Bold Condensed" filename="MutatorMathTest-Sans Bold Condensed.ttf" postscriptfontname="MutatorMathTest-SansBoldCondensed" stylemapfamilyname="MutatorMathTest Sans Bold Condensed" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="width" xvalue="0"/> + </location> + </instance> + <instance name="MutatorMathTest Sans Light Extended" familyname="MutatorMathTest" stylename="Sans Light Extended" filename="MutatorMathTest-Sans Light Extended.ttf" postscriptfontname="MutatorMathTest-SansLightExtended" stylemapfamilyname="MutatorMathTest Sans Light Extended" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="width" xvalue="1000"/> + </location> + </instance> + <instance name="MutatorMathTest Sans Bold Extended" familyname="MutatorMathTest" stylename="Sans Bold Extended" filename="MutatorMathTest-Sans Bold Extended.ttf" postscriptfontname="MutatorMathTest-SansBoldExtended" stylemapfamilyname="MutatorMathTest Sans Bold Extended" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="width" xvalue="1000"/> + </location> + </instance> + <instance name="MutatorMathTest Sans Medium" familyname="MutatorMathTest" stylename="Sans Medium" filename="MutatorMathTest-Sans Medium.ttf" postscriptfontname="MutatorMathTest-SansMedium" stylemapfamilyname="MutatorMathTest Sans Medium" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="500"/> + <dimension name="width" xvalue="327"/> + </location> + </instance> + <instance name="MutatorMathTest Sans Medium" familyname="MutatorMathTest" stylename="Sans Medium" filename="MutatorMathTest-Sans Medium.ttf" postscriptfontname="MutatorMathTest-SansMedium" stylemapfamilyname="MutatorMathTest Sans Medium" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="500"/> + <dimension name="width" xvalue="327"/> + </location> + </instance> + <instance name="MutatorMathTest Sans Bold" familyname="MutatorMathTest" stylename="Sans Bold" filename="MutatorMathTest-Sans Bold.ttf" postscriptfontname="MutatorMathTest-SansBold" stylemapfamilyname="MutatorMathTest Sans Bold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="width" xvalue="569.078"/> + </location> + </instance> + <instance name="MutatorMathTest Sans Medium Extended" familyname="MutatorMathTest" stylename="Sans Medium Extended" filename="MutatorMathTest-Sans Medium Extended.ttf" postscriptfontname="MutatorMathTest-SansMediumExtended" stylemapfamilyname="MutatorMathTest Sans Medium Extended" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="500"/> + <dimension name="width" xvalue="1000"/> + </location> + </instance> + <instance name="MutatorMathTest Sans Light Condensed" familyname="MutatorMathTest" stylename="Sans Light Condensed" filename="MutatorMathTest-Sans Light Condensed.ttf" postscriptfontname="MutatorMathTest-SansLightCondensed" stylemapfamilyname="MutatorMathTest Sans Light Condensed" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="width" xvalue="0"/> + </location> + </instance> + </instances> +</designspace> diff --git a/Tests/designspaceLib/data/split_output/MutatorSansVariable_Width.designspace b/Tests/designspaceLib/data/split_output/MutatorSansVariable_Width.designspace new file mode 100644 index 00000000..9384c73c --- /dev/null +++ b/Tests/designspaceLib/data/split_output/MutatorSansVariable_Width.designspace @@ -0,0 +1,50 @@ +<?xml version='1.0' encoding='UTF-8'?> +<designspace format="5.0"> + <axes> + <axis tag="wdth" name="width" minimum="50" maximum="200" default="50"> + <map input="50" output="0"/> + <map input="100" output="500"/> + <map input="200" output="1000"/> + </axis> + </axes> + <rules> + <rule name="fold_I_serifs"> + <conditionset> + <condition name="width" minimum="0" maximum="328"/> + </conditionset> + <sub name="I" with="I.narrow"/> + </rule> + <rule name="fold_S_terminals"> + <sub name="S" with="S.closed"/> + </rule> + </rules> + <sources> + <source filename="../MutatorSansLightCondensed.ufo" name="master.MutatorMathTest.LightCondensed.0" familyname="MutatorMathTest" stylename="LightCondensed"> + <location> + <dimension name="width" xvalue="0"/> + </location> + </source> + <source filename="../MutatorSansLightWide.ufo" name="master.MutatorMathTest.LightWide.2" familyname="MutatorMathTest" stylename="LightWide"> + <location> + <dimension name="width" xvalue="1000"/> + </location> + </source> + </sources> + <instances> + <instance name="MutatorMathTest Sans Light Condensed" familyname="MutatorMathTest" stylename="Sans Light Condensed" filename="MutatorMathTest-Sans Light Condensed.ttf" postscriptfontname="MutatorMathTest-SansLightCondensed" stylemapfamilyname="MutatorMathTest Sans Light Condensed" stylemapstylename="regular"> + <location> + <dimension name="width" xvalue="0"/> + </location> + </instance> + <instance name="MutatorMathTest Sans Light Extended" familyname="MutatorMathTest" stylename="Sans Light Extended" filename="MutatorMathTest-Sans Light Extended.ttf" postscriptfontname="MutatorMathTest-SansLightExtended" stylemapfamilyname="MutatorMathTest Sans Light Extended" stylemapstylename="regular"> + <location> + <dimension name="width" xvalue="1000"/> + </location> + </instance> + <instance name="MutatorMathTest Sans Light Condensed" familyname="MutatorMathTest" stylename="Sans Light Condensed" filename="MutatorMathTest-Sans Light Condensed.ttf" postscriptfontname="MutatorMathTest-SansLightCondensed" stylemapfamilyname="MutatorMathTest Sans Light Condensed" stylemapstylename="regular"> + <location> + <dimension name="width" xvalue="0"/> + </location> + </instance> + </instances> +</designspace> diff --git a/Tests/designspaceLib/data/split_output/MutatorSerifVariable_Width.designspace b/Tests/designspaceLib/data/split_output/MutatorSerifVariable_Width.designspace new file mode 100644 index 00000000..b71025a2 --- /dev/null +++ b/Tests/designspaceLib/data/split_output/MutatorSerifVariable_Width.designspace @@ -0,0 +1,29 @@ +<?xml version='1.0' encoding='UTF-8'?> +<designspace format="5.0"> + <axes> + <axis tag="wdth" name="width" minimum="50" maximum="200" default="50"> + <map input="50" output="0"/> + <map input="100" output="500"/> + <map input="200" output="1000"/> + </axis> + </axes> + <sources> + <source filename="../MutatorSerifLightCondensed.ufo" familyname="MutatorMathTest" stylename="SerifLightCondensed"> + <location> + <dimension name="width" xvalue="0"/> + </location> + </source> + <source filename="../MutatorSerifLightWide.ufo" familyname="MutatorMathTest" stylename="SerifLightWide"> + <location> + <dimension name="width" xvalue="1000"/> + </location> + </source> + </sources> + <instances> + <instance name="MutatorMathTest Serif Light Condensed" familyname="MutatorMathTest" stylename="Serif Light Condensed" filename="MutatorMathTest-Serif Light Condensed.ttf" postscriptfontname="MutatorMathTest-SerifLightCondensed" stylemapfamilyname="MutatorMathTest Serif Light Condensed" stylemapstylename="regular"> + <location> + <dimension name="width" xvalue="0"/> + </location> + </instance> + </instances> +</designspace> diff --git a/Tests/designspaceLib/data/split_output/SourceSerif4Variable-Italic.designspace b/Tests/designspaceLib/data/split_output/SourceSerif4Variable-Italic.designspace new file mode 100644 index 00000000..c1eb95d9 --- /dev/null +++ b/Tests/designspaceLib/data/split_output/SourceSerif4Variable-Italic.designspace @@ -0,0 +1,266 @@ +<?xml version='1.0' encoding='UTF-8'?> +<designspace format="5.0"> + <axes> + <axis tag="wght" name="weight" minimum="200" maximum="900" default="400"> + <map input="200" output="0"/> + <map input="300" output="145"/> + <map input="400" output="394"/> + <map input="600" output="594"/> + <map input="700" output="823"/> + <map input="900" output="1000"/> + </axis> + <axis tag="opsz" name="optical" minimum="8" maximum="60" default="20"/> + </axes> + <sources> + <source filename="../caption/master_0/SourceSerif-Italic_c0.ufo"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="8"/> + </location> + </source> + <source filename="../caption/master_1/SourceSerif-Italic_c1.ufo"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="8"/> + </location> + </source> + <source filename="../caption/master_2/SourceSerif-Italic_c2.ufo"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="8"/> + </location> + </source> + <source filename="../text/master_0/SourceSerif-Italic_0.ufo"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="20"/> + </location> + </source> + <source filename="../text/master_1/SourceSerif-Italic_1.ufo"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="20"/> + </location> + </source> + <source filename="../text/master_2/SourceSerif-Italic_2.ufo"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="20"/> + </location> + </source> + <source filename="../display/master_0/SourceSerif-Italic_d0.ufo"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="60"/> + </location> + </source> + <source filename="../display/master_1/SourceSerif-Italic_d1.ufo"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="60"/> + </location> + </source> + <source filename="../display/master_2/SourceSerif-Italic_d2.ufo"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="60"/> + </location> + </source> + </sources> + <instances> + <instance name="Source Serif 4 Caption ExtraLight Italic" familyname="Source Serif 4" stylename="Caption ExtraLight Italic" filename="Source Serif 4-Caption ExtraLight Italic.ttf" postscriptfontname="SourceSerif4Italic-CaptionExtraLight" stylemapfamilyname="Source Serif 4 Caption ExtraLight Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="8"/> + </location> + </instance> + <instance name="Source Serif 4 Caption Light Italic" familyname="Source Serif 4" stylename="Caption Light Italic" filename="Source Serif 4-Caption Light Italic.ttf" postscriptfontname="SourceSerif4Italic-CaptionLight" stylemapfamilyname="Source Serif 4 Caption Light Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="8"/> + </location> + </instance> + <instance name="Source Serif 4 Caption Italic" familyname="Source Serif 4" stylename="Caption Italic" filename="Source Serif 4-Caption Italic.ttf" postscriptfontname="SourceSerif4Italic-CaptionRegular" stylemapfamilyname="Source Serif 4 Caption Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="8"/> + </location> + </instance> + <instance name="Source Serif 4 Caption Semibold Italic" familyname="Source Serif 4" stylename="Caption Semibold Italic" filename="Source Serif 4-Caption Semibold Italic.ttf" postscriptfontname="SourceSerif4Italic-CaptionSemibold" stylemapfamilyname="Source Serif 4 Caption Semibold Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="8"/> + </location> + </instance> + <instance name="Source Serif 4 Caption Bold Italic" familyname="Source Serif 4" stylename="Caption Bold Italic" filename="Source Serif 4-Caption Bold Italic.ttf" postscriptfontname="SourceSerif4Italic-CaptionBold" stylemapfamilyname="Source Serif 4 Caption Bold Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="8"/> + </location> + </instance> + <instance name="Source Serif 4 Caption Black Italic" familyname="Source Serif 4" stylename="Caption Black Italic" filename="Source Serif 4-Caption Black Italic.ttf" postscriptfontname="SourceSerif4Italic-CaptionBlack" stylemapfamilyname="Source Serif 4 Caption Black Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="8"/> + </location> + </instance> + <instance name="Source Serif 4 SmText ExtraLight Italic" familyname="Source Serif 4" stylename="SmText ExtraLight Italic" filename="Source Serif 4-SmText ExtraLight Italic.ttf" postscriptfontname="SourceSerif4Italic-SmTextExtraLight" stylemapfamilyname="Source Serif 4 SmallText ExtraLight Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="16"/> + </location> + </instance> + <instance name="Source Serif 4 SmText Light Italic" familyname="Source Serif 4" stylename="SmText Light Italic" filename="Source Serif 4-SmText Light Italic.ttf" postscriptfontname="SourceSerif4Italic-SmTextLight" stylemapfamilyname="Source Serif 4 SmallText Light Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="16"/> + </location> + </instance> + <instance name="Source Serif 4 SmText Italic" familyname="Source Serif 4" stylename="SmText Italic" filename="Source Serif 4-SmText Italic.ttf" postscriptfontname="SourceSerif4Italic-SmTextRegular" stylemapfamilyname="Source Serif 4 SmallText Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="16"/> + </location> + </instance> + <instance name="Source Serif 4 SmText Semibold Italic" familyname="Source Serif 4" stylename="SmText Semibold Italic" filename="Source Serif 4-SmText Semibold Italic.ttf" postscriptfontname="SourceSerif4Italic-SmTextSemibold" stylemapfamilyname="Source Serif 4 SmallText Semibold Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="16"/> + </location> + </instance> + <instance name="Source Serif 4 SmText Bold Italic" familyname="Source Serif 4" stylename="SmText Bold Italic" filename="Source Serif 4-SmText Bold Italic.ttf" postscriptfontname="SourceSerif4Italic-SmTextBold" stylemapfamilyname="Source Serif 4 SmallText Bold Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="16"/> + </location> + </instance> + <instance name="Source Serif 4 SmText Black Italic" familyname="Source Serif 4" stylename="SmText Black Italic" filename="Source Serif 4-SmText Black Italic.ttf" postscriptfontname="SourceSerif4Italic-SmTextBlack" stylemapfamilyname="Source Serif 4 SmallText Black Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="16"/> + </location> + </instance> + <instance name="Source Serif 4 ExtraLight Italic" familyname="Source Serif 4" stylename="ExtraLight Italic" filename="Source Serif 4-ExtraLight Italic.ttf" postscriptfontname="SourceSerif4Italic-ExtraLight" stylemapfamilyname="Source Serif 4 ExtraLight Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="20"/> + </location> + </instance> + <instance name="Source Serif 4 Light Italic" familyname="Source Serif 4" stylename="Light Italic" filename="Source Serif 4-Light Italic.ttf" postscriptfontname="SourceSerif4Italic-Light" stylemapfamilyname="Source Serif 4 Light Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="20"/> + </location> + </instance> + <instance name="Source Serif 4 Italic" familyname="Source Serif 4" stylename="Italic" filename="Source Serif 4-Italic.ttf" postscriptfontname="SourceSerif4Italic-Regular" stylemapfamilyname="Source Serif 4 Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="20"/> + </location> + </instance> + <instance name="Source Serif 4 Semibold Italic" familyname="Source Serif 4" stylename="Semibold Italic" filename="Source Serif 4-Semibold Italic.ttf" postscriptfontname="SourceSerif4Italic-Semibold" stylemapfamilyname="Source Serif 4 Semibold Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="20"/> + </location> + </instance> + <instance name="Source Serif 4 Bold Italic" familyname="Source Serif 4" stylename="Bold Italic" filename="Source Serif 4-Bold Italic.ttf" postscriptfontname="SourceSerif4Italic-Bold" stylemapfamilyname="Source Serif 4 Bold Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="20"/> + </location> + </instance> + <instance name="Source Serif 4 Black Italic" familyname="Source Serif 4" stylename="Black Italic" filename="Source Serif 4-Black Italic.ttf" postscriptfontname="SourceSerif4Italic-Black" stylemapfamilyname="Source Serif 4 Black Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="20"/> + </location> + </instance> + <instance name="Source Serif 4 Subhead ExtraLight Italic" familyname="Source Serif 4" stylename="Subhead ExtraLight Italic" filename="Source Serif 4-Subhead ExtraLight Italic.ttf" postscriptfontname="SourceSerif4Italic-SubheadExtraLight" stylemapfamilyname="Source Serif 4 Subhead ExtraLight Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="32"/> + </location> + </instance> + <instance name="Source Serif 4 Subhead Light Italic" familyname="Source Serif 4" stylename="Subhead Light Italic" filename="Source Serif 4-Subhead Light Italic.ttf" postscriptfontname="SourceSerif4Italic-SubheadLight" stylemapfamilyname="Source Serif 4 Subhead Light Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="32"/> + </location> + </instance> + <instance name="Source Serif 4 Subhead Italic" familyname="Source Serif 4" stylename="Subhead Italic" filename="Source Serif 4-Subhead Italic.ttf" postscriptfontname="SourceSerif4Italic-SubheadRegular" stylemapfamilyname="Source Serif 4 Subhead Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="32"/> + </location> + </instance> + <instance name="Source Serif 4 Subhead Semibold Italic" familyname="Source Serif 4" stylename="Subhead Semibold Italic" filename="Source Serif 4-Subhead Semibold Italic.ttf" postscriptfontname="SourceSerif4Italic-SubheadSemibold" stylemapfamilyname="Source Serif 4 Subhead Semibold Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="32"/> + </location> + </instance> + <instance name="Source Serif 4 Subhead Bold Italic" familyname="Source Serif 4" stylename="Subhead Bold Italic" filename="Source Serif 4-Subhead Bold Italic.ttf" postscriptfontname="SourceSerif4Italic-SubheadBold" stylemapfamilyname="Source Serif 4 Subhead Bold Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="32"/> + </location> + </instance> + <instance name="Source Serif 4 Subhead Black Italic" familyname="Source Serif 4" stylename="Subhead Black Italic" filename="Source Serif 4-Subhead Black Italic.ttf" postscriptfontname="SourceSerif4Italic-SubheadBlack" stylemapfamilyname="Source Serif 4 Subhead Black Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="32"/> + </location> + </instance> + <instance name="Source Serif 4 Display ExtraLight Italic" familyname="Source Serif 4" stylename="Display ExtraLight Italic" filename="Source Serif 4-Display ExtraLight Italic.ttf" postscriptfontname="SourceSerif4Italic-DisplayExtraLight" stylemapfamilyname="Source Serif 4 Display ExtraLight Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="60"/> + </location> + </instance> + <instance name="Source Serif 4 Display Light Italic" familyname="Source Serif 4" stylename="Display Light Italic" filename="Source Serif 4-Display Light Italic.ttf" postscriptfontname="SourceSerif4Italic-DisplayLight" stylemapfamilyname="Source Serif 4 Display Light Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="60"/> + </location> + </instance> + <instance name="Source Serif 4 Display Italic" familyname="Source Serif 4" stylename="Display Italic" filename="Source Serif 4-Display Italic.ttf" postscriptfontname="SourceSerif4Italic-DisplayRegular" stylemapfamilyname="Source Serif 4 Display Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="60"/> + </location> + </instance> + <instance name="Source Serif 4 Display Semibold Italic" familyname="Source Serif 4" stylename="Display Semibold Italic" filename="Source Serif 4-Display Semibold Italic.ttf" postscriptfontname="SourceSerif4Italic-DisplaySemibold" stylemapfamilyname="Source Serif 4 Display Semibold Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="60"/> + </location> + </instance> + <instance name="Source Serif 4 Display Bold Italic" familyname="Source Serif 4" stylename="Display Bold Italic" filename="Source Serif 4-Display Bold Italic.ttf" postscriptfontname="SourceSerif4Italic-DisplayBold" stylemapfamilyname="Source Serif 4 Display Bold Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="60"/> + </location> + </instance> + <instance name="Source Serif 4 Display Black Italic" familyname="Source Serif 4" stylename="Display Black Italic" filename="Source Serif 4-Display Black Italic.ttf" postscriptfontname="SourceSerif4Italic-DisplayBlack" stylemapfamilyname="Source Serif 4 Display Black Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="60"/> + </location> + </instance> + </instances> + <lib> + <dict> + <key>public.skipExportGlyphs</key> + <array> + <string>caron.alt</string> + <string>commabelowcmb.alt</string> + <string>f.liga</string> + <string>f.ligalong</string> + <string>tonos.cap</string> + <string>dieresiscmb.tight</string> + <string>turkicdsccmb</string> + </array> + </dict> + </lib> +</designspace> diff --git a/Tests/designspaceLib/data/split_output/SourceSerif4Variable-Roman.designspace b/Tests/designspaceLib/data/split_output/SourceSerif4Variable-Roman.designspace new file mode 100644 index 00000000..1eee53e0 --- /dev/null +++ b/Tests/designspaceLib/data/split_output/SourceSerif4Variable-Roman.designspace @@ -0,0 +1,274 @@ +<?xml version='1.0' encoding='UTF-8'?> +<designspace format="5.0"> + <axes> + <axis tag="wght" name="weight" minimum="200" maximum="900" default="400"> + <map input="200" output="0"/> + <map input="300" output="145"/> + <map input="400" output="394"/> + <map input="600" output="594"/> + <map input="700" output="823"/> + <map input="900" output="1000"/> + </axis> + <axis tag="opsz" name="optical" minimum="8" maximum="60" default="20"/> + </axes> + <sources> + <source filename="../caption/master_0/SourceSerif_c0.ufo"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="8"/> + </location> + </source> + <source filename="../caption/master_1/SourceSerif_c1.ufo"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="8"/> + </location> + </source> + <source filename="../caption/master_2/SourceSerif_c2.ufo"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="8"/> + </location> + </source> + <source filename="../text/master_0/SourceSerif_0.ufo"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="20"/> + </location> + </source> + <source filename="../text/master_1/SourceSerif_1.ufo" familyname="Source Serif 4"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="20"/> + </location> + </source> + <source filename="../text/master_2/SourceSerif_2.ufo"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="20"/> + </location> + </source> + <source filename="../display/master_0/SourceSerif_d0.ufo"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="60"/> + </location> + </source> + <source filename="../display/master_1/SourceSerif_d1.ufo"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="60"/> + </location> + </source> + <source filename="../display/master_2/SourceSerif_d2.ufo"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="60"/> + </location> + </source> + </sources> + <instances> + <instance name="Source Serif 4 Caption ExtraLight" familyname="Source Serif 4" stylename="Caption ExtraLight" filename="Source Serif 4-Caption ExtraLight.ttf" postscriptfontname="SourceSerif4Roman-CaptionExtraLight" stylemapfamilyname="Source Serif 4 Caption ExtraLight" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="8"/> + </location> + </instance> + <instance name="Source Serif 4 Caption Light" familyname="Source Serif 4" stylename="Caption Light" filename="Source Serif 4-Caption Light.ttf" postscriptfontname="SourceSerif4Roman-CaptionLight" stylemapfamilyname="Source Serif 4 Caption Light" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="8"/> + </location> + </instance> + <instance name="Source Serif 4 Caption" familyname="Source Serif 4" stylename="Caption" filename="Source Serif 4-Caption.ttf" postscriptfontname="SourceSerif4Roman-CaptionRegular" stylemapfamilyname="Source Serif 4 Caption" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="8"/> + </location> + </instance> + <instance name="Source Serif 4 Caption Semibold" familyname="Source Serif 4" stylename="Caption Semibold" filename="Source Serif 4-Caption Semibold.ttf" postscriptfontname="SourceSerif4Roman-CaptionSemibold" stylemapfamilyname="Source Serif 4 Caption Semibold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="8"/> + </location> + </instance> + <instance name="Source Serif 4 Caption Bold" familyname="Source Serif 4" stylename="Caption Bold" filename="Source Serif 4-Caption Bold.ttf" postscriptfontname="SourceSerif4Roman-CaptionBold" stylemapfamilyname="Source Serif 4 Caption Bold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="8"/> + </location> + </instance> + <instance name="Source Serif 4 Caption Black" familyname="Source Serif 4" stylename="Caption Black" filename="Source Serif 4-Caption Black.ttf" postscriptfontname="SourceSerif4Roman-CaptionBlack" stylemapfamilyname="Source Serif 4 Caption Black" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="8"/> + </location> + </instance> + <instance name="Source Serif 4 SmText ExtraLight" familyname="Source Serif 4" stylename="SmText ExtraLight" filename="Source Serif 4-SmText ExtraLight.ttf" postscriptfontname="SourceSerif4Roman-SmTextExtraLight" stylemapfamilyname="Source Serif 4 SmallText ExtraLight" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="16"/> + </location> + </instance> + <instance name="Source Serif 4 SmText Light" familyname="Source Serif 4" stylename="SmText Light" filename="Source Serif 4-SmText Light.ttf" postscriptfontname="SourceSerif4Roman-SmTextLight" stylemapfamilyname="Source Serif 4 SmallText Light" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="16"/> + </location> + </instance> + <instance name="Source Serif 4 SmText" familyname="Source Serif 4" stylename="SmText" filename="Source Serif 4-SmText.ttf" postscriptfontname="SourceSerif4Roman-SmTextRegular" stylemapfamilyname="Source Serif 4 SmallText" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="16"/> + </location> + </instance> + <instance name="Source Serif 4 SmText Semibold" familyname="Source Serif 4" stylename="SmText Semibold" filename="Source Serif 4-SmText Semibold.ttf" postscriptfontname="SourceSerif4Roman-SmTextSemibold" stylemapfamilyname="Source Serif 4 SmallText Semibold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="16"/> + </location> + </instance> + <instance name="Source Serif 4 SmText Bold" familyname="Source Serif 4" stylename="SmText Bold" filename="Source Serif 4-SmText Bold.ttf" postscriptfontname="SourceSerif4Roman-SmTextBold" stylemapfamilyname="Source Serif 4 SmallText Bold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="16"/> + </location> + </instance> + <instance name="Source Serif 4 SmText Black" familyname="Source Serif 4" stylename="SmText Black" filename="Source Serif 4-SmText Black.ttf" postscriptfontname="SourceSerif4Roman-SmTextBlack" stylemapfamilyname="Source Serif 4 SmallText Black" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="16"/> + </location> + </instance> + <instance name="Source Serif 4 ExtraLight" familyname="Source Serif 4" stylename="ExtraLight" filename="Source Serif 4-ExtraLight.ttf" postscriptfontname="SourceSerif4Roman-ExtraLight" stylemapfamilyname="Source Serif 4 ExtraLight" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="20"/> + </location> + </instance> + <instance name="Source Serif 4 Light" familyname="Source Serif 4" stylename="Light" filename="Source Serif 4-Light.ttf" postscriptfontname="SourceSerif4Roman-Light" stylemapfamilyname="Source Serif 4 Light" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="20"/> + </location> + </instance> + <instance name="Source Serif 4 Regular" familyname="Source Serif 4" stylename="Regular" filename="Source Serif 4-Regular.ttf" postscriptfontname="SourceSerif4Roman-Regular" stylemapfamilyname="Source Serif 4" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="20"/> + </location> + </instance> + <instance name="Source Serif 4 Semibold" familyname="Source Serif 4" stylename="Semibold" filename="Source Serif 4-Semibold.ttf" postscriptfontname="SourceSerif4Roman-Semibold" stylemapfamilyname="Source Serif 4 Semibold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="20"/> + </location> + </instance> + <instance name="Source Serif 4 Bold" familyname="Source Serif 4" stylename="Bold" filename="Source Serif 4-Bold.ttf" postscriptfontname="SourceSerif4Roman-Bold" stylemapfamilyname="Source Serif 4 Bold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="20"/> + </location> + </instance> + <instance name="Source Serif 4 Black" familyname="Source Serif 4" stylename="Black" filename="Source Serif 4-Black.ttf" postscriptfontname="SourceSerif4Roman-Black" stylemapfamilyname="Source Serif 4 Black" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="20"/> + </location> + </instance> + <instance name="Source Serif 4 Subhead ExtraLight" familyname="Source Serif 4" stylename="Subhead ExtraLight" filename="Source Serif 4-Subhead ExtraLight.ttf" postscriptfontname="SourceSerif4Roman-SubheadExtraLight" stylemapfamilyname="Source Serif 4 Subhead ExtraLight" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="32"/> + </location> + </instance> + <instance name="Source Serif 4 Subhead Light" familyname="Source Serif 4" stylename="Subhead Light" filename="Source Serif 4-Subhead Light.ttf" postscriptfontname="SourceSerif4Roman-SubheadLight" stylemapfamilyname="Source Serif 4 Subhead Light" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="32"/> + </location> + </instance> + <instance name="Source Serif 4 Subhead" familyname="Source Serif 4" stylename="Subhead" filename="Source Serif 4-Subhead.ttf" postscriptfontname="SourceSerif4Roman-SubheadRegular" stylemapfamilyname="Source Serif 4 Subhead" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="32"/> + </location> + </instance> + <instance name="Source Serif 4 Subhead Semibold" familyname="Source Serif 4" stylename="Subhead Semibold" filename="Source Serif 4-Subhead Semibold.ttf" postscriptfontname="SourceSerif4Roman-SubheadSemibold" stylemapfamilyname="Source Serif 4 Subhead Semibold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="32"/> + </location> + </instance> + <instance name="Source Serif 4 Subhead Bold" familyname="Source Serif 4" stylename="Subhead Bold" filename="Source Serif 4-Subhead Bold.ttf" postscriptfontname="SourceSerif4Roman-SubheadBold" stylemapfamilyname="Source Serif 4 Subhead Bold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="32"/> + </location> + </instance> + <instance name="Source Serif 4 Subhead Black" familyname="Source Serif 4" stylename="Subhead Black" filename="Source Serif 4-Subhead Black.ttf" postscriptfontname="SourceSerif4Roman-SubheadBlack" stylemapfamilyname="Source Serif 4 Subhead Black" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="32"/> + </location> + </instance> + <instance name="Source Serif 4 Display ExtraLight" familyname="Source Serif 4" stylename="Display ExtraLight" filename="Source Serif 4-Display ExtraLight.ttf" postscriptfontname="SourceSerif4Roman-DisplayExtraLight" stylemapfamilyname="Source Serif 4 Display ExtraLight" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="60"/> + </location> + </instance> + <instance name="Source Serif 4 Display Light" familyname="Source Serif 4" stylename="Display Light" filename="Source Serif 4-Display Light.ttf" postscriptfontname="SourceSerif4Roman-DisplayLight" stylemapfamilyname="Source Serif 4 Display Light" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="60"/> + </location> + </instance> + <instance name="Source Serif 4 Display" familyname="Source Serif 4" stylename="Display" filename="Source Serif 4-Display.ttf" postscriptfontname="SourceSerif4Roman-DisplayRegular" stylemapfamilyname="Source Serif 4 Display" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="60"/> + </location> + </instance> + <instance name="Source Serif 4 Display Semibold" familyname="Source Serif 4" stylename="Display Semibold" filename="Source Serif 4-Display Semibold.ttf" postscriptfontname="SourceSerif4Roman-DisplaySemibold" stylemapfamilyname="Source Serif 4 Display Semibold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="60"/> + </location> + </instance> + <instance name="Source Serif 4 Display Bold" familyname="Source Serif 4" stylename="Display Bold" filename="Source Serif 4-Display Bold.ttf" postscriptfontname="SourceSerif4Roman-DisplayBold" stylemapfamilyname="Source Serif 4 Display Bold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="60"/> + </location> + </instance> + <instance name="Source Serif 4 Display Black" familyname="Source Serif 4" stylename="Display Black" filename="Source Serif 4-Display Black.ttf" postscriptfontname="SourceSerif4Roman-DisplayBlack" stylemapfamilyname="Source Serif 4 Display Black" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="60"/> + </location> + </instance> + </instances> + <lib> + <dict> + <key>public.skipExportGlyphs</key> + <array> + <string>caron.alt</string> + <string>commabelowcmb.alt</string> + <string>tonos.cap</string> + <string>f.ligalong</string> + <string>dieresiscmb.tight</string> + <string>IJ</string> + <string>Tbar</string> + <string>colontriangularmod</string> + <string>crossmark</string> + <string>ij</string> + <string>overline</string> + <string>similar</string> + <string>tbar</string> + <string>triangularbullet</string> + <string>turkicdsccmb</string> + </array> + </dict> + </lib> +</designspace> diff --git a/Tests/designspaceLib/data/split_output/test_v5_MutatorSans_and_Serif_serif_0.0.designspace b/Tests/designspaceLib/data/split_output/test_v5_MutatorSans_and_Serif_serif_0.0.designspace new file mode 100644 index 00000000..d811ffa0 --- /dev/null +++ b/Tests/designspaceLib/data/split_output/test_v5_MutatorSans_and_Serif_serif_0.0.designspace @@ -0,0 +1,147 @@ +<?xml version='1.0' encoding='UTF-8'?> +<designspace format="5.0"> + <axes> + <axis tag="wght" name="weight" minimum="300" maximum="700" default="300"> + <map input="300" output="0"/> + <map input="500" output="500"/> + <map input="700" output="1000"/> + </axis> + <axis tag="wdth" name="width" minimum="50" maximum="200" default="50"> + <map input="50" output="0"/> + <map input="100" output="500"/> + <map input="200" output="1000"/> + </axis> + </axes> + <rules> + <rule name="fold_I_serifs"> + <conditionset> + <condition name="width" minimum="0" maximum="328"/> + </conditionset> + <sub name="I" with="I.narrow"/> + </rule> + <rule name="fold_S_terminals"> + <conditionset> + <condition name="weight" minimum="0" maximum="500"/> + </conditionset> + <sub name="S" with="S.closed"/> + </rule> + </rules> + <sources> + <source filename="../MutatorSansLightCondensed.ufo" name="master.MutatorMathTest.LightCondensed.0" familyname="MutatorMathTest" stylename="LightCondensed"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="width" xvalue="0"/> + </location> + </source> + <source filename="../MutatorSansBoldCondensed.ufo" name="master.MutatorMathTest.BoldCondensed.1" familyname="MutatorMathTest" stylename="BoldCondensed"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="width" xvalue="0"/> + </location> + </source> + <source filename="../MutatorSansLightWide.ufo" name="master.MutatorMathTest.LightWide.2" familyname="MutatorMathTest" stylename="LightWide"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="width" xvalue="1000"/> + </location> + </source> + <source filename="../MutatorSansBoldWide.ufo" name="master.MutatorMathTest.BoldWide.3" familyname="MutatorMathTest" stylename="BoldWide"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="width" xvalue="1000"/> + </location> + </source> + <source filename="../MutatorSansLightCondensed.ufo" name="support.crossbar" layer="support.crossbar"> + <location> + <dimension name="weight" xvalue="700"/> + <dimension name="width" xvalue="0"/> + </location> + </source> + <source filename="../MutatorSansLightCondensed.ufo" name="support.S.wide" layer="support.S.wide"> + <location> + <dimension name="weight" xvalue="700"/> + <dimension name="width" xvalue="1000"/> + </location> + </source> + <source filename="../MutatorSansLightCondensed.ufo" name="support.S.middle" layer="support.S.middle"> + <location> + <dimension name="weight" xvalue="700"/> + <dimension name="width" xvalue="569.078"/> + </location> + </source> + </sources> + <variable-fonts> + <variable-font name="MutatorSansVariable_Weight_Width"> + <axis-subsets> + <axis-subset name="weight"/> + <axis-subset name="width"/> + </axis-subsets> + </variable-font> + <variable-font name="MutatorSansVariable_Weight"> + <axis-subsets> + <axis-subset name="weight"/> + </axis-subsets> + </variable-font> + <variable-font name="MutatorSansVariable_Width"> + <axis-subsets> + <axis-subset name="width"/> + </axis-subsets> + </variable-font> + </variable-fonts> + <instances> + <instance name="MutatorMathTest Sans Light Condensed" familyname="MutatorMathTest" stylename="Sans Light Condensed" filename="MutatorMathTest-Sans Light Condensed.ttf" postscriptfontname="MutatorMathTest-SansLightCondensed" stylemapfamilyname="MutatorMathTest Sans Light Condensed" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="width" xvalue="0"/> + </location> + </instance> + <instance name="MutatorMathTest Sans Bold Condensed" familyname="MutatorMathTest" stylename="Sans Bold Condensed" filename="MutatorMathTest-Sans Bold Condensed.ttf" postscriptfontname="MutatorMathTest-SansBoldCondensed" stylemapfamilyname="MutatorMathTest Sans Bold Condensed" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="width" xvalue="0"/> + </location> + </instance> + <instance name="MutatorMathTest Sans Light Extended" familyname="MutatorMathTest" stylename="Sans Light Extended" filename="MutatorMathTest-Sans Light Extended.ttf" postscriptfontname="MutatorMathTest-SansLightExtended" stylemapfamilyname="MutatorMathTest Sans Light Extended" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="width" xvalue="1000"/> + </location> + </instance> + <instance name="MutatorMathTest Sans Bold Extended" familyname="MutatorMathTest" stylename="Sans Bold Extended" filename="MutatorMathTest-Sans Bold Extended.ttf" postscriptfontname="MutatorMathTest-SansBoldExtended" stylemapfamilyname="MutatorMathTest Sans Bold Extended" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="width" xvalue="1000"/> + </location> + </instance> + <instance name="MutatorMathTest Sans Medium" familyname="MutatorMathTest" stylename="Sans Medium" filename="MutatorMathTest-Sans Medium.ttf" postscriptfontname="MutatorMathTest-SansMedium" stylemapfamilyname="MutatorMathTest Sans Medium" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="500"/> + <dimension name="width" xvalue="327"/> + </location> + </instance> + <instance name="MutatorMathTest Sans Medium" familyname="MutatorMathTest" stylename="Sans Medium" filename="MutatorMathTest-Sans Medium.ttf" postscriptfontname="MutatorMathTest-SansMedium" stylemapfamilyname="MutatorMathTest Sans Medium" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="500"/> + <dimension name="width" xvalue="327"/> + </location> + </instance> + <instance name="MutatorMathTest Sans Bold" familyname="MutatorMathTest" stylename="Sans Bold" filename="MutatorMathTest-Sans Bold.ttf" postscriptfontname="MutatorMathTest-SansBold" stylemapfamilyname="MutatorMathTest Sans Bold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="width" xvalue="569.078"/> + </location> + </instance> + <instance name="MutatorMathTest Sans Medium Extended" familyname="MutatorMathTest" stylename="Sans Medium Extended" filename="MutatorMathTest-Sans Medium Extended.ttf" postscriptfontname="MutatorMathTest-SansMediumExtended" stylemapfamilyname="MutatorMathTest Sans Medium Extended" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="500"/> + <dimension name="width" xvalue="1000"/> + </location> + </instance> + <instance name="MutatorMathTest Sans Light Condensed" familyname="MutatorMathTest" stylename="Sans Light Condensed" filename="MutatorMathTest-Sans Light Condensed.ttf" postscriptfontname="MutatorMathTest-SansLightCondensed" stylemapfamilyname="MutatorMathTest Sans Light Condensed" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="width" xvalue="0"/> + </location> + </instance> + </instances> +</designspace> diff --git a/Tests/designspaceLib/data/split_output/test_v5_MutatorSans_and_Serif_serif_1.0.designspace b/Tests/designspaceLib/data/split_output/test_v5_MutatorSans_and_Serif_serif_1.0.designspace new file mode 100644 index 00000000..5e3a6f52 --- /dev/null +++ b/Tests/designspaceLib/data/split_output/test_v5_MutatorSans_and_Serif_serif_1.0.designspace @@ -0,0 +1,44 @@ +<?xml version='1.0' encoding='UTF-8'?> +<designspace format="5.0"> + <axes> + <axis tag="wght" name="weight" minimum="300" maximum="700" default="300"> + <map input="300" output="0"/> + <map input="500" output="500"/> + <map input="700" output="1000"/> + </axis> + <axis tag="wdth" name="width" minimum="50" maximum="200" default="50"> + <map input="50" output="0"/> + <map input="100" output="500"/> + <map input="200" output="1000"/> + </axis> + </axes> + <sources> + <source filename="../MutatorSerifLightCondensed.ufo" familyname="MutatorMathTest" stylename="SerifLightCondensed"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="width" xvalue="0"/> + </location> + </source> + <source filename="../MutatorSerifLightWide.ufo" familyname="MutatorMathTest" stylename="SerifLightWide"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="width" xvalue="1000"/> + </location> + </source> + </sources> + <variable-fonts> + <variable-font name="MutatorSerifVariable_Width"> + <axis-subsets> + <axis-subset name="width"/> + </axis-subsets> + </variable-font> + </variable-fonts> + <instances> + <instance name="MutatorMathTest Serif Light Condensed" familyname="MutatorMathTest" stylename="Serif Light Condensed" filename="MutatorMathTest-Serif Light Condensed.ttf" postscriptfontname="MutatorMathTest-SerifLightCondensed" stylemapfamilyname="MutatorMathTest Serif Light Condensed" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="width" xvalue="0"/> + </location> + </instance> + </instances> +</designspace> diff --git a/Tests/designspaceLib/data/split_output/test_v5_aktiv_.designspace b/Tests/designspaceLib/data/split_output/test_v5_aktiv_.designspace new file mode 100644 index 00000000..4451e6e6 --- /dev/null +++ b/Tests/designspaceLib/data/split_output/test_v5_aktiv_.designspace @@ -0,0 +1,595 @@ +<?xml version='1.0' encoding='UTF-8'?> +<designspace format="5.0"> + <axes> + <axis tag="wght" name="Weight" minimum="100" maximum="900" default="400"> + <map input="100" output="22"/> + <map input="200" output="38"/> + <map input="300" output="57"/> + <map input="400" output="84"/> + <map input="500" output="98"/> + <map input="600" output="115"/> + <map input="700" output="133"/> + <map input="800" output="158"/> + <map input="900" output="185"/> + </axis> + <axis tag="wdth" name="Width" minimum="75" maximum="125" default="100"/> + <axis tag="ital" name="Italic" minimum="0" maximum="1" default="0"/> + </axes> + <rules processing="last"> + <rule name="BRACKET.CYR"> + <conditionset> + <condition name="Italic" minimum="0.1" maximum="1"/> + </conditionset> + <sub name="ghe.loclSRB" with="ghe.ital.loclSRB"/> + <sub name="ghe.loclMKD" with="ghe.ital.loclMKD"/> + <sub name="de.loclMKDSRB" with="de.ital.loclMKDSRB"/> + <sub name="pe.loclMKDSRB" with="pe.ital.loclMKDSRB"/> + <sub name="te.loclMKDSRB" with="te.ital.loclMKDSRB"/> + <sub name="gje.loclMKD" with="gje.ital.loclMKD"/> + <sub name="sha.loclMKDSRB" with="sha.ital.loclMKDSRB"/> + </rule> + <rule name="BRACKET.116.185"> + <conditionset> + <condition name="Weight" minimum="116" maximum="185"/> + <condition name="Width" minimum="75" maximum="97.5"/> + </conditionset> + <sub name="cent" with="cent.BRACKET.130"/> + <sub name="dollar" with="dollar.BRACKET.130"/> + </rule> + </rules> + <sources> + <source filename="../AktivGroteskCd_Hair.ufo" name="Aktiv Grotesk Cd Hair"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="../AktivGroteskCd_HairIt.ufo" name="Aktiv Grotesk Cd Hair Italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="../AktivGrotesk_Hair.ufo" name="Aktiv Grotesk Hair"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="../AktivGrotesk_HairIt.ufo" name="Aktiv Grotesk Hair Italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="../AktivGroteskEx_Hair.ufo" name="Aktiv Grotesk Ex Hair"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="../AktivGroteskEx_HairIt.ufo" name="Aktiv Grotesk Ex Hair Italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="../AktivGroteskCd_Rg.ufo" name="Aktiv Grotesk Cd"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="../AktivGroteskCd_It.ufo" name="Aktiv Grotesk Cd Italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="../AktivGrotesk_Rg.ufo" name="Aktiv Grotesk Regular" familyname="Aktiv Grotesk"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="../AktivGrotesk_Rg.ufo" name="Aktiv Grotesk Regular" layer="{126,100,0}"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="../AktivGrotesk_It.ufo" name="Aktiv Grotesk Italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="../AktivGrotesk_It.ufo" name="Aktiv Grotesk Italic {126,100,1}" layer="{126,100,1}"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="../AktivGroteskEx_Rg.ufo" name="Aktiv Grotesk Ex"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="../AktivGroteskEx_It.ufo" name="Aktiv Grotesk Ex Italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="../AktivGroteskCd_Blk.ufo" name="Aktiv Grotesk Cd Black"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="../AktivGroteskCd_BlkIt.ufo" name="Aktiv Grotesk Cd Black Italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="../AktivGrotesk_Blk.ufo" name="Aktiv Grotesk Black"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="../AktivGrotesk_BlkIt.ufo" name="Aktiv Grotesk Black Italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="../AktivGroteskEx_Blk.ufo" name="Aktiv Grotesk Ex Black"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="../AktivGroteskEx_BlkIt.ufo" name="Aktiv Grotesk Ex Black Italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + </sources> + <variable-fonts> + <variable-font name="AktivGroteskVF_WghtWdthItal"> + <axis-subsets> + <axis-subset name="Weight"/> + <axis-subset name="Width"/> + <axis-subset name="Italic"/> + </axis-subsets> + </variable-font> + <variable-font name="AktivGroteskVF_WghtWdth"> + <axis-subsets> + <axis-subset name="Weight"/> + <axis-subset name="Width"/> + </axis-subsets> + </variable-font> + <variable-font name="AktivGroteskVF_Wght"> + <axis-subsets> + <axis-subset name="Weight"/> + </axis-subsets> + </variable-font> + <variable-font name="AktivGroteskVF_Italics_WghtWdth"> + <axis-subsets> + <axis-subset name="Weight"/> + <axis-subset name="Width"/> + <axis-subset name="Italic" uservalue="1"/> + </axis-subsets> + </variable-font> + <variable-font name="AktivGroteskVF_Italics_Wght"> + <axis-subsets> + <axis-subset name="Weight"/> + <axis-subset name="Italic" uservalue="1"/> + </axis-subsets> + </variable-font> + </variable-fonts> + <instances> + <instance name="Aktiv Grotesk Cd Hair" familyname="Aktiv Grotesk" stylename="Cd Hair" filename="../instances/AktivGroteskCd_Hair.ufo" postscriptfontname="AktivGrotesk-CdHair" stylemapfamilyname="Aktiv Grotesk Cd Hair" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Hair Italic" familyname="Aktiv Grotesk" stylename="Cd Hair Italic" filename="../instances/AktivGroteskCd_HairIt.ufo" postscriptfontname="AktivGrotesk-CdHairItalic" stylemapfamilyname="Aktiv Grotesk Cd Hair" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Hair" familyname="Aktiv Grotesk" stylename="Hair" filename="../instances/AktivGrotesk_Hair.ufo" postscriptfontname="AktivGrotesk-Hair" stylemapfamilyname="Aktiv Grotesk Hair" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Hair Italic" familyname="Aktiv Grotesk" stylename="Hair Italic" filename="../instances/AktivGrotesk_HairIt.ufo" postscriptfontname="AktivGrotesk-HairItalic" stylemapfamilyname="Aktiv Grotesk Hair" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Hair" familyname="Aktiv Grotesk" stylename="Ex Hair" filename="../instances/AktivGroteskEx_Hair.ufo" postscriptfontname="AktivGrotesk-ExHair" stylemapfamilyname="Aktiv Grotesk Ex Hair" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Hair Italic" familyname="Aktiv Grotesk" stylename="Ex Hair Italic" filename="../instances/AktivGroteskEx_HairIt.ufo" postscriptfontname="AktivGrotesk-ExHairItalic" stylemapfamilyname="Aktiv Grotesk Ex Hair" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Thin" familyname="Aktiv Grotesk" stylename="Cd Thin" filename="../instances/AktivGroteskCd_Th.ufo" postscriptfontname="AktivGrotesk-CdThin" stylemapfamilyname="Aktiv Grotesk Cd Thin" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Thin Italic" familyname="Aktiv Grotesk" stylename="Cd Thin Italic" filename="../instances/AktivGroteskCd_ThIt.ufo" postscriptfontname="AktivGrotesk-CdThinItalic" stylemapfamilyname="Aktiv Grotesk Cd Thin" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Thin" familyname="Aktiv Grotesk" stylename="Thin" filename="../instances/AktivGrotesk_Th.ufo" postscriptfontname="AktivGrotesk-Thin" stylemapfamilyname="Aktiv Grotesk Thin" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Thin Italic" familyname="Aktiv Grotesk" stylename="Thin Italic" filename="../instances/AktivGrotesk_ThIt.ufo" postscriptfontname="AktivGrotesk-ThinItalic" stylemapfamilyname="Aktiv Grotesk Thin" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Thin" familyname="Aktiv Grotesk" stylename="Ex Thin" filename="../instances/AktivGroteskEx_Th.ufo" postscriptfontname="AktivGrotesk-ExThin" stylemapfamilyname="Aktiv Grotesk Ex Thin" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Thin Italic" familyname="Aktiv Grotesk" stylename="Ex Thin Italic" filename="../instances/AktivGroteskEx_ThIt.ufo" postscriptfontname="AktivGrotesk-ExThinItalic" stylemapfamilyname="Aktiv Grotesk Ex Thin" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Light" familyname="Aktiv Grotesk" stylename="Cd Light" filename="../instances/AktivGroteskCd_Lt.ufo" postscriptfontname="AktivGrotesk-CdLight" stylemapfamilyname="Aktiv Grotesk Cd Light" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Light Italic" familyname="Aktiv Grotesk" stylename="Cd Light Italic" filename="../instances/AktivGroteskCd_LtIt.ufo" postscriptfontname="AktivGrotesk-CdLightItalic" stylemapfamilyname="Aktiv Grotesk Cd Light" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Light" familyname="Aktiv Grotesk" stylename="Light" filename="../instances/AktivGrotesk_Lt.ufo" postscriptfontname="AktivGrotesk-Light" stylemapfamilyname="Aktiv Grotesk Light" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Light Italic" familyname="Aktiv Grotesk" stylename="Light Italic" filename="../instances/AktivGrotesk_LtIt.ufo" postscriptfontname="AktivGrotesk-LightItalic" stylemapfamilyname="Aktiv Grotesk Light" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Light" familyname="Aktiv Grotesk" stylename="Ex Light" filename="../instances/AktivGroteskEx_Lt.ufo" postscriptfontname="AktivGrotesk-ExLight" stylemapfamilyname="Aktiv Grotesk Ex Light" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Light Italic" familyname="Aktiv Grotesk" stylename="Ex Light Italic" filename="../instances/AktivGroteskEx_LtIt.ufo" postscriptfontname="AktivGrotesk-ExLightItalic" stylemapfamilyname="Aktiv Grotesk Ex Light" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd" familyname="Aktiv Grotesk" stylename="Cd" filename="../instances/AktivGroteskCd_Rg.ufo" postscriptfontname="AktivGrotesk-Cd" stylemapfamilyname="Aktiv Grotesk Cd" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Italic" familyname="Aktiv Grotesk" stylename="Cd Italic" filename="../instances/AktivGroteskCd_It.ufo" postscriptfontname="AktivGrotesk-CdItalic" stylemapfamilyname="Aktiv Grotesk Cd" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk " familyname="Aktiv Grotesk" stylename="" filename="../instances/AktivGrotesk_Rg.ufo" postscriptfontname="AktivGrotesk-" stylemapfamilyname="Aktiv Grotesk" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Italic" familyname="Aktiv Grotesk" stylename="Italic" filename="../instances/AktivGrotesk_It.ufo" postscriptfontname="AktivGrotesk-Italic" stylemapfamilyname="Aktiv Grotesk" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex" familyname="Aktiv Grotesk" stylename="Ex" filename="../instances/AktivGroteskEx_Rg.ufo" postscriptfontname="AktivGrotesk-Ex" stylemapfamilyname="Aktiv Grotesk Ex" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Italic" familyname="Aktiv Grotesk" stylename="Ex Italic" filename="../instances/AktivGroteskEx_It.ufo" postscriptfontname="AktivGrotesk-ExItalic" stylemapfamilyname="Aktiv Grotesk Ex" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Medium" familyname="Aktiv Grotesk" stylename="Cd Medium" filename="../instances/AktivGroteskCd_Md.ufo" postscriptfontname="AktivGrotesk-CdMedium" stylemapfamilyname="Aktiv Grotesk Cd Medium" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Medium Italic" familyname="Aktiv Grotesk" stylename="Cd Medium Italic" filename="../instances/AktivGroteskCd_MdIt.ufo" postscriptfontname="AktivGrotesk-CdMediumItalic" stylemapfamilyname="Aktiv Grotesk Cd Medium" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Medium" familyname="Aktiv Grotesk" stylename="Medium" filename="../instances/AktivGrotesk_Md.ufo" postscriptfontname="AktivGrotesk-Medium" stylemapfamilyname="Aktiv Grotesk Medium" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Medium Italic" familyname="Aktiv Grotesk" stylename="Medium Italic" filename="../instances/AktivGrotesk_MdIt.ufo" postscriptfontname="AktivGrotesk-MediumItalic" stylemapfamilyname="Aktiv Grotesk Medium" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Medium" familyname="Aktiv Grotesk" stylename="Ex Medium" filename="../instances/AktivGroteskEx_Md.ufo" postscriptfontname="AktivGrotesk-ExMedium" stylemapfamilyname="Aktiv Grotesk Ex Medium" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Medium Italic" familyname="Aktiv Grotesk" stylename="Ex Medium Italic" filename="../instances/AktivGroteskEx_MdIt.ufo" postscriptfontname="AktivGrotesk-ExMediumItalic" stylemapfamilyname="Aktiv Grotesk Ex Medium" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd SemiBold" familyname="Aktiv Grotesk" stylename="Cd SemiBold" filename="../../build/instances/AktivGroteskCd_SBd.ufo" postscriptfontname="AktivGrotesk-CdSemiBold" stylemapfamilyname="Aktiv Grotesk Cd SemiBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd SemiBold Italic" familyname="Aktiv Grotesk" stylename="Cd SemiBold Italic" filename="../../build/instances/AktivGroteskCd_SBdIt.ufo" postscriptfontname="AktivGrotesk-CdSemiBoldItalic" stylemapfamilyname="Aktiv Grotesk Cd SemiBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk SemiBold" familyname="Aktiv Grotesk" stylename="SemiBold" filename="../../build/instances/AktivGrotesk_SBd.ufo" postscriptfontname="AktivGrotesk-SemiBold" stylemapfamilyname="Aktiv Grotesk SemiBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk SemiBold Italic" familyname="Aktiv Grotesk" stylename="SemiBold Italic" filename="../../build/instances/AktivGrotesk_SBdIt.ufo" postscriptfontname="AktivGrotesk-SemiBoldItalic" stylemapfamilyname="Aktiv Grotesk SemiBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex SemiBold" familyname="Aktiv Grotesk" stylename="Ex SemiBold" filename="../../build/instances/AktivGroteskEx_SBd.ufo" postscriptfontname="AktivGrotesk-ExSemiBold" stylemapfamilyname="Aktiv Grotesk Ex SemiBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex SemiBold Italic" familyname="Aktiv Grotesk" stylename="Ex SemiBold Italic" filename="../../build/instances/AktivGroteskEx_SBdIt.ufo" postscriptfontname="AktivGrotesk-ExSemiBoldItalic" stylemapfamilyname="Aktiv Grotesk Ex SemiBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Bold" familyname="Aktiv Grotesk" stylename="Cd Bold" filename="../instances/AktivGroteskCd_Bd.ufo" postscriptfontname="AktivGrotesk-CdBold" stylemapfamilyname="Aktiv Grotesk Cd" stylemapstylename="bold"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Bold Italic" familyname="Aktiv Grotesk" stylename="Cd Bold Italic" filename="../instances/AktivGroteskCd_BdIt.ufo" postscriptfontname="AktivGrotesk-CdBoldItalic" stylemapfamilyname="Aktiv Grotesk Cd" stylemapstylename="bold italic"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Bold" familyname="Aktiv Grotesk" stylename="Bold" filename="../instances/AktivGrotesk_Bd.ufo" postscriptfontname="AktivGrotesk-Bold" stylemapfamilyname="Aktiv Grotesk" stylemapstylename="bold"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Bold Italic" familyname="Aktiv Grotesk" stylename="Bold Italic" filename="../instances/AktivGrotesk_BdIt.ufo" postscriptfontname="AktivGrotesk-BoldItalic" stylemapfamilyname="Aktiv Grotesk" stylemapstylename="bold italic"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Bold" familyname="Aktiv Grotesk" stylename="Ex Bold" filename="../instances/AktivGroteskEx_Bd.ufo" postscriptfontname="AktivGrotesk-ExBold" stylemapfamilyname="Aktiv Grotesk Ex" stylemapstylename="bold"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Bold Italic" familyname="Aktiv Grotesk" stylename="Ex Bold Italic" filename="../instances/AktivGroteskEx_BdIt.ufo" postscriptfontname="AktivGrotesk-ExBoldItalic" stylemapfamilyname="Aktiv Grotesk Ex" stylemapstylename="bold italic"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd XBold" familyname="Aktiv Grotesk" stylename="Cd XBold" filename="../instances/AktivGroteskCd_XBd.ufo" postscriptfontname="AktivGrotesk-CdXBold" stylemapfamilyname="Aktiv Grotesk Cd XBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd XBold Italic" familyname="Aktiv Grotesk" stylename="Cd XBold Italic" filename="../instances/AktivGroteskCd_XBdIt.ufo" postscriptfontname="AktivGrotesk-CdXBoldItalic" stylemapfamilyname="Aktiv Grotesk Cd XBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk XBold" familyname="Aktiv Grotesk" stylename="XBold" filename="../instances/AktivGrotesk_XBd.ufo" postscriptfontname="AktivGrotesk-XBold" stylemapfamilyname="Aktiv Grotesk XBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk XBold Italic" familyname="Aktiv Grotesk" stylename="XBold Italic" filename="../instances/AktivGrotesk_XBdIt.ufo" postscriptfontname="AktivGrotesk-XBoldItalic" stylemapfamilyname="Aktiv Grotesk XBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex XBold" familyname="Aktiv Grotesk" stylename="Ex XBold" filename="../instances/AktivGroteskEx_XBd.ufo" postscriptfontname="AktivGrotesk-ExXBold" stylemapfamilyname="Aktiv Grotesk Ex XBold" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex XBold Italic" familyname="Aktiv Grotesk" stylename="Ex XBold Italic" filename="../instances/AktivGroteskEx_XBdIt.ufo" postscriptfontname="AktivGrotesk-ExXBoldItalic" stylemapfamilyname="Aktiv Grotesk Ex XBold" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Black" familyname="Aktiv Grotesk" stylename="Cd Black" filename="../instances/AktivGroteskCd_Blk.ufo" postscriptfontname="AktivGrotesk-CdBlack" stylemapfamilyname="Aktiv Grotesk Cd Black" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Cd Black Italic" familyname="Aktiv Grotesk" stylename="Cd Black Italic" filename="../instances/AktivGroteskCd_BlkIt.ufo" postscriptfontname="AktivGrotesk-CdBlackItalic" stylemapfamilyname="Aktiv Grotesk Cd Black" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Black" familyname="Aktiv Grotesk" stylename="Black" filename="../instances/AktivGrotesk_Blk.ufo" postscriptfontname="AktivGrotesk-Black" stylemapfamilyname="Aktiv Grotesk Black" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Black Italic" familyname="Aktiv Grotesk" stylename="Black Italic" filename="../instances/AktivGrotesk_BlkIt.ufo" postscriptfontname="AktivGrotesk-BlackItalic" stylemapfamilyname="Aktiv Grotesk Black" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Black" familyname="Aktiv Grotesk" stylename="Ex Black" filename="../instances/AktivGroteskEx_Blk.ufo" postscriptfontname="AktivGrotesk-ExBlack" stylemapfamilyname="Aktiv Grotesk Ex Black" stylemapstylename="regular"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance name="Aktiv Grotesk Ex Black Italic" familyname="Aktiv Grotesk" stylename="Ex Black Italic" filename="../instances/AktivGroteskEx_BlkIt.ufo" postscriptfontname="AktivGrotesk-ExBlackItalic" stylemapfamilyname="Aktiv Grotesk Ex Black" stylemapstylename="italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + </instances> +</designspace> diff --git a/Tests/designspaceLib/data/split_output/test_v5_sourceserif_italic_0.0.designspace b/Tests/designspaceLib/data/split_output/test_v5_sourceserif_italic_0.0.designspace new file mode 100644 index 00000000..447461fb --- /dev/null +++ b/Tests/designspaceLib/data/split_output/test_v5_sourceserif_italic_0.0.designspace @@ -0,0 +1,282 @@ +<?xml version='1.0' encoding='UTF-8'?> +<designspace format="5.0"> + <axes> + <axis tag="wght" name="weight" minimum="200" maximum="900" default="400"> + <map input="200" output="0"/> + <map input="300" output="145"/> + <map input="400" output="394"/> + <map input="600" output="594"/> + <map input="700" output="823"/> + <map input="900" output="1000"/> + </axis> + <axis tag="opsz" name="optical" minimum="8" maximum="60" default="20"/> + </axes> + <sources> + <source filename="../caption/master_0/SourceSerif_c0.ufo"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="8"/> + </location> + </source> + <source filename="../caption/master_1/SourceSerif_c1.ufo"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="8"/> + </location> + </source> + <source filename="../caption/master_2/SourceSerif_c2.ufo"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="8"/> + </location> + </source> + <source filename="../text/master_0/SourceSerif_0.ufo"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="20"/> + </location> + </source> + <source filename="../text/master_1/SourceSerif_1.ufo" familyname="Source Serif 4"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="20"/> + </location> + </source> + <source filename="../text/master_2/SourceSerif_2.ufo"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="20"/> + </location> + </source> + <source filename="../display/master_0/SourceSerif_d0.ufo"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="60"/> + </location> + </source> + <source filename="../display/master_1/SourceSerif_d1.ufo"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="60"/> + </location> + </source> + <source filename="../display/master_2/SourceSerif_d2.ufo"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="60"/> + </location> + </source> + </sources> + <variable-fonts> + <variable-font name="SourceSerif4Variable-Roman"> + <axis-subsets> + <axis-subset name="weight"/> + <axis-subset name="optical"/> + </axis-subsets> + <lib> + <dict> + <key>public.skipExportGlyphs</key> + <array> + <string>caron.alt</string> + <string>commabelowcmb.alt</string> + <string>tonos.cap</string> + <string>f.ligalong</string> + <string>dieresiscmb.tight</string> + <string>IJ</string> + <string>Tbar</string> + <string>colontriangularmod</string> + <string>crossmark</string> + <string>ij</string> + <string>overline</string> + <string>similar</string> + <string>tbar</string> + <string>triangularbullet</string> + <string>turkicdsccmb</string> + </array> + </dict> + </lib> + </variable-font> + </variable-fonts> + <instances> + <instance name="Source Serif 4 Caption ExtraLight" familyname="Source Serif 4" stylename="Caption ExtraLight" filename="Source Serif 4-Caption ExtraLight.ttf" postscriptfontname="SourceSerif4Roman-CaptionExtraLight" stylemapfamilyname="Source Serif 4 Caption ExtraLight" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="8"/> + </location> + </instance> + <instance name="Source Serif 4 Caption Light" familyname="Source Serif 4" stylename="Caption Light" filename="Source Serif 4-Caption Light.ttf" postscriptfontname="SourceSerif4Roman-CaptionLight" stylemapfamilyname="Source Serif 4 Caption Light" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="8"/> + </location> + </instance> + <instance name="Source Serif 4 Caption" familyname="Source Serif 4" stylename="Caption" filename="Source Serif 4-Caption.ttf" postscriptfontname="SourceSerif4Roman-CaptionRegular" stylemapfamilyname="Source Serif 4 Caption" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="8"/> + </location> + </instance> + <instance name="Source Serif 4 Caption Semibold" familyname="Source Serif 4" stylename="Caption Semibold" filename="Source Serif 4-Caption Semibold.ttf" postscriptfontname="SourceSerif4Roman-CaptionSemibold" stylemapfamilyname="Source Serif 4 Caption Semibold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="8"/> + </location> + </instance> + <instance name="Source Serif 4 Caption Bold" familyname="Source Serif 4" stylename="Caption Bold" filename="Source Serif 4-Caption Bold.ttf" postscriptfontname="SourceSerif4Roman-CaptionBold" stylemapfamilyname="Source Serif 4 Caption Bold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="8"/> + </location> + </instance> + <instance name="Source Serif 4 Caption Black" familyname="Source Serif 4" stylename="Caption Black" filename="Source Serif 4-Caption Black.ttf" postscriptfontname="SourceSerif4Roman-CaptionBlack" stylemapfamilyname="Source Serif 4 Caption Black" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="8"/> + </location> + </instance> + <instance name="Source Serif 4 SmText ExtraLight" familyname="Source Serif 4" stylename="SmText ExtraLight" filename="Source Serif 4-SmText ExtraLight.ttf" postscriptfontname="SourceSerif4Roman-SmTextExtraLight" stylemapfamilyname="Source Serif 4 SmallText ExtraLight" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="16"/> + </location> + </instance> + <instance name="Source Serif 4 SmText Light" familyname="Source Serif 4" stylename="SmText Light" filename="Source Serif 4-SmText Light.ttf" postscriptfontname="SourceSerif4Roman-SmTextLight" stylemapfamilyname="Source Serif 4 SmallText Light" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="16"/> + </location> + </instance> + <instance name="Source Serif 4 SmText" familyname="Source Serif 4" stylename="SmText" filename="Source Serif 4-SmText.ttf" postscriptfontname="SourceSerif4Roman-SmTextRegular" stylemapfamilyname="Source Serif 4 SmallText" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="16"/> + </location> + </instance> + <instance name="Source Serif 4 SmText Semibold" familyname="Source Serif 4" stylename="SmText Semibold" filename="Source Serif 4-SmText Semibold.ttf" postscriptfontname="SourceSerif4Roman-SmTextSemibold" stylemapfamilyname="Source Serif 4 SmallText Semibold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="16"/> + </location> + </instance> + <instance name="Source Serif 4 SmText Bold" familyname="Source Serif 4" stylename="SmText Bold" filename="Source Serif 4-SmText Bold.ttf" postscriptfontname="SourceSerif4Roman-SmTextBold" stylemapfamilyname="Source Serif 4 SmallText Bold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="16"/> + </location> + </instance> + <instance name="Source Serif 4 SmText Black" familyname="Source Serif 4" stylename="SmText Black" filename="Source Serif 4-SmText Black.ttf" postscriptfontname="SourceSerif4Roman-SmTextBlack" stylemapfamilyname="Source Serif 4 SmallText Black" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="16"/> + </location> + </instance> + <instance name="Source Serif 4 ExtraLight" familyname="Source Serif 4" stylename="ExtraLight" filename="Source Serif 4-ExtraLight.ttf" postscriptfontname="SourceSerif4Roman-ExtraLight" stylemapfamilyname="Source Serif 4 ExtraLight" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="20"/> + </location> + </instance> + <instance name="Source Serif 4 Light" familyname="Source Serif 4" stylename="Light" filename="Source Serif 4-Light.ttf" postscriptfontname="SourceSerif4Roman-Light" stylemapfamilyname="Source Serif 4 Light" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="20"/> + </location> + </instance> + <instance name="Source Serif 4 Regular" familyname="Source Serif 4" stylename="Regular" filename="Source Serif 4-Regular.ttf" postscriptfontname="SourceSerif4Roman-Regular" stylemapfamilyname="Source Serif 4" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="20"/> + </location> + </instance> + <instance name="Source Serif 4 Semibold" familyname="Source Serif 4" stylename="Semibold" filename="Source Serif 4-Semibold.ttf" postscriptfontname="SourceSerif4Roman-Semibold" stylemapfamilyname="Source Serif 4 Semibold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="20"/> + </location> + </instance> + <instance name="Source Serif 4 Bold" familyname="Source Serif 4" stylename="Bold" filename="Source Serif 4-Bold.ttf" postscriptfontname="SourceSerif4Roman-Bold" stylemapfamilyname="Source Serif 4 Bold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="20"/> + </location> + </instance> + <instance name="Source Serif 4 Black" familyname="Source Serif 4" stylename="Black" filename="Source Serif 4-Black.ttf" postscriptfontname="SourceSerif4Roman-Black" stylemapfamilyname="Source Serif 4 Black" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="20"/> + </location> + </instance> + <instance name="Source Serif 4 Subhead ExtraLight" familyname="Source Serif 4" stylename="Subhead ExtraLight" filename="Source Serif 4-Subhead ExtraLight.ttf" postscriptfontname="SourceSerif4Roman-SubheadExtraLight" stylemapfamilyname="Source Serif 4 Subhead ExtraLight" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="32"/> + </location> + </instance> + <instance name="Source Serif 4 Subhead Light" familyname="Source Serif 4" stylename="Subhead Light" filename="Source Serif 4-Subhead Light.ttf" postscriptfontname="SourceSerif4Roman-SubheadLight" stylemapfamilyname="Source Serif 4 Subhead Light" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="32"/> + </location> + </instance> + <instance name="Source Serif 4 Subhead" familyname="Source Serif 4" stylename="Subhead" filename="Source Serif 4-Subhead.ttf" postscriptfontname="SourceSerif4Roman-SubheadRegular" stylemapfamilyname="Source Serif 4 Subhead" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="32"/> + </location> + </instance> + <instance name="Source Serif 4 Subhead Semibold" familyname="Source Serif 4" stylename="Subhead Semibold" filename="Source Serif 4-Subhead Semibold.ttf" postscriptfontname="SourceSerif4Roman-SubheadSemibold" stylemapfamilyname="Source Serif 4 Subhead Semibold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="32"/> + </location> + </instance> + <instance name="Source Serif 4 Subhead Bold" familyname="Source Serif 4" stylename="Subhead Bold" filename="Source Serif 4-Subhead Bold.ttf" postscriptfontname="SourceSerif4Roman-SubheadBold" stylemapfamilyname="Source Serif 4 Subhead Bold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="32"/> + </location> + </instance> + <instance name="Source Serif 4 Subhead Black" familyname="Source Serif 4" stylename="Subhead Black" filename="Source Serif 4-Subhead Black.ttf" postscriptfontname="SourceSerif4Roman-SubheadBlack" stylemapfamilyname="Source Serif 4 Subhead Black" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="32"/> + </location> + </instance> + <instance name="Source Serif 4 Display ExtraLight" familyname="Source Serif 4" stylename="Display ExtraLight" filename="Source Serif 4-Display ExtraLight.ttf" postscriptfontname="SourceSerif4Roman-DisplayExtraLight" stylemapfamilyname="Source Serif 4 Display ExtraLight" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="60"/> + </location> + </instance> + <instance name="Source Serif 4 Display Light" familyname="Source Serif 4" stylename="Display Light" filename="Source Serif 4-Display Light.ttf" postscriptfontname="SourceSerif4Roman-DisplayLight" stylemapfamilyname="Source Serif 4 Display Light" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="60"/> + </location> + </instance> + <instance name="Source Serif 4 Display" familyname="Source Serif 4" stylename="Display" filename="Source Serif 4-Display.ttf" postscriptfontname="SourceSerif4Roman-DisplayRegular" stylemapfamilyname="Source Serif 4 Display" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="60"/> + </location> + </instance> + <instance name="Source Serif 4 Display Semibold" familyname="Source Serif 4" stylename="Display Semibold" filename="Source Serif 4-Display Semibold.ttf" postscriptfontname="SourceSerif4Roman-DisplaySemibold" stylemapfamilyname="Source Serif 4 Display Semibold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="60"/> + </location> + </instance> + <instance name="Source Serif 4 Display Bold" familyname="Source Serif 4" stylename="Display Bold" filename="Source Serif 4-Display Bold.ttf" postscriptfontname="SourceSerif4Roman-DisplayBold" stylemapfamilyname="Source Serif 4 Display Bold" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="60"/> + </location> + </instance> + <instance name="Source Serif 4 Display Black" familyname="Source Serif 4" stylename="Display Black" filename="Source Serif 4-Display Black.ttf" postscriptfontname="SourceSerif4Roman-DisplayBlack" stylemapfamilyname="Source Serif 4 Display Black" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="60"/> + </location> + </instance> + </instances> +</designspace> diff --git a/Tests/designspaceLib/data/split_output/test_v5_sourceserif_italic_1.0.designspace b/Tests/designspaceLib/data/split_output/test_v5_sourceserif_italic_1.0.designspace new file mode 100644 index 00000000..e1ef12f6 --- /dev/null +++ b/Tests/designspaceLib/data/split_output/test_v5_sourceserif_italic_1.0.designspace @@ -0,0 +1,274 @@ +<?xml version='1.0' encoding='UTF-8'?> +<designspace format="5.0"> + <axes> + <axis tag="wght" name="weight" minimum="200" maximum="900" default="400"> + <map input="200" output="0"/> + <map input="300" output="145"/> + <map input="400" output="394"/> + <map input="600" output="594"/> + <map input="700" output="823"/> + <map input="900" output="1000"/> + </axis> + <axis tag="opsz" name="optical" minimum="8" maximum="60" default="20"/> + </axes> + <sources> + <source filename="../caption/master_0/SourceSerif-Italic_c0.ufo"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="8"/> + </location> + </source> + <source filename="../caption/master_1/SourceSerif-Italic_c1.ufo"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="8"/> + </location> + </source> + <source filename="../caption/master_2/SourceSerif-Italic_c2.ufo"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="8"/> + </location> + </source> + <source filename="../text/master_0/SourceSerif-Italic_0.ufo"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="20"/> + </location> + </source> + <source filename="../text/master_1/SourceSerif-Italic_1.ufo"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="20"/> + </location> + </source> + <source filename="../text/master_2/SourceSerif-Italic_2.ufo"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="20"/> + </location> + </source> + <source filename="../display/master_0/SourceSerif-Italic_d0.ufo"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="60"/> + </location> + </source> + <source filename="../display/master_1/SourceSerif-Italic_d1.ufo"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="60"/> + </location> + </source> + <source filename="../display/master_2/SourceSerif-Italic_d2.ufo"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="60"/> + </location> + </source> + </sources> + <variable-fonts> + <variable-font name="SourceSerif4Variable-Italic"> + <axis-subsets> + <axis-subset name="weight"/> + <axis-subset name="optical"/> + </axis-subsets> + <lib> + <dict> + <key>public.skipExportGlyphs</key> + <array> + <string>caron.alt</string> + <string>commabelowcmb.alt</string> + <string>f.liga</string> + <string>f.ligalong</string> + <string>tonos.cap</string> + <string>dieresiscmb.tight</string> + <string>turkicdsccmb</string> + </array> + </dict> + </lib> + </variable-font> + </variable-fonts> + <instances> + <instance name="Source Serif 4 Caption ExtraLight Italic" familyname="Source Serif 4" stylename="Caption ExtraLight Italic" filename="Source Serif 4-Caption ExtraLight Italic.ttf" postscriptfontname="SourceSerif4Italic-CaptionExtraLight" stylemapfamilyname="Source Serif 4 Caption ExtraLight Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="8"/> + </location> + </instance> + <instance name="Source Serif 4 Caption Light Italic" familyname="Source Serif 4" stylename="Caption Light Italic" filename="Source Serif 4-Caption Light Italic.ttf" postscriptfontname="SourceSerif4Italic-CaptionLight" stylemapfamilyname="Source Serif 4 Caption Light Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="8"/> + </location> + </instance> + <instance name="Source Serif 4 Caption Italic" familyname="Source Serif 4" stylename="Caption Italic" filename="Source Serif 4-Caption Italic.ttf" postscriptfontname="SourceSerif4Italic-CaptionRegular" stylemapfamilyname="Source Serif 4 Caption Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="8"/> + </location> + </instance> + <instance name="Source Serif 4 Caption Semibold Italic" familyname="Source Serif 4" stylename="Caption Semibold Italic" filename="Source Serif 4-Caption Semibold Italic.ttf" postscriptfontname="SourceSerif4Italic-CaptionSemibold" stylemapfamilyname="Source Serif 4 Caption Semibold Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="8"/> + </location> + </instance> + <instance name="Source Serif 4 Caption Bold Italic" familyname="Source Serif 4" stylename="Caption Bold Italic" filename="Source Serif 4-Caption Bold Italic.ttf" postscriptfontname="SourceSerif4Italic-CaptionBold" stylemapfamilyname="Source Serif 4 Caption Bold Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="8"/> + </location> + </instance> + <instance name="Source Serif 4 Caption Black Italic" familyname="Source Serif 4" stylename="Caption Black Italic" filename="Source Serif 4-Caption Black Italic.ttf" postscriptfontname="SourceSerif4Italic-CaptionBlack" stylemapfamilyname="Source Serif 4 Caption Black Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="8"/> + </location> + </instance> + <instance name="Source Serif 4 SmText ExtraLight Italic" familyname="Source Serif 4" stylename="SmText ExtraLight Italic" filename="Source Serif 4-SmText ExtraLight Italic.ttf" postscriptfontname="SourceSerif4Italic-SmTextExtraLight" stylemapfamilyname="Source Serif 4 SmallText ExtraLight Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="16"/> + </location> + </instance> + <instance name="Source Serif 4 SmText Light Italic" familyname="Source Serif 4" stylename="SmText Light Italic" filename="Source Serif 4-SmText Light Italic.ttf" postscriptfontname="SourceSerif4Italic-SmTextLight" stylemapfamilyname="Source Serif 4 SmallText Light Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="16"/> + </location> + </instance> + <instance name="Source Serif 4 SmText Italic" familyname="Source Serif 4" stylename="SmText Italic" filename="Source Serif 4-SmText Italic.ttf" postscriptfontname="SourceSerif4Italic-SmTextRegular" stylemapfamilyname="Source Serif 4 SmallText Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="16"/> + </location> + </instance> + <instance name="Source Serif 4 SmText Semibold Italic" familyname="Source Serif 4" stylename="SmText Semibold Italic" filename="Source Serif 4-SmText Semibold Italic.ttf" postscriptfontname="SourceSerif4Italic-SmTextSemibold" stylemapfamilyname="Source Serif 4 SmallText Semibold Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="16"/> + </location> + </instance> + <instance name="Source Serif 4 SmText Bold Italic" familyname="Source Serif 4" stylename="SmText Bold Italic" filename="Source Serif 4-SmText Bold Italic.ttf" postscriptfontname="SourceSerif4Italic-SmTextBold" stylemapfamilyname="Source Serif 4 SmallText Bold Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="16"/> + </location> + </instance> + <instance name="Source Serif 4 SmText Black Italic" familyname="Source Serif 4" stylename="SmText Black Italic" filename="Source Serif 4-SmText Black Italic.ttf" postscriptfontname="SourceSerif4Italic-SmTextBlack" stylemapfamilyname="Source Serif 4 SmallText Black Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="16"/> + </location> + </instance> + <instance name="Source Serif 4 ExtraLight Italic" familyname="Source Serif 4" stylename="ExtraLight Italic" filename="Source Serif 4-ExtraLight Italic.ttf" postscriptfontname="SourceSerif4Italic-ExtraLight" stylemapfamilyname="Source Serif 4 ExtraLight Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="20"/> + </location> + </instance> + <instance name="Source Serif 4 Light Italic" familyname="Source Serif 4" stylename="Light Italic" filename="Source Serif 4-Light Italic.ttf" postscriptfontname="SourceSerif4Italic-Light" stylemapfamilyname="Source Serif 4 Light Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="20"/> + </location> + </instance> + <instance name="Source Serif 4 Italic" familyname="Source Serif 4" stylename="Italic" filename="Source Serif 4-Italic.ttf" postscriptfontname="SourceSerif4Italic-Regular" stylemapfamilyname="Source Serif 4 Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="20"/> + </location> + </instance> + <instance name="Source Serif 4 Semibold Italic" familyname="Source Serif 4" stylename="Semibold Italic" filename="Source Serif 4-Semibold Italic.ttf" postscriptfontname="SourceSerif4Italic-Semibold" stylemapfamilyname="Source Serif 4 Semibold Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="20"/> + </location> + </instance> + <instance name="Source Serif 4 Bold Italic" familyname="Source Serif 4" stylename="Bold Italic" filename="Source Serif 4-Bold Italic.ttf" postscriptfontname="SourceSerif4Italic-Bold" stylemapfamilyname="Source Serif 4 Bold Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="20"/> + </location> + </instance> + <instance name="Source Serif 4 Black Italic" familyname="Source Serif 4" stylename="Black Italic" filename="Source Serif 4-Black Italic.ttf" postscriptfontname="SourceSerif4Italic-Black" stylemapfamilyname="Source Serif 4 Black Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="20"/> + </location> + </instance> + <instance name="Source Serif 4 Subhead ExtraLight Italic" familyname="Source Serif 4" stylename="Subhead ExtraLight Italic" filename="Source Serif 4-Subhead ExtraLight Italic.ttf" postscriptfontname="SourceSerif4Italic-SubheadExtraLight" stylemapfamilyname="Source Serif 4 Subhead ExtraLight Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="32"/> + </location> + </instance> + <instance name="Source Serif 4 Subhead Light Italic" familyname="Source Serif 4" stylename="Subhead Light Italic" filename="Source Serif 4-Subhead Light Italic.ttf" postscriptfontname="SourceSerif4Italic-SubheadLight" stylemapfamilyname="Source Serif 4 Subhead Light Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="32"/> + </location> + </instance> + <instance name="Source Serif 4 Subhead Italic" familyname="Source Serif 4" stylename="Subhead Italic" filename="Source Serif 4-Subhead Italic.ttf" postscriptfontname="SourceSerif4Italic-SubheadRegular" stylemapfamilyname="Source Serif 4 Subhead Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="32"/> + </location> + </instance> + <instance name="Source Serif 4 Subhead Semibold Italic" familyname="Source Serif 4" stylename="Subhead Semibold Italic" filename="Source Serif 4-Subhead Semibold Italic.ttf" postscriptfontname="SourceSerif4Italic-SubheadSemibold" stylemapfamilyname="Source Serif 4 Subhead Semibold Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="32"/> + </location> + </instance> + <instance name="Source Serif 4 Subhead Bold Italic" familyname="Source Serif 4" stylename="Subhead Bold Italic" filename="Source Serif 4-Subhead Bold Italic.ttf" postscriptfontname="SourceSerif4Italic-SubheadBold" stylemapfamilyname="Source Serif 4 Subhead Bold Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="32"/> + </location> + </instance> + <instance name="Source Serif 4 Subhead Black Italic" familyname="Source Serif 4" stylename="Subhead Black Italic" filename="Source Serif 4-Subhead Black Italic.ttf" postscriptfontname="SourceSerif4Italic-SubheadBlack" stylemapfamilyname="Source Serif 4 Subhead Black Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="32"/> + </location> + </instance> + <instance name="Source Serif 4 Display ExtraLight Italic" familyname="Source Serif 4" stylename="Display ExtraLight Italic" filename="Source Serif 4-Display ExtraLight Italic.ttf" postscriptfontname="SourceSerif4Italic-DisplayExtraLight" stylemapfamilyname="Source Serif 4 Display ExtraLight Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="60"/> + </location> + </instance> + <instance name="Source Serif 4 Display Light Italic" familyname="Source Serif 4" stylename="Display Light Italic" filename="Source Serif 4-Display Light Italic.ttf" postscriptfontname="SourceSerif4Italic-DisplayLight" stylemapfamilyname="Source Serif 4 Display Light Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="60"/> + </location> + </instance> + <instance name="Source Serif 4 Display Italic" familyname="Source Serif 4" stylename="Display Italic" filename="Source Serif 4-Display Italic.ttf" postscriptfontname="SourceSerif4Italic-DisplayRegular" stylemapfamilyname="Source Serif 4 Display Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="60"/> + </location> + </instance> + <instance name="Source Serif 4 Display Semibold Italic" familyname="Source Serif 4" stylename="Display Semibold Italic" filename="Source Serif 4-Display Semibold Italic.ttf" postscriptfontname="SourceSerif4Italic-DisplaySemibold" stylemapfamilyname="Source Serif 4 Display Semibold Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="60"/> + </location> + </instance> + <instance name="Source Serif 4 Display Bold Italic" familyname="Source Serif 4" stylename="Display Bold Italic" filename="Source Serif 4-Display Bold Italic.ttf" postscriptfontname="SourceSerif4Italic-DisplayBold" stylemapfamilyname="Source Serif 4 Display Bold Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="60"/> + </location> + </instance> + <instance name="Source Serif 4 Display Black Italic" familyname="Source Serif 4" stylename="Display Black Italic" filename="Source Serif 4-Display Black Italic.ttf" postscriptfontname="SourceSerif4Italic-DisplayBlack" stylemapfamilyname="Source Serif 4 Display Black Italic" stylemapstylename="regular"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="60"/> + </location> + </instance> + </instances> +</designspace> diff --git a/Tests/designspaceLib/data/test.designspace b/Tests/designspaceLib/data/test_v4_original.designspace index e12f1568..d3b46c7f 100644 --- a/Tests/designspaceLib/data/test.designspace +++ b/Tests/designspaceLib/data/test_v4_original.designspace @@ -1,5 +1,7 @@ <?xml version='1.0' encoding='UTF-8'?> <designspace format="4.1"> + <!-- NOTE: this file is kept at format 4, to check that round-tripping it + doesn't upgrade the format. --> <axes> <axis tag="wght" name="weight" minimum="0" maximum="1000" default="0"> <labelname xml:lang="en">Wéíght</labelname> @@ -50,6 +52,13 @@ </sources> <instances> <instance name="instance.ufo1" familyname="InstanceFamilyName" stylename="InstanceStyleName" filename="instances/instanceTest1.ufo" postscriptfontname="InstancePostscriptName" stylemapfamilyname="InstanceStyleMapFamilyName" stylemapstylename="InstanceStyleMapStyleName"> + <stylename xml:lang="fr">Demigras</stylename> + <stylename xml:lang="ja">半ば</stylename> + <familyname xml:lang="fr">Montserrat</familyname> + <familyname xml:lang="ja">モンセラート</familyname> + <stylemapstylename xml:lang="de">Standard</stylemapstylename> + <stylemapfamilyname xml:lang="de">Montserrat Halbfett</stylemapfamilyname> + <stylemapfamilyname xml:lang="ja">モンセラート SemiBold</stylemapfamilyname> <location> <dimension name="weight" xvalue="500"/> <dimension name="width" xvalue="20"/> diff --git a/Tests/designspaceLib/data/test_v5.designspace b/Tests/designspaceLib/data/test_v5.designspace new file mode 100644 index 00000000..2f611b49 --- /dev/null +++ b/Tests/designspaceLib/data/test_v5.designspace @@ -0,0 +1,294 @@ +<?xml version='1.0' encoding='UTF-8'?> +<designspace format="5.0"> + <axes elidedfallbackname="Regular"> + <axis tag="wght" name="weight" minimum="200" maximum="1000" default="200"> + <labelname xml:lang="en">Wéíght</labelname> + <labelname xml:lang="fa-IR">قطر</labelname> + <map input="200" output="0"/> + <map input="300" output="100"/> + <map input="400" output="368"/> + <map input="600" output="600"/> + <map input="700" output="824"/> + <map input="900" output="1000"/> + <!-- All axes provide STAT information with the "labels" element. --> + <labels> + <label uservalue="200" userminimum="200" usermaximum="250" name="Extra Light"> + <labelname xml:lang="de">Extraleicht</labelname> + <labelname xml:lang="fr">Extra léger</labelname> + </label> + <label uservalue="300" userminimum="250" usermaximum="350" name="Light"/> + <label uservalue="400" userminimum="350" usermaximum="450" name="Regular" elidable="true"/> + <label uservalue="600" userminimum="450" usermaximum="650" name="Semi Bold"/> + <label uservalue="700" userminimum="650" usermaximum="850" name="Bold"/> + <label uservalue="900" userminimum="850" usermaximum="900" name="Black"/> + </labels> + </axis> + + <axis tag="wdth" name="width" minimum="50" maximum="150" default="100" hidden="1"> + <labelname xml:lang="fr">Chasse</labelname> + <map input="50" output="10"/> + <map input="100" output="20"/> + <map input="125" output="66"/> + <map input="150" output="990"/> + <labels ordering="1"> + <label uservalue="50" name="Condensed"/> + <label uservalue="100" name="Normal" elidable="true" oldersibling="true"/> + <label uservalue="125" name="Wide"/> + <!-- Allow specifying only one end of the range, the other is assumed to + be infinity as does otlLib buildStatTable --> + <label uservalue="150" userminimum="150" name="Extra Wide"/> + </labels> + </axis> + + <!-- + Discrete axes provide a list of discrete values. + No interpolation is allowed between these. + --> + <axis tag="ital" name="Italic" values="0 1" default="0"> + <labels> + <!-- Discrete axes also provide STAT information. --> + <label uservalue="0" name="Roman" elidable="true" linkeduservalue="1"/> + <label uservalue="1" name="Italic"/> + </labels> + </axis> + </axes> + + <!-- Freestanding labels are analogues of STAT format 4 entries. + They give names to freestyle locations. --> + <labels> + <label name="Some Style"> + <labelname xml:lang="fr">Un Style</labelname> + <location> + <dimension name="weight" uservalue="300"/> + <dimension name="width" uservalue="50"/> + <dimension name="Italic" uservalue="0"/> + </location> + </label> + <label name="Other"> + <location> + <dimension name="weight" uservalue="700"/> + <dimension name="width" uservalue="100"/> + <dimension name="Italic" uservalue="1"/> + </location> + </label> + </labels> + + <rules processing="last"> + <rule name="named.rule.1"> + <conditionset> + <condition name="axisName_a" minimum="0" maximum="1"/> + <condition name="axisName_b" minimum="2" maximum="3"/> + </conditionset> + <sub name="a" with="a.alt"/> + </rule> + </rules> + + <sources> + <source filename="masters/masterTest1.ufo" name="master.ufo1" familyname="MasterFamilyName" stylename="MasterStyleNameOne"> + <familyname xml:lang="fr">Montserrat</familyname> + <familyname xml:lang="ja">モンセラート</familyname> + <lib copy="1"/> + <features copy="1"/> + <info copy="1"/> + <glyph name="A" mute="1"/> + <glyph name="Z" mute="1"/> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="width" xvalue="20"/> + </location> + </source> + <source filename="masters/masterTest2.ufo" name="master.ufo2" familyname="MasterFamilyName" stylename="MasterStyleNameTwo"> + <kerning mute="1"/> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="width" xvalue="20"/> + </location> + </source> + <source filename="masters/masterTest2.ufo" name="master.ufo2" familyname="MasterFamilyName" stylename="Supports" layer="supports"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="width" xvalue="20"/> + </location> + </source> + </sources> + + <variable-fonts> + <!-- + If this element is present, all output targets must be listed within it. + If it is not present, the full Designspace is the output, like in version 4.x. + + Continuous axes can be included either: + * in full, + * or only on a reduced interval (different minimum-maximum), + * or only at 1 discrete location + Dicrete axes cannot be included in full, and we must specify a value + (or the compiler should assume the default value). + --> + <variable-font name="Test_WghtWdth" filename="Test_WghtWdth_different_from_name.ttf"> + <!-- This one is the Roman (default location along ital), + with full range for the Weight axis. --> + <axis-subsets> + <axis-subset name="Weight"/> + <axis-subset name="Width"/> + </axis-subsets> + <lib> + <dict> + <key>com.vtt.source</key> + <string>sources/vtt/Test_WghtWdth.vtt</string> + </dict> + </lib> + </variable-font> + <variable-font name="Test_Wght"> + <!-- This one is the Roman (default location along ital), + with full range for the Weight axis. --> + <axis-subsets> + <axis-subset name="Weight"/> + </axis-subsets> + <lib> + <dict> + <key>com.vtt.source</key> + <string>sources/vtt/Test_Wght.vtt</string> + </dict> + </lib> + </variable-font> + <variable-font name="TestCd_Wght"> + <!-- This one is the Roman (default location along ital), + with full range for the Weight axis. --> + <axis-subsets> + <axis-subset name="Weight"/> + <axis-subset name="Width" uservalue="0"/> + </axis-subsets> + </variable-font> + <variable-font name="TestWd_Wght"> + <!-- This one is the Roman (default location along ital), + with full range for the Weight axis. --> + <axis-subsets> + <axis-subset name="Weight"/> + <axis-subset name="Width" uservalue="1000"/> + </axis-subsets> + </variable-font> + <variable-font name="TestItalic_Wght"> + <!-- This one is the Italic, with full range for the Weight axis. --> + <axis-subsets> + <axis-subset name="Weight"/> + <axis-subset name="Italic" uservalue="1"/> + </axis-subsets> + </variable-font> + <variable-font name="TestRB_Wght"> + <!-- As an example, this would be the Roman with a reduced range. --> + <axis-subsets> + <axis-subset name="Weight" userminimum="400" usermaximum="700" userdefault="400"/> + <axis-subset name="Italic" uservalue="0"/> + </axis-subsets> + </variable-font> + </variable-fonts> + + <instances> + <instance name="instance.ufo1" familyname="InstanceFamilyName" stylename="InstanceStyleName" filename="instances/instanceTest1.ufo" postscriptfontname="InstancePostscriptName" stylemapfamilyname="InstanceStyleMapFamilyName" stylemapstylename="InstanceStyleMapStyleName"> + <stylename xml:lang="fr">Demigras</stylename> + <stylename xml:lang="ja">半ば</stylename> + <familyname xml:lang="fr">Montserrat</familyname> + <familyname xml:lang="ja">モンセラート</familyname> + <stylemapstylename xml:lang="de">Standard</stylemapstylename> + <stylemapfamilyname xml:lang="de">Montserrat Halbfett</stylemapfamilyname> + <stylemapfamilyname xml:lang="ja">モンセラート SemiBold</stylemapfamilyname> + <location> + <dimension name="weight" xvalue="500"/> + <dimension name="width" xvalue="20"/> + </location> + + <!-- The following elements are deprecated in v5.0. They can still be + read, but they won't be written out again (they don't roundtrip). --> + <!-- ROUNDTRIP_TEST_REMOVE_ME_BEGIN --> + <glyphs> + <glyph mute="1" unicode="0x123 0x124 0x125" name="arrow"/> + </glyphs> + <kerning/> + <info/> + <!-- ROUNDTRIP_TEST_REMOVE_ME_END --> + + <lib> + <dict> + <key>com.coolDesignspaceApp.binaryData</key> + <data> + PGJpbmFyeSBndW5rPg== + </data> + <key>com.coolDesignspaceApp.specimenText</key> + <string>Hamburgerwhatever</string> + </dict> + </lib> + </instance> + <instance name="instance.ufo2" familyname="InstanceFamilyName" stylename="InstanceStyleName" filename="instances/instanceTest2.ufo" postscriptfontname="InstancePostscriptName" stylemapfamilyname="InstanceStyleMapFamilyName" stylemapstylename="InstanceStyleMapStyleName"> + <location> + <dimension name="weight" xvalue="500"/> + <dimension name="width" xvalue="400" yvalue="300"/> + </location> + <!-- ROUNDTRIP_TEST_REMOVE_ME_BEGIN --> + <glyphs> + <glyph unicode="0x65 0xc9 0x12d" name="arrow"> + <location> + <dimension name="weight" xvalue="120"/> + <dimension name="width" xvalue="100"/> + </location> + <note>A note about this glyph</note> + <masters> + <master glyphname="BB" source="master.ufo1"> + <location> + <dimension name="weight" xvalue="20"/> + <dimension name="width" xvalue="20"/> + </location> + </master> + <master glyphname="CC" source="master.ufo2"> + <location> + <dimension name="weight" xvalue="900"/> + <dimension name="width" xvalue="900"/> + </location> + </master> + </masters> + </glyph> + <glyph name="arrow2"/> + </glyphs> + <kerning/> + <info/> + <!-- ROUNDTRIP_TEST_REMOVE_ME_END --> + </instance> + + <!-- + These instances will derive all their data from the data above. + + Instances can specify their location either: + - using the name of a location label + - with design coordinates (xvalue="") + - with user coordinates (uservalue="") + - with a mix of both coordinate systems + --> + <instance location="asdf"/> + <instance> + <location> + <dimension name="weight" xvalue="600"/> + <dimension name="width" xvalue="401" yvalue="420"/> + </location> + </instance> + <instance> + <location> + <dimension name="weight" xvalue="10"/> + <dimension name="width" uservalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance> + <location> + <dimension name="weight" uservalue="300"/> + <dimension name="width" uservalue="130"/> + <dimension name="Italic" uservalue="1"/> + </location> + </instance> + </instances> + + <lib> + <dict> + <key>com.coolDesignspaceApp.previewSize</key> + <integer>30</integer> + </dict> + </lib> +</designspace> diff --git a/Tests/designspaceLib/data/test_v5_MutatorSans_and_Serif.designspace b/Tests/designspaceLib/data/test_v5_MutatorSans_and_Serif.designspace new file mode 100644 index 00000000..d0fbb3d2 --- /dev/null +++ b/Tests/designspaceLib/data/test_v5_MutatorSans_and_Serif.designspace @@ -0,0 +1,206 @@ +<?xml version='1.0' encoding='UTF-8'?> +<designspace format="5.0"> + <axes elidedfallbackname="Regular"> + <axis tag="SRIF" name="serif" values="0 1" default="0"> + <labels> + <label uservalue="0" name="Sans"/> + <label uservalue="1" name="Serif"/> + </labels> + </axis> + <axis tag="wght" name="weight" minimum="300" maximum="700" default="300"> + <map input="300" output="0"/> + <map input="500" output="500"/> + <map input="700" output="1000"/> + <labels> + <label uservalue="300" userminimum="300" usermaximum="400" name="Light"/> + <label uservalue="500" userminimum="400" usermaximum="600" name="Medium"/> + <label uservalue="700" userminimum="600" usermaximum="700" name="Bold"/> + </labels> + </axis> + <axis tag="wdth" name="width" minimum="50" maximum="200" default="50"> + <map input="50" output="0"/> + <map input="100" output="500"/> + <map input="200" output="1000"/> + <labels> + <label uservalue="50" userminimum="50" usermaximum="75" name="Condensed"/> + <label uservalue="100" userminimum="75" usermaximum="125" name="Normal" elidable="true"/> + <label uservalue="200" userminimum="125" usermaximum="200" name="Extended"/> + </labels> + </axis> + </axes> + <labels> + <label name="S1"> + <location> + <dimension name="width" uservalue="158.9044"/> + <dimension name="weight" uservalue="610.2436"/> + </location> + </label> + <label name="S2"> + <location> + <dimension name="width" uservalue="159.1956"/> + <dimension name="weight" uservalue="642.2196"/> + </location> + </label> + </labels> + <rules> + <rule name="fold_I_serifs"> + <conditionset> + <condition name="width" minimum="0" maximum="328"/> + <condition name="serif" minimum="0" maximum="0"/> + </conditionset> + <sub name="I" with="I.narrow"/> + </rule> + <rule name="fold_S_terminals"> + <conditionset> + <condition name="width" minimum="0" maximum="1000"/> + <condition name="weight" minimum="0" maximum="500"/> + <condition name="serif" minimum="0" maximum="0.5"/> + </conditionset> + <sub name="S" with="S.closed"/> + </rule> + </rules> + <sources> + <source filename="MutatorSansLightCondensed.ufo" name="master.MutatorMathTest.LightCondensed.0" familyname="MutatorMathTest" stylename="LightCondensed"> + <location> + <dimension name="width" xvalue="0"/> + <dimension name="weight" xvalue="0"/> + </location> + </source> + <source filename="MutatorSansBoldCondensed.ufo" name="master.MutatorMathTest.BoldCondensed.1" familyname="MutatorMathTest" stylename="BoldCondensed"> + <location> + <dimension name="width" xvalue="0"/> + <dimension name="weight" xvalue="1000"/> + </location> + </source> + <source filename="MutatorSansLightWide.ufo" name="master.MutatorMathTest.LightWide.2" familyname="MutatorMathTest" stylename="LightWide"> + <location> + <dimension name="width" xvalue="1000"/> + <dimension name="weight" xvalue="0"/> + </location> + </source> + <source filename="MutatorSansBoldWide.ufo" name="master.MutatorMathTest.BoldWide.3" familyname="MutatorMathTest" stylename="BoldWide"> + <location> + <dimension name="width" xvalue="1000"/> + <dimension name="weight" xvalue="1000"/> + </location> + </source> + <source filename="MutatorSansLightCondensed.ufo" name="support.crossbar" layer="support.crossbar"> + <location> + <dimension name="width" xvalue="0"/> + <dimension name="weight" xvalue="700"/> + </location> + </source> + <source filename="MutatorSansLightCondensed.ufo" name="support.S.wide" layer="support.S.wide"> + <location> + <dimension name="width" xvalue="1000"/> + <dimension name="weight" xvalue="700"/> + </location> + </source> + <source filename="MutatorSansLightCondensed.ufo" name="support.S.middle" layer="support.S.middle"> + <location> + <dimension name="width" xvalue="569.078000"/> + <dimension name="weight" xvalue="700"/> + </location> + </source> + <source filename="MutatorSerifLightCondensed.ufo" familyname="MutatorMathTest" stylename="SerifLightCondensed"> + <location> + <dimension name="width" xvalue="0"/> + <dimension name="weight" xvalue="0"/> + <dimension name="serif" xvalue="1"/> + </location> + </source> + <source filename="MutatorSerifLightWide.ufo" familyname="MutatorMathTest" stylename="SerifLightWide"> + <location> + <dimension name="width" xvalue="1000"/> + <dimension name="weight" xvalue="0"/> + <dimension name="serif" xvalue="1"/> + </location> + </source> + </sources> + <variable-fonts> + <variable-font name="MutatorSansVariable_Weight_Width"> + <axis-subsets> + <axis-subset name="weight"/> + <axis-subset name="width"/> + </axis-subsets> + </variable-font> + <variable-font name="MutatorSansVariable_Weight"> + <axis-subsets> + <axis-subset name="weight"/> + </axis-subsets> + </variable-font> + <variable-font name="MutatorSansVariable_Width"> + <axis-subsets> + <axis-subset name="width"/> + </axis-subsets> + </variable-font> + <variable-font name="MutatorSerifVariable_Width"> + <axis-subsets> + <axis-subset name="serif" uservalue="1"/> + <axis-subset name="width"/> + </axis-subsets> + </variable-font> + </variable-fonts> + <instances> + <instance> + <location> + <dimension name="width" xvalue="0"/> + <dimension name="weight" xvalue="0"/> + </location> + </instance> + <instance> + <location> + <dimension name="width" xvalue="0"/> + <dimension name="weight" xvalue="1000"/> + </location> + </instance> + <instance> + <location> + <dimension name="width" xvalue="1000"/> + <dimension name="weight" xvalue="0"/> + </location> + </instance> + <instance> + <location> + <dimension name="width" xvalue="1000"/> + <dimension name="weight" xvalue="1000"/> + </location> + </instance> + <instance> + <location> + <dimension name="width" xvalue="327"/> + <dimension name="weight" xvalue="500"/> + </location> + </instance> + <instance> + <location> + <dimension name="width" xvalue="327"/> + <dimension name="weight" xvalue="500"/> + </location> + </instance> + <instance> + <location> + <dimension name="width" xvalue="569.078"/> + <dimension name="weight" xvalue="1000"/> + </location> + </instance> + <instance> + <location> + <dimension name="width" xvalue="1000"/> + <dimension name="weight" xvalue="500"/> + </location> + </instance> + <instance> + <location> + <dimension name="width" xvalue="0"/> + <dimension name="serif" xvalue="0"/> + </location> + </instance> + <instance> + <location> + <dimension name="width" xvalue="0"/> + <dimension name="serif" xvalue="1"/> + </location> + </instance> + </instances> +</designspace> diff --git a/Tests/designspaceLib/data/test_v5_aktiv.designspace b/Tests/designspaceLib/data/test_v5_aktiv.designspace new file mode 100644 index 00000000..32dfd1ae --- /dev/null +++ b/Tests/designspaceLib/data/test_v5_aktiv.designspace @@ -0,0 +1,621 @@ +<?xml version='1.0' encoding='UTF-8'?> +<designspace format="5.0"> + <axes> + <axis tag="wght" name="Weight" minimum="100" maximum="900" default="400"> + <map input="100" output="22"/> + <map input="200" output="38"/> + <map input="300" output="57"/> + <map input="400" output="84"/> + <map input="500" output="98"/> + <map input="600" output="115"/> + <map input="700" output="133"/> + <map input="800" output="158"/> + <map input="900" output="185"/> + <labels ordering="1"> + <label uservalue="100" name="Hair"/> + <label uservalue="200" name="Thin"/> + <label uservalue="300" name="Light"/> + <label uservalue="400" name="Regular" elidable="true" linkeduservalue="700"/> + <label uservalue="500" name="Medium"/> + <label uservalue="600" name="SemiBold"/> + <label uservalue="700" name="Bold"/> + <label uservalue="800" name="XBold"/> + <label uservalue="900" name="Black"/> + </labels> + </axis> + <axis tag="wdth" name="Width" minimum="75" maximum="125" default="100"> + <labels ordering="0"> + <label uservalue="75" name="Cd"/> + <label uservalue="100" name="Normal" elidable="true"/> + <label uservalue="125" name="Ex"/> + </labels> + </axis> + <axis tag="ital" name="Italic" minimum="0" maximum="1" default="0"> + <labels ordering="2"> + <label uservalue="0" name="Upright" elidable="true" linkeduservalue="1"/> + <label uservalue="1" name="Italic"/> + </labels> + </axis> + </axes> + + <rules processing="last"> + <rule name="BRACKET.CYR"> + <conditionset> + <condition name="Italic" minimum="0.1" maximum="1"/> + </conditionset> + <sub name="ghe.loclSRB" with="ghe.ital.loclSRB"/> + <sub name="ghe.loclMKD" with="ghe.ital.loclMKD"/> + <sub name="de.loclMKDSRB" with="de.ital.loclMKDSRB"/> + <sub name="pe.loclMKDSRB" with="pe.ital.loclMKDSRB"/> + <sub name="te.loclMKDSRB" with="te.ital.loclMKDSRB"/> + <sub name="gje.loclMKD" with="gje.ital.loclMKD"/> + <sub name="sha.loclMKDSRB" with="sha.ital.loclMKDSRB"/> + </rule> + <rule name="BRACKET.116.185"> + <conditionset> + <condition name="Weight" minimum="116" maximum="185"/> + <condition name="Width" minimum="75" maximum="97.5"/> + </conditionset> + <sub name="cent" with="cent.BRACKET.130"/> + <sub name="dollar" with="dollar.BRACKET.130"/> + </rule> + </rules> + + <sources> + <source filename="AktivGroteskCd_Hair.ufo" name="Aktiv Grotesk Cd Hair"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="AktivGroteskCd_HairIt.ufo" name="Aktiv Grotesk Cd Hair Italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="AktivGrotesk_Hair.ufo" name="Aktiv Grotesk Hair"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="AktivGrotesk_HairIt.ufo" name="Aktiv Grotesk Hair Italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="AktivGroteskEx_Hair.ufo" name="Aktiv Grotesk Ex Hair"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="AktivGroteskEx_HairIt.ufo" name="Aktiv Grotesk Ex Hair Italic"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="AktivGroteskCd_Rg.ufo" name="Aktiv Grotesk Cd"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="AktivGroteskCd_It.ufo" name="Aktiv Grotesk Cd Italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="AktivGrotesk_Rg.ufo" name="Aktiv Grotesk Regular" familyname="Aktiv Grotesk"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="AktivGrotesk_Rg.ufo" name="Aktiv Grotesk Regular" layer="{126,100,0}"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="AktivGrotesk_It.ufo" name="Aktiv Grotesk Italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="AktivGrotesk_It.ufo" name="Aktiv Grotesk Italic {126,100,1}" layer="{126,100,1}"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="AktivGroteskEx_Rg.ufo" name="Aktiv Grotesk Ex"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="AktivGroteskEx_It.ufo" name="Aktiv Grotesk Ex Italic"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="AktivGroteskCd_Blk.ufo" name="Aktiv Grotesk Cd Black"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="AktivGroteskCd_BlkIt.ufo" name="Aktiv Grotesk Cd Black Italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="AktivGrotesk_Blk.ufo" name="Aktiv Grotesk Black"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="AktivGrotesk_BlkIt.ufo" name="Aktiv Grotesk Black Italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="AktivGroteskEx_Blk.ufo" name="Aktiv Grotesk Ex Black"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </source> + <source filename="AktivGroteskEx_BlkIt.ufo" name="Aktiv Grotesk Ex Black Italic"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + </sources> + + <variable-fonts> + <variable-font name="AktivGroteskVF_WghtWdthItal"> + <axis-subsets> + <axis-subset name="Weight"/> + <axis-subset name="Width"/> + <axis-subset name="Italic"/> + </axis-subsets> + </variable-font> + <variable-font name="AktivGroteskVF_WghtWdth"> + <axis-subsets> + <axis-subset name="Weight"/> + <axis-subset name="Width"/> + </axis-subsets> + </variable-font> + <variable-font name="AktivGroteskVF_Wght"> + <axis-subsets> + <axis-subset name="Weight"/> + </axis-subsets> + </variable-font> + <variable-font name="AktivGroteskVF_Italics_WghtWdth"> + <axis-subsets> + <axis-subset name="Weight"/> + <axis-subset name="Width"/> + <axis-subset name="Italic" uservalue="1"/> + </axis-subsets> + </variable-font> + <variable-font name="AktivGroteskVF_Italics_Wght"> + <axis-subsets> + <axis-subset name="Weight"/> + <axis-subset name="Italic" uservalue="1"/> + </axis-subsets> + </variable-font> + </variable-fonts> + + <instances> + <instance filename="instances/AktivGroteskCd_Hair.ufo"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance filename="instances/AktivGroteskCd_HairIt.ufo"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance filename="instances/AktivGrotesk_Hair.ufo"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance filename="instances/AktivGrotesk_HairIt.ufo"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance filename="instances/AktivGroteskEx_Hair.ufo"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance filename="instances/AktivGroteskEx_HairIt.ufo"> + <location> + <dimension name="Weight" xvalue="22"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance filename="instances/AktivGroteskCd_Th.ufo"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance filename="instances/AktivGroteskCd_ThIt.ufo"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance filename="instances/AktivGrotesk_Th.ufo"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance filename="instances/AktivGrotesk_ThIt.ufo"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance filename="instances/AktivGroteskEx_Th.ufo"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance filename="instances/AktivGroteskEx_ThIt.ufo"> + <location> + <dimension name="Weight" xvalue="38"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance filename="instances/AktivGroteskCd_Lt.ufo"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance filename="instances/AktivGroteskCd_LtIt.ufo"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance filename="instances/AktivGrotesk_Lt.ufo"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance filename="instances/AktivGrotesk_LtIt.ufo"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance filename="instances/AktivGroteskEx_Lt.ufo"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance filename="instances/AktivGroteskEx_LtIt.ufo"> + <location> + <dimension name="Weight" xvalue="57"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance filename="instances/AktivGroteskCd_Rg.ufo"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance filename="instances/AktivGroteskCd_It.ufo"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance filename="instances/AktivGrotesk_Rg.ufo"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance filename="instances/AktivGrotesk_It.ufo"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance filename="instances/AktivGroteskEx_Rg.ufo"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance filename="instances/AktivGroteskEx_It.ufo"> + <location> + <dimension name="Weight" xvalue="84"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance filename="instances/AktivGroteskCd_Md.ufo"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance filename="instances/AktivGroteskCd_MdIt.ufo"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance filename="instances/AktivGrotesk_Md.ufo"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance filename="instances/AktivGrotesk_MdIt.ufo"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance filename="instances/AktivGroteskEx_Md.ufo"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance filename="instances/AktivGroteskEx_MdIt.ufo"> + <location> + <dimension name="Weight" xvalue="98"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance filename="../build/instances/AktivGroteskCd_SBd.ufo"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance filename="../build/instances/AktivGroteskCd_SBdIt.ufo"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance filename="../build/instances/AktivGrotesk_SBd.ufo"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance filename="../build/instances/AktivGrotesk_SBdIt.ufo"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance filename="../build/instances/AktivGroteskEx_SBd.ufo"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance filename="../build/instances/AktivGroteskEx_SBdIt.ufo"> + <location> + <dimension name="Weight" xvalue="115"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance filename="instances/AktivGroteskCd_Bd.ufo"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance filename="instances/AktivGroteskCd_BdIt.ufo"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance filename="instances/AktivGrotesk_Bd.ufo"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance filename="instances/AktivGrotesk_BdIt.ufo"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance filename="instances/AktivGroteskEx_Bd.ufo"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance filename="instances/AktivGroteskEx_BdIt.ufo"> + <location> + <dimension name="Weight" xvalue="133"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance filename="instances/AktivGroteskCd_XBd.ufo"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance filename="instances/AktivGroteskCd_XBdIt.ufo"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance filename="instances/AktivGrotesk_XBd.ufo"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance filename="instances/AktivGrotesk_XBdIt.ufo"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance filename="instances/AktivGroteskEx_XBd.ufo"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance filename="instances/AktivGroteskEx_XBdIt.ufo"> + <location> + <dimension name="Weight" xvalue="158"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance filename="instances/AktivGroteskCd_Blk.ufo"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance filename="instances/AktivGroteskCd_BlkIt.ufo"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance filename="instances/AktivGrotesk_Blk.ufo"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance filename="instances/AktivGrotesk_BlkIt.ufo"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="100"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance filename="instances/AktivGroteskEx_Blk.ufo"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="0"/> + </location> + </instance> + <instance filename="instances/AktivGroteskEx_BlkIt.ufo"> + <location> + <dimension name="Weight" xvalue="185"/> + <dimension name="Width" xvalue="125"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + </instances> +</designspace> diff --git a/Tests/designspaceLib/data/test_v5_decovar.designspace b/Tests/designspaceLib/data/test_v5_decovar.designspace new file mode 100644 index 00000000..fd31626e --- /dev/null +++ b/Tests/designspaceLib/data/test_v5_decovar.designspace @@ -0,0 +1,242 @@ +<?xml version='1.0' encoding='UTF-8'?> +<designspace format="5.0"> + <axes> + <axis tag="BLDA" name="Inline" minimum="0" maximum="1000" default="0"/> + <axis tag="TRMD" name="Shearded" minimum="0" maximum="1000" default="0"/> + <axis tag="TRMC" name="Rounded Slab" minimum="0" maximum="1000" default="0"/> + <axis tag="SKLD" name="Stripes" minimum="0" maximum="1000" default="0"/> + <axis tag="TRML" name="Worm Terminal" minimum="0" maximum="1000" default="0"/> + <axis tag="SKLA" name="Inline Skeleton" minimum="0" maximum="1000" default="0"/> + <axis tag="TRMF" name="Open Inline Terminal" minimum="0" maximum="1000" default="0"/> + <axis tag="TRMK" name="Inline Terminal" minimum="0" maximum="1000" default="0"/> + <axis tag="BLDB" name="Worm" minimum="0" maximum="1000" default="0"/> + <axis tag="WMX2" name="Weight" minimum="0" maximum="1000" default="0"/> + <axis tag="TRMB" name="Flared" minimum="0" maximum="1000" default="0"/> + <axis tag="TRMA" name="Rounded" minimum="0" maximum="1000" default="0"/> + <axis tag="SKLB" name="Worm Skeleton" minimum="0" maximum="1000" default="0"/> + <axis tag="TRMG" name="Slab" minimum="0" maximum="1000" default="0"/> + <axis tag="TRME" name="Bifurcated" minimum="0" maximum="1000" default="0"/> + </axes> + + <!-- Labels without location or just partly specified location are at the default location plus the explicitly given sub-locations. --> + <labels> + <label name="Default" elidable="true"/> + <label name="Open"> + <labelname xml:lang="de">Offen</labelname> + <location> + <dimension name="Inline" uservalue="1000"/> + </location> + </label> + <label name="Worm"> + <location> + <dimension name="Worm" uservalue="1000"/> + </location> + </label> + <label name="Checkered"> + <location> + <dimension name="Inline Skeleton" uservalue="1000"/> + </location> + </label> + <label name="Checkered Reverse"> + <location> + <dimension name="Inline Terminal" uservalue="1000"/> + </location> + </label> + <label name="Striped"> + <location> + <dimension name="Stripes" uservalue="500"/> + </location> + </label> + <label name="Rounded"> + <location> + <dimension name="Rounded" uservalue="1000"/> + </location> + </label> + <label name="Flared"> + <location> + <dimension name="Flared" uservalue="1000"/> + </location> + </label> + <label name="Flared Open"> + <location> + <dimension name="Inline Skeleton" uservalue="1000"/> + <dimension name="Flared" uservalue="1000"/> + </location> + </label> + <label name="Rounded Slab"> + <location> + <dimension name="Rounded Slab" uservalue="1000"/> + </location> + </label> + <label name="Sheared"> + <location> + <dimension name="Shearded" uservalue="1000"/> + </location> + </label> + <label name="Bifurcated"> + <location> + <dimension name="Bifurcated" uservalue="1000"/> + </location> + </label> + <label name="Inline"> + <location> + <dimension name="Inline Skeleton" uservalue="500"/> + <dimension name="Open Inline Terminal" uservalue="500"/> + </location> + </label> + <label name="Slab"> + <location> + <dimension name="Slab" uservalue="1000"/> + </location> + </label> + <label name="Contrast"> + <location> + <dimension name="Weight" uservalue="1000"/> + </location> + </label> + <label name="Fancy"> + <location> + <dimension name="Inline Skeleton" uservalue="1000"/> + <dimension name="Weight" uservalue="1000"/> + <dimension name="Flared" uservalue="1000"/> + </location> + </label> + <label name="Mayhem"> + <location> + <dimension name="Rounded Slab" uservalue="750"/> + <dimension name="Worm Terminal" uservalue="250"/> + <dimension name="Inline Skeleton" uservalue="1000"/> + <dimension name="Open Inline Terminal" uservalue="250"/> + <dimension name="Inline Terminal" uservalue="250"/> + <dimension name="Worm" uservalue="1000"/> + <dimension name="Weight" uservalue="750"/> + <dimension name="Flared" uservalue="500"/> + <dimension name="Rounded" uservalue="500"/> + <dimension name="Worm Skeleton" uservalue="1000"/> + <dimension name="Slab" uservalue="750"/> + <dimension name="Bifurcated" uservalue="500"/> + </location> + </label> + </labels> + + <sources> + <source filename="DecovarAlpha-Regular24.ufo" name="master_Regular"/> + <source filename="DecovarAlpha-Regular24SkelA.ufo" name="master_sklA"> + <location> + <dimension name="Inline Skeleton" xvalue="1000"/> + </location> + </source> + <source filename="DecovarAlpha-Regular24SkelD2.ufo" name="master_sklD2"> + <location> + <dimension name="Stripes" xvalue="500"/> + </location> + </source> + <source filename="DecovarAlpha-Regular24SkelD4.ufo" name="master_sklD4"> + <location> + <dimension name="Stripes" xvalue="1000"/> + </location> + </source> + <source filename="DecovarAlpha-Regular24SkelB2.ufo" name="master_sklB2"> + <location> + <dimension name="Worm Skeleton" xvalue="1000"/> + </location> + </source> + <source filename="DecovarAlpha-Regular24TermA.ufo" name="master_trmA"> + <location> + <dimension name="Rounded" xvalue="1000"/> + </location> + </source> + <source filename="DecovarAlpha-Regular24TermB.ufo" name="master_trmB"> + <location> + <dimension name="Flared" xvalue="1000"/> + </location> + </source> + <source filename="DecovarAlpha-Regular24TermC.ufo" name="master_trmC"> + <location> + <dimension name="Rounded Slab" xvalue="1000"/> + </location> + </source> + <source filename="DecovarAlpha-Regular24TermD.ufo" name="master_trmD"> + <location> + <dimension name="Shearded" xvalue="1000"/> + </location> + </source> + <source filename="DecovarAlpha-Regular24TermE.ufo" name="master_trmE"> + <location> + <dimension name="Bifurcated" xvalue="1000"/> + </location> + </source> + <source filename="DecovarAlpha-Regular24TermF.ufo" name="master_trmF"> + <location> + <dimension name="Open Inline Terminal" xvalue="1000"/> + </location> + </source> + <source filename="DecovarAlpha-Regular24TermG.ufo" name="master_trmG"> + <location> + <dimension name="Slab" xvalue="1000"/> + </location> + </source> + <source filename="DecovarAlpha-Regular24TermSkelA.ufo" name="master_trmK"> + <location> + <dimension name="Inline Terminal" xvalue="1000"/> + </location> + </source> + <source filename="DecovarAlpha-Regular24TermSkelB.ufo" name="master_trmL"> + <location> + <dimension name="Worm Terminal" xvalue="1000"/> + </location> + </source> + <source filename="DecovarAlpha-Regular24WeightMax1.ufo" name="master_wmx1"> + <location> + <dimension name="Weight" xvalue="5"/> + </location> + </source> + <source filename="DecovarAlpha-Regular24WeightMax1.5.ufo" name="master_wmx1.5"> + <location> + <dimension name="Weight" xvalue="507.806"/> + </location> + </source> + <source filename="DecovarAlpha-Regular24WeightMax2.ufo" name="master_wmx2"> + <location> + <dimension name="Weight" xvalue="1000"/> + </location> + </source> + <source filename="DecovarAlpha-Regular24bldA.ufo" name="master_bldA"> + <location> + <dimension name="Inline" xvalue="1000"/> + </location> + </source> + <source filename="DecovarAlpha-Regular24bldB.ufo" name="master_bldB"> + <location> + <dimension name="Worm" xvalue="1000"/> + </location> + </source> + </sources> + + <instances> + <!-- + This designspace defines LocationLabels (STAT format 4) for various + points within the design space. In order to define instances at these + locations, DS version 5 provides the `location="..."` attribute which + means that the instance is in the same location as the LocationLabel + with the given name. + --> + <instance location="Default" filename="DecovarAlpha-Default.ufo"/> + <instance location="Open" filename="DecovarAlpha-Open.ufo"/> + <instance location="Worm" filename="DecovarAlpha-Worm.ufo"/> + <instance location="Checkered" filename="DecovarAlpha-Checkered.ufo"/> + <instance location="Checkered Reverse" filename="DecovarAlpha-CheckeredReverse.ufo"/> + <instance location="Striped" filename="DecovarAlpha-Striped.ufo"/> + <instance location="Rounded" filename="DecovarAlpha-Rounded.ufo"/> + <instance location="Flared" filename="DecovarAlpha-Flared.ufo"/> + <instance location="Flared Open" filename="DecovarAlpha-FlaredOpen.ufo"/> + <instance location="Rounded Slab" filename="DecovarAlpha-RoundedSlab.ufo"/> + <instance location="Sheared" filename="DecovarAlpha-Sheared.ufo"/> + <instance location="Bifurcated" filename="DecovarAlpha-Bifurcated.ufo"/> + <instance location="Inline" filename="DecovarAlpha-Inline.ufo"/> + <instance location="Slab" filename="DecovarAlpha-Slab.ufo"/> + <instance location="Contrast" filename="DecovarAlpha-Contrast.ufo"/> + <instance location="Fancy" filename="DecovarAlpha-Fancy.ufo"/> + <instance location="Mayhem" filename="DecovarAlpha-Mayhem.ufo"/> + </instances> +</designspace> diff --git a/Tests/designspaceLib/data/test_v5_discrete.designspace b/Tests/designspaceLib/data/test_v5_discrete.designspace new file mode 100644 index 00000000..f42f2dc9 --- /dev/null +++ b/Tests/designspaceLib/data/test_v5_discrete.designspace @@ -0,0 +1,139 @@ +<?xml version='1.0' encoding='UTF-8'?> +<designspace format="5.0"> + <axes> + <axis tag="wght" name="Weight" values="400 700 900" default="400"> + <labels> + <label uservalue="400" name="Regular" elidable="true" linkeduservalue="700"/> + <label uservalue="700" name="Bold"/> + <label uservalue="900" name="Black"/> + </labels> + </axis> + <axis tag="wdth" name="Width" values="75 100" default="100"> + <labels> + <label uservalue="75" name="Narrow"/> + <label uservalue="100" name="Normal" elidable="true"/> + </labels> + </axis> + <axis tag="ital" name="Italic" values="0 1" default="0"> + <labels> + <label uservalue="0" name="Roman" elidable="true" linkeduservalue="1"/> + <label uservalue="1" name="Italic"/> + </labels> + </axis> + </axes> + + <sources> + <source filename="arial.ufo" name="Arial Regular"> + <location> + <dimension name="Weight" xvalue="400"/> + </location> + </source> + <source filename="arialbd.ufo" name="Arial Bold"> + <location> + <dimension name="Weight" xvalue="700"/> + </location> + </source> + <source filename="ariblk.ufo" name="Arial Black"> + <location> + <dimension name="Weight" xvalue="900"/> + </location> + </source> + <source filename="ariali.ufo" name="Arial Italic"> + <location> + <dimension name="Weight" xvalue="400"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="arialbi.ufo" name="Arial Bold Italic"> + <location> + <dimension name="Weight" xvalue="700"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="ARIALN.ufo" name="Arial Narrow"> + <location> + <dimension name="Weight" xvalue="400"/> + <dimension name="Width" xvalue="75"/> + </location> + </source> + <source filename="ARIALNB.ufo" name="Arial Narrow Bold"> + <location> + <dimension name="Weight" xvalue="700"/> + <dimension name="Width" xvalue="75"/> + </location> + </source> + <source filename="ARIALNBI.ufo" name="Arial Narrow Bold Italic"> + <location> + <dimension name="Weight" xvalue="700"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + <source filename="ARIALNI.ufo" name="Arial Narrow Italic"> + <location> + <dimension name="Weight" xvalue="400"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </source> + </sources> + + <instances> + <instance name="Arial Regular"> + <location> + <dimension name="Weight" xvalue="400"/> + </location> + </instance> + <instance name="Arial Bold"> + <!-- Should be stylemapstylename="bold" --> + <location> + <dimension name="Weight" xvalue="700"/> + </location> + </instance> + <instance name="Arial Black"> + <location> + <dimension name="Weight" xvalue="900"/> + </location> + </instance> + <instance name="Arial Italic"> + <!-- Should be stylemapstylename="italic" --> + <location> + <dimension name="Weight" xvalue="400"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Arial Bold Italic"> + <!-- Should be stylemapstylename="bold italic" --> + <location> + <dimension name="Weight" xvalue="700"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Arial Narrow"> + <location> + <dimension name="Weight" xvalue="400"/> + <dimension name="Width" xvalue="75"/> + </location> + </instance> + <instance name="Arial Narrow Bold"> + <location> + <dimension name="Weight" xvalue="700"/> + <dimension name="Width" xvalue="75"/> + </location> + </instance> + <instance name="Arial Narrow Bold Italic"> + <location> + <dimension name="Weight" xvalue="700"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + <instance name="Arial Narrow Italic"> + <location> + <dimension name="Weight" xvalue="400"/> + <dimension name="Width" xvalue="75"/> + <dimension name="Italic" xvalue="1"/> + </location> + </instance> + </instances> +</designspace> diff --git a/Tests/designspaceLib/data/test_v5_original.designspace b/Tests/designspaceLib/data/test_v5_original.designspace new file mode 100644 index 00000000..d144a073 --- /dev/null +++ b/Tests/designspaceLib/data/test_v5_original.designspace @@ -0,0 +1,90 @@ +<?xml version='1.0' encoding='UTF-8'?> +<designspace format="5.0"> + <!-- + NOTE: this file is the same as test_v4_original, except: + - the format is 5, + - source location width = 20 are not written out because it's the default + - instance <glyphs>, <kerning>, <info> are removed because deprecated + --> + <axes> + <axis tag="wght" name="weight" minimum="0" maximum="1000" default="0"> + <labelname xml:lang="en">Wéíght</labelname> + <labelname xml:lang="fa-IR">قطر</labelname> + </axis> + <axis tag="wdth" name="width" minimum="0" maximum="1000" default="15" hidden="1"> + <labelname xml:lang="fr">Chasse</labelname> + <map input="0" output="10"/> + <map input="15" output="20"/> + <map input="401" output="66"/> + <map input="1000" output="990"/> + </axis> + </axes> + <rules processing="last"> + <rule name="named.rule.1"> + <conditionset> + <condition name="axisName_a" minimum="0" maximum="1"/> + <condition name="axisName_b" minimum="2" maximum="3"/> + </conditionset> + <sub name="a" with="a.alt"/> + </rule> + </rules> + <sources> + <source filename="masters/masterTest1.ufo" name="master.ufo1" familyname="MasterFamilyName" stylename="MasterStyleNameOne"> + <lib copy="1"/> + <features copy="1"/> + <info copy="1"/> + <glyph name="A" mute="1"/> + <glyph name="Z" mute="1"/> + <location> + <dimension name="weight" xvalue="0"/> + </location> + </source> + <source filename="masters/masterTest2.ufo" name="master.ufo2" familyname="MasterFamilyName" stylename="MasterStyleNameTwo"> + <kerning mute="1"/> + <location> + <dimension name="weight" xvalue="1000"/> + </location> + </source> + <source filename="masters/masterTest2.ufo" name="master.ufo2" familyname="MasterFamilyName" stylename="Supports" layer="supports"> + <location> + <dimension name="weight" xvalue="1000"/> + </location> + </source> + </sources> + <instances> + <instance name="instance.ufo1" familyname="InstanceFamilyName" stylename="InstanceStyleName" filename="instances/instanceTest1.ufo" postscriptfontname="InstancePostscriptName" stylemapfamilyname="InstanceStyleMapFamilyName" stylemapstylename="InstanceStyleMapStyleName"> + <stylename xml:lang="fr">Demigras</stylename> + <stylename xml:lang="ja">半ば</stylename> + <familyname xml:lang="fr">Montserrat</familyname> + <familyname xml:lang="ja">モンセラート</familyname> + <stylemapstylename xml:lang="de">Standard</stylemapstylename> + <stylemapfamilyname xml:lang="de">Montserrat Halbfett</stylemapfamilyname> + <stylemapfamilyname xml:lang="ja">モンセラート SemiBold</stylemapfamilyname> + <location> + <dimension name="weight" xvalue="500"/> + </location> + <lib> + <dict> + <key>com.coolDesignspaceApp.binaryData</key> + <data> + PGJpbmFyeSBndW5rPg== + </data> + <key>com.coolDesignspaceApp.specimenText</key> + <string>Hamburgerwhatever</string> + </dict> + </lib> + </instance> + <instance name="instance.ufo2" familyname="InstanceFamilyName" stylename="InstanceStyleName" filename="instances/instanceTest2.ufo" postscriptfontname="InstancePostscriptName" stylemapfamilyname="InstanceStyleMapFamilyName" stylemapstylename="InstanceStyleMapStyleName"> + <location> + <dimension name="weight" xvalue="500"/> + <dimension name="width" xvalue="400" yvalue="300"/> + </location> + </instance> + </instances> + <lib> + <dict> + <key>com.coolDesignspaceApp.previewSize</key> + <integer>30</integer> + </dict> + </lib> +</designspace> diff --git a/Tests/designspaceLib/data/test_v5_sourceserif.designspace b/Tests/designspaceLib/data/test_v5_sourceserif.designspace new file mode 100644 index 00000000..d3a32177 --- /dev/null +++ b/Tests/designspaceLib/data/test_v5_sourceserif.designspace @@ -0,0 +1,646 @@ +<?xml version='1.0' encoding='UTF-8'?> +<designspace format="5.0"> + <axes> + <axis tag="wght" name="weight" minimum="200" maximum="900" default="400"> + <map input="200" output="0"/> + <map input="300" output="145"/> + <map input="400" output="394"/> + <map input="600" output="594"/> + <map input="700" output="823"/> + <map input="900" output="1000"/> + <labels ordering="1"> + <label uservalue="200" userminimum="200" usermaximum="250" name="ExtraLight"/> + <label uservalue="300" userminimum="250" usermaximum="350" name="Light"/> + <label uservalue="400" userminimum="350" usermaximum="450" name="Regular" elidable="true"/> + <label uservalue="600" userminimum="550" usermaximum="650" name="Semibold"/> + <label uservalue="700" userminimum="650" usermaximum="750" name="Bold"/> + <label uservalue="775" userminimum="750" usermaximum="800" name="ExtraBold"/> + <label uservalue="900" userminimum="800" usermaximum="900" name="Black"/> + </labels> + </axis> + <axis tag="opsz" name="optical" minimum="8" maximum="60" default="20"> + <labels ordering="0"> + <label uservalue="8" userminimum="8" usermaximum="12" name="Caption"/> + <label uservalue="16" userminimum="12" usermaximum="18" name="SmallText"/> + <label uservalue="20" userminimum="18" usermaximum="26" name="Text" elidable="true"/> + <label uservalue="32" userminimum="26" usermaximum="48" name="Subhead"/> + <label uservalue="60" userminimum="48" usermaximum="60" name="Display"/> + </labels> + </axis> + <axis tag="ital" name="italic" values="0 1" default="0"> + <labels ordering="2"> + <label uservalue="0" name="Roman" elidable="true"/> + <label uservalue="1" name="Italic"/> + </labels> + </axis> + </axes> + + <sources> + <source filename="caption/master_0/SourceSerif_c0.ufo"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="8"/> + <dimension name="italic" xvalue="0"/> + </location> + </source> + <source filename="caption/master_1/SourceSerif_c1.ufo"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="8"/> + <dimension name="italic" xvalue="0"/> + </location> + </source> + <source filename="caption/master_2/SourceSerif_c2.ufo"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="8"/> + <dimension name="italic" xvalue="0"/> + </location> + </source> + <source filename="text/master_0/SourceSerif_0.ufo"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="20"/> + <dimension name="italic" xvalue="0"/> + </location> + </source> + <source filename="text/master_1/SourceSerif_1.ufo" familyname="Source Serif 4"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="20"/> + <dimension name="italic" xvalue="0"/> + </location> + </source> + <source filename="text/master_2/SourceSerif_2.ufo"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="20"/> + <dimension name="italic" xvalue="0"/> + </location> + </source> + <source filename="display/master_0/SourceSerif_d0.ufo"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="60"/> + <dimension name="italic" xvalue="0"/> + </location> + </source> + <source filename="display/master_1/SourceSerif_d1.ufo"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="60"/> + <dimension name="italic" xvalue="0"/> + </location> + </source> + <source filename="display/master_2/SourceSerif_d2.ufo"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="60"/> + <dimension name="italic" xvalue="0"/> + </location> + </source> + + <source filename="caption/master_0/SourceSerif-Italic_c0.ufo"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="8"/> + <dimension name="italic" xvalue="1"/> + </location> + </source> + <source filename="caption/master_1/SourceSerif-Italic_c1.ufo"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="8"/> + <dimension name="italic" xvalue="1"/> + </location> + </source> + <source filename="caption/master_2/SourceSerif-Italic_c2.ufo"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="8"/> + <dimension name="italic" xvalue="1"/> + </location> + </source> + <source filename="text/master_0/SourceSerif-Italic_0.ufo"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="20"/> + <dimension name="italic" xvalue="1"/> + </location> + </source> + <source filename="text/master_1/SourceSerif-Italic_1.ufo"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="20"/> + <dimension name="italic" xvalue="1"/> + </location> + </source> + <source filename="text/master_2/SourceSerif-Italic_2.ufo"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="20"/> + <dimension name="italic" xvalue="1"/> + </location> + </source> + <source filename="display/master_0/SourceSerif-Italic_d0.ufo"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="60"/> + <dimension name="italic" xvalue="1"/> + </location> + </source> + <source filename="display/master_1/SourceSerif-Italic_d1.ufo"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="60"/> + <dimension name="italic" xvalue="1"/> + </location> + </source> + <source filename="display/master_2/SourceSerif-Italic_d2.ufo"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="60"/> + <dimension name="italic" xvalue="1"/> + </location> + </source> + </sources> + + <variable-fonts> + <variable-font name="SourceSerif4Variable-Roman"> + <axis-subsets> + <axis-subset name="weight"/> + <axis-subset name="optical"/> + <axis-subset name="italic" uservalue="0"/> + </axis-subsets> + <!-- The per-variable-font lib is to be merged into the global lib on + conversion to a DS v4, overwriting keys in the global lib. --> + <lib> + <dict> + <key>public.skipExportGlyphs</key> + <array> + <string>caron.alt</string> + <string>commabelowcmb.alt</string> + <string>tonos.cap</string> + <string>f.ligalong</string> + <string>dieresiscmb.tight</string> + <string>IJ</string> + <string>Tbar</string> + <string>colontriangularmod</string> + <string>crossmark</string> + <string>ij</string> + <string>overline</string> + <string>similar</string> + <string>tbar</string> + <string>triangularbullet</string> + <string>turkicdsccmb</string> + </array> + </dict> + </lib> + </variable-font> + <variable-font name="SourceSerif4Variable-Italic"> + <axis-subsets> + <axis-subset name="weight"/> + <axis-subset name="optical"/> + <axis-subset name="italic" uservalue="1"/> + </axis-subsets> + <lib> + <dict> + <key>public.skipExportGlyphs</key> + <array> + <string>caron.alt</string> + <string>commabelowcmb.alt</string> + <string>f.liga</string> + <string>f.ligalong</string> + <string>tonos.cap</string> + <string>dieresiscmb.tight</string> + <string>turkicdsccmb</string> + </array> + </dict> + </lib> + </variable-font> + </variable-fonts> + + <instances> + <instance postscriptfontname="SourceSerif4Roman-CaptionExtraLight"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="8"/> + <dimension name="italic" xvalue="0"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Roman-CaptionLight"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="8"/> + <dimension name="italic" xvalue="0"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Roman-CaptionRegular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="8"/> + <dimension name="italic" xvalue="0"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Roman-CaptionSemibold"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="8"/> + <dimension name="italic" xvalue="0"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Roman-CaptionBold"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="8"/> + <dimension name="italic" xvalue="0"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Roman-CaptionBlack"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="8"/> + <dimension name="italic" xvalue="0"/> + </location> + </instance> + <instance stylename="SmText ExtraLight" postscriptfontname="SourceSerif4Roman-SmTextExtraLight"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="16"/> + <dimension name="italic" xvalue="0"/> + </location> + </instance> + <instance stylename="SmText Light" postscriptfontname="SourceSerif4Roman-SmTextLight"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="16"/> + <dimension name="italic" xvalue="0"/> + </location> + </instance> + <instance stylename="SmText" postscriptfontname="SourceSerif4Roman-SmTextRegular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="16"/> + <dimension name="italic" xvalue="0"/> + </location> + </instance> + <instance stylename="SmText Semibold" postscriptfontname="SourceSerif4Roman-SmTextSemibold"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="16"/> + <dimension name="italic" xvalue="0"/> + </location> + </instance> + <instance stylename="SmText Bold" postscriptfontname="SourceSerif4Roman-SmTextBold"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="16"/> + <dimension name="italic" xvalue="0"/> + </location> + </instance> + <instance stylename="SmText Black" postscriptfontname="SourceSerif4Roman-SmTextBlack"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="16"/> + <dimension name="italic" xvalue="0"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Roman-ExtraLight"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="20"/> + <dimension name="italic" xvalue="0"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Roman-Light"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="20"/> + <dimension name="italic" xvalue="0"/> + </location> + </instance> + <instance stylename="Regular" postscriptfontname="SourceSerif4Roman-Regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="20"/> + <dimension name="italic" xvalue="0"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Roman-Semibold"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="20"/> + <dimension name="italic" xvalue="0"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Roman-Bold"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="20"/> + <dimension name="italic" xvalue="0"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Roman-Black"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="20"/> + <dimension name="italic" xvalue="0"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Roman-SubheadExtraLight"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="32"/> + <dimension name="italic" xvalue="0"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Roman-SubheadLight"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="32"/> + <dimension name="italic" xvalue="0"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Roman-SubheadRegular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="32"/> + <dimension name="italic" xvalue="0"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Roman-SubheadSemibold"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="32"/> + <dimension name="italic" xvalue="0"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Roman-SubheadBold"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="32"/> + <dimension name="italic" xvalue="0"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Roman-SubheadBlack"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="32"/> + <dimension name="italic" xvalue="0"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Roman-DisplayExtraLight"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="60"/> + <dimension name="italic" xvalue="0"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Roman-DisplayLight"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="60"/> + <dimension name="italic" xvalue="0"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Roman-DisplayRegular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="60"/> + <dimension name="italic" xvalue="0"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Roman-DisplaySemibold"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="60"/> + <dimension name="italic" xvalue="0"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Roman-DisplayBold"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="60"/> + <dimension name="italic" xvalue="0"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Roman-DisplayBlack"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="60"/> + <dimension name="italic" xvalue="0"/> + </location> + </instance> + + <instance postscriptfontname="SourceSerif4Italic-CaptionExtraLight"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="8"/> + <dimension name="italic" xvalue="1"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Italic-CaptionLight"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="8"/> + <dimension name="italic" xvalue="1"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Italic-CaptionRegular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="8"/> + <dimension name="italic" xvalue="1"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Italic-CaptionSemibold"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="8"/> + <dimension name="italic" xvalue="1"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Italic-CaptionBold"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="8"/> + <dimension name="italic" xvalue="1"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Italic-CaptionBlack"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="8"/> + <dimension name="italic" xvalue="1"/> + </location> + </instance> + <instance stylename="SmText ExtraLight Italic" postscriptfontname="SourceSerif4Italic-SmTextExtraLight"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="16"/> + <dimension name="italic" xvalue="1"/> + </location> + </instance> + <instance stylename="SmText Light Italic" postscriptfontname="SourceSerif4Italic-SmTextLight"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="16"/> + <dimension name="italic" xvalue="1"/> + </location> + </instance> + <instance stylename="SmText Italic" postscriptfontname="SourceSerif4Italic-SmTextRegular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="16"/> + <dimension name="italic" xvalue="1"/> + </location> + </instance> + <instance stylename="SmText Semibold Italic" postscriptfontname="SourceSerif4Italic-SmTextSemibold"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="16"/> + <dimension name="italic" xvalue="1"/> + </location> + </instance> + <instance stylename="SmText Bold Italic" postscriptfontname="SourceSerif4Italic-SmTextBold"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="16"/> + <dimension name="italic" xvalue="1"/> + </location> + </instance> + <instance stylename="SmText Black Italic" postscriptfontname="SourceSerif4Italic-SmTextBlack"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="16"/> + <dimension name="italic" xvalue="1"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Italic-ExtraLight"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="20"/> + <dimension name="italic" xvalue="1"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Italic-Light"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="20"/> + <dimension name="italic" xvalue="1"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Italic-Regular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="20"/> + <dimension name="italic" xvalue="1"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Italic-Semibold"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="20"/> + <dimension name="italic" xvalue="1"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Italic-Bold"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="20"/> + <dimension name="italic" xvalue="1"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Italic-Black"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="20"/> + <dimension name="italic" xvalue="1"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Italic-SubheadExtraLight"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="32"/> + <dimension name="italic" xvalue="1"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Italic-SubheadLight"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="32"/> + <dimension name="italic" xvalue="1"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Italic-SubheadRegular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="32"/> + <dimension name="italic" xvalue="1"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Italic-SubheadSemibold"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="32"/> + <dimension name="italic" xvalue="1"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Italic-SubheadBold"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="32"/> + <dimension name="italic" xvalue="1"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Italic-SubheadBlack"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="32"/> + <dimension name="italic" xvalue="1"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Italic-DisplayExtraLight"> + <location> + <dimension name="weight" xvalue="0"/> + <dimension name="optical" xvalue="60"/> + <dimension name="italic" xvalue="1"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Italic-DisplayLight"> + <location> + <dimension name="weight" xvalue="145"/> + <dimension name="optical" xvalue="60"/> + <dimension name="italic" xvalue="1"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Italic-DisplayRegular"> + <location> + <dimension name="weight" xvalue="394"/> + <dimension name="optical" xvalue="60"/> + <dimension name="italic" xvalue="1"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Italic-DisplaySemibold"> + <location> + <dimension name="weight" xvalue="594"/> + <dimension name="optical" xvalue="60"/> + <dimension name="italic" xvalue="1"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Italic-DisplayBold"> + <location> + <dimension name="weight" xvalue="823"/> + <dimension name="optical" xvalue="60"/> + <dimension name="italic" xvalue="1"/> + </location> + </instance> + <instance postscriptfontname="SourceSerif4Italic-DisplayBlack"> + <location> + <dimension name="weight" xvalue="1000"/> + <dimension name="optical" xvalue="60"/> + <dimension name="italic" xvalue="1"/> + </location> + </instance> + </instances> +</designspace> diff --git a/Tests/designspaceLib/designspace_test.py b/Tests/designspaceLib/designspace_test.py index b6ee9d65..ee2d19e6 100644 --- a/Tests/designspaceLib/designspace_test.py +++ b/Tests/designspaceLib/designspace_test.py @@ -1,15 +1,26 @@ # coding=utf-8 import os -import sys -import pytest -import warnings +import re -from fontTools.misc import plistlib -from fontTools.designspaceLib import ( - DesignSpaceDocument, SourceDescriptor, AxisDescriptor, RuleDescriptor, - InstanceDescriptor, evaluateRule, processRules, posix, DesignSpaceDocumentError) +import pytest from fontTools import ttLib +from fontTools.designspaceLib import ( + AxisDescriptor, + AxisLabelDescriptor, + DesignSpaceDocument, + DesignSpaceDocumentError, + DiscreteAxisDescriptor, + InstanceDescriptor, + RuleDescriptor, + SourceDescriptor, + evaluateRule, + posix, + processRules, +) +from fontTools.designspaceLib.types import Range +from fontTools.misc import plistlib + def _axesAsDict(axes): """ @@ -30,19 +41,22 @@ def _axesAsDict(axes): def assert_equals_test_file(path, test_filename): - with open(path) as fp: + with open(path, encoding="utf-8") as fp: actual = fp.read() test_path = os.path.join(os.path.dirname(__file__), test_filename) - with open(test_path) as fp: + with open(test_path, encoding="utf-8") as fp: expected = fp.read() + expected = re.sub(r"<!--(.|\n)*?-->", "", expected) + expected = re.sub(r"\s*\n+", "\n", expected) assert actual == expected def test_fill_document(tmpdir): tmpdir = str(tmpdir) - testDocPath = os.path.join(tmpdir, "test.designspace") + testDocPath = os.path.join(tmpdir, "test_v4.designspace") + testDocPath5 = os.path.join(tmpdir, "test_v5.designspace") masterPath1 = os.path.join(tmpdir, "masters", "masterTest1.ufo") masterPath2 = os.path.join(tmpdir, "masters", "masterTest2.ufo") instancePath1 = os.path.join(tmpdir, "instances", "instanceTest1.ufo") @@ -121,6 +135,10 @@ def test_fill_document(tmpdir): i1.postScriptFontName = "InstancePostscriptName" i1.styleMapFamilyName = "InstanceStyleMapFamilyName" i1.styleMapStyleName = "InstanceStyleMapStyleName" + i1.localisedStyleName = dict(fr="Demigras", ja="半ば") + i1.localisedFamilyName = dict(fr="Montserrat", ja="モンセラート") + i1.localisedStyleMapStyleName = dict(de="Standard") + i1.localisedStyleMapFamilyName = dict(de="Montserrat Halbfett", ja="モンセラート SemiBold") glyphData = dict(name="arrow", mute=True, unicodes=[0x123, 0x124, 0x125]) i1.glyphs['arrow'] = glyphData i1.lib['com.coolDesignspaceApp.binaryData'] = plistlib.Data(b'<binary gunk>') @@ -158,16 +176,21 @@ def test_fill_document(tmpdir): ]) r1.subs.append(("a", "a.alt")) doc.addRule(r1) - # write the document + # write the document; without an explicit format it will be 5.0 by default + doc.write(testDocPath5) + assert os.path.exists(testDocPath5) + assert_equals_test_file(testDocPath5, 'data/test_v5_original.designspace') + # write again with an explicit format = 4.1 + doc.formatVersion = "4.1" doc.write(testDocPath) assert os.path.exists(testDocPath) - assert_equals_test_file(testDocPath, 'data/test.designspace') + assert_equals_test_file(testDocPath, 'data/test_v4_original.designspace') # import it again new = DesignSpaceDocument() new.read(testDocPath) assert new.default.location == {'width': 20.0, 'weight': 0.0} - assert new.filename == 'test.designspace' + assert new.filename == 'test_v4.designspace' assert new.lib == doc.lib assert new.instances[0].lib == doc.instances[0].lib @@ -197,6 +220,7 @@ def test_unicodes(tmpdir): instancePath1 = os.path.join(tmpdir, "instances", "instanceTest1.ufo") instancePath2 = os.path.join(tmpdir, "instances", "instanceTest2.ufo") doc = DesignSpaceDocument() + doc.formatVersion = "4.1" # This test about instance glyphs is deprecated in v5 # add master 1 s1 = SourceDescriptor() s1.filename = os.path.relpath(masterPath1, os.path.dirname(testDocPath)) @@ -832,7 +856,7 @@ def test_updatePaths(tmpdir): def test_read_with_path_object(): import pathlib - source = (pathlib.Path(__file__) / "../data/test.designspace").resolve() + source = (pathlib.Path(__file__) / "../data/test_v4_original.designspace").resolve() assert source.exists() doc = DesignSpaceDocument() doc.read(source) @@ -841,7 +865,7 @@ def test_read_with_path_object(): def test_with_with_path_object(tmpdir): import pathlib tmpdir = str(tmpdir) - dest = pathlib.Path(tmpdir) / "test.designspace" + dest = pathlib.Path(tmpdir) / "test_v4_original.designspace" doc = DesignSpaceDocument() doc.write(dest) assert dest.exists() @@ -1020,3 +1044,23 @@ def test_addRuleDescriptor(tmp_path): # Test it doesn't crash. ds.write(tmp_path / "test.designspace") + + +def test_deepcopyExceptFonts(): + ds = DesignSpaceDocument() + ds.addSourceDescriptor(font=object()) + ds.addSourceDescriptor(font=object()) + + ds_copy = ds.deepcopyExceptFonts() + + assert ds.tostring() == ds_copy.tostring() + assert ds.sources[0].font is ds_copy.sources[0].font + assert ds.sources[1].font is ds_copy.sources[1].font + + +def test_Range_post_init(): + # test min and max are sorted and default is clamped to either min/max + r = Range(minimum=2, maximum=-1, default=-2) + assert r.minimum == -1 + assert r.maximum == 2 + assert r.default == -1 diff --git a/Tests/designspaceLib/designspace_v5_test.py b/Tests/designspaceLib/designspace_v5_test.py new file mode 100644 index 00000000..9e803340 --- /dev/null +++ b/Tests/designspaceLib/designspace_v5_test.py @@ -0,0 +1,888 @@ +import re +import shutil +from pathlib import Path + +import pytest +from fontTools.designspaceLib import ( + AxisDescriptor, + AxisLabelDescriptor, + DesignSpaceDocument, + DiscreteAxisDescriptor, + InstanceDescriptor, + LocationLabelDescriptor, + RangeAxisSubsetDescriptor, + SourceDescriptor, + ValueAxisSubsetDescriptor, + VariableFontDescriptor, + posix, +) + +from .fixtures import datadir + + +def assert_descriptors_equal(actual, expected): + assert len(actual) == len(expected) + for a, e in zip(actual, expected): + assert a.asdict() == e.asdict() + + +def test_read_v5_document_simple(datadir): + doc = DesignSpaceDocument.fromfile(datadir / "test_v5.designspace") + + assert_descriptors_equal( + doc.axes, + [ + AxisDescriptor( + tag="wght", + name="weight", + minimum=200, + maximum=1000, + default=200, + labelNames={"en": "Wéíght", "fa-IR": "قطر"}, + map=[ + (200, 0), + (300, 100), + (400, 368), + (600, 600), + (700, 824), + (900, 1000), + ], + axisOrdering=None, + axisLabels=[ + AxisLabelDescriptor( + name="Extra Light", + userMinimum=200, + userValue=200, + userMaximum=250, + labelNames={"de": "Extraleicht", "fr": "Extra léger"}, + ), + AxisLabelDescriptor( + name="Light", userMinimum=250, userValue=300, userMaximum=350 + ), + AxisLabelDescriptor( + name="Regular", + userMinimum=350, + userValue=400, + userMaximum=450, + elidable=True, + ), + AxisLabelDescriptor( + name="Semi Bold", + userMinimum=450, + userValue=600, + userMaximum=650, + ), + AxisLabelDescriptor( + name="Bold", userMinimum=650, userValue=700, userMaximum=850 + ), + AxisLabelDescriptor( + name="Black", userMinimum=850, userValue=900, userMaximum=900 + ), + ], + ), + AxisDescriptor( + tag="wdth", + name="width", + minimum=50, + maximum=150, + default=100, + hidden=True, + labelNames={"fr": "Chasse"}, + map=[(50, 10), (100, 20), (125, 66), (150, 990)], + axisOrdering=1, + axisLabels=[ + AxisLabelDescriptor(name="Condensed", userValue=50), + AxisLabelDescriptor( + name="Normal", elidable=True, olderSibling=True, userValue=100 + ), + AxisLabelDescriptor(name="Wide", userValue=125), + AxisLabelDescriptor( + name="Extra Wide", userValue=150, userMinimum=150 + ), + ], + ), + DiscreteAxisDescriptor( + tag="ital", + name="Italic", + values=[0, 1], + default=0, + axisOrdering=None, + axisLabels=[ + AxisLabelDescriptor( + name="Roman", userValue=0, elidable=True, linkedUserValue=1 + ), + AxisLabelDescriptor(name="Italic", userValue=1), + ], + ), + ], + ) + + assert_descriptors_equal( + doc.locationLabels, + [ + LocationLabelDescriptor( + name="Some Style", + labelNames={"fr": "Un Style"}, + userLocation={"weight": 300, "width": 50, "Italic": 0}, + ), + LocationLabelDescriptor( + name="Other", userLocation={"weight": 700, "width": 100, "Italic": 1} + ), + ], + ) + + assert_descriptors_equal( + doc.sources, + [ + SourceDescriptor( + filename="masters/masterTest1.ufo", + path=posix(str((datadir / "masters/masterTest1.ufo").resolve())), + name="master.ufo1", + layerName=None, + location={"weight": 0.0, "width": 20.0}, + copyLib=True, + copyInfo=True, + copyGroups=False, + copyFeatures=True, + muteKerning=False, + muteInfo=False, + mutedGlyphNames=["A", "Z"], + familyName="MasterFamilyName", + styleName="MasterStyleNameOne", + localisedFamilyName={"fr": "Montserrat", "ja": "モンセラート"}, + ), + SourceDescriptor( + filename="masters/masterTest2.ufo", + path=posix(str((datadir / "masters/masterTest2.ufo").resolve())), + name="master.ufo2", + layerName=None, + location={"weight": 1000.0, "width": 20.0}, + copyLib=False, + copyInfo=False, + copyGroups=False, + copyFeatures=False, + muteKerning=True, + muteInfo=False, + mutedGlyphNames=[], + familyName="MasterFamilyName", + styleName="MasterStyleNameTwo", + localisedFamilyName={}, + ), + SourceDescriptor( + filename="masters/masterTest2.ufo", + path=posix(str((datadir / "masters/masterTest2.ufo").resolve())), + name="master.ufo2", + layerName="supports", + location={"weight": 1000.0, "width": 20.0}, + copyLib=False, + copyInfo=False, + copyGroups=False, + copyFeatures=False, + muteKerning=False, + muteInfo=False, + mutedGlyphNames=[], + familyName="MasterFamilyName", + styleName="Supports", + localisedFamilyName={}, + ), + ], + ) + + assert_descriptors_equal( + doc.variableFonts, + [ + VariableFontDescriptor( + name="Test_WghtWdth", + filename="Test_WghtWdth_different_from_name.ttf", + axisSubsets=[ + RangeAxisSubsetDescriptor(name="Weight"), + RangeAxisSubsetDescriptor(name="Width"), + ], + lib={"com.vtt.source": "sources/vtt/Test_WghtWdth.vtt"}, + ), + VariableFontDescriptor( + name="Test_Wght", + axisSubsets=[RangeAxisSubsetDescriptor(name="Weight")], + lib={"com.vtt.source": "sources/vtt/Test_Wght.vtt"}, + ), + VariableFontDescriptor( + name="TestCd_Wght", + axisSubsets=[ + RangeAxisSubsetDescriptor(name="Weight"), + ValueAxisSubsetDescriptor(name="Width", userValue=0), + ], + ), + VariableFontDescriptor( + name="TestWd_Wght", + axisSubsets=[ + RangeAxisSubsetDescriptor(name="Weight"), + ValueAxisSubsetDescriptor(name="Width", userValue=1000), + ], + ), + VariableFontDescriptor( + name="TestItalic_Wght", + axisSubsets=[ + RangeAxisSubsetDescriptor(name="Weight"), + ValueAxisSubsetDescriptor(name="Italic", userValue=1), + ], + ), + VariableFontDescriptor( + name="TestRB_Wght", + axisSubsets=[ + RangeAxisSubsetDescriptor( + name="Weight", userMinimum=400, userDefault=400, userMaximum=700 + ), + ValueAxisSubsetDescriptor(name="Italic", userValue=0), + ], + ), + ], + ) + + assert_descriptors_equal( + doc.instances, + [ + InstanceDescriptor( + filename="instances/instanceTest1.ufo", + path=posix(str((datadir / "instances/instanceTest1.ufo").resolve())), + name="instance.ufo1", + designLocation={"weight": 500.0, "width": 20.0}, + familyName="InstanceFamilyName", + styleName="InstanceStyleName", + postScriptFontName="InstancePostscriptName", + styleMapFamilyName="InstanceStyleMapFamilyName", + styleMapStyleName="InstanceStyleMapStyleName", + localisedFamilyName={"fr": "Montserrat", "ja": "モンセラート"}, + localisedStyleName={"fr": "Demigras", "ja": "半ば"}, + localisedStyleMapFamilyName={ + "de": "Montserrat Halbfett", + "ja": "モンセラート SemiBold", + }, + localisedStyleMapStyleName={"de": "Standard"}, + glyphs={"arrow": {"mute": True, "unicodes": [291, 292, 293]}}, + lib={ + "com.coolDesignspaceApp.binaryData": b"<binary gunk>", + "com.coolDesignspaceApp.specimenText": "Hamburgerwhatever", + }, + ), + InstanceDescriptor( + filename="instances/instanceTest2.ufo", + path=posix(str((datadir / "instances/instanceTest2.ufo").resolve())), + name="instance.ufo2", + designLocation={"weight": 500.0, "width": (400.0, 300.0)}, + familyName="InstanceFamilyName", + styleName="InstanceStyleName", + postScriptFontName="InstancePostscriptName", + styleMapFamilyName="InstanceStyleMapFamilyName", + styleMapStyleName="InstanceStyleMapStyleName", + glyphs={ + "arrow": { + "unicodes": [101, 201, 301], + "note": "A note about this glyph", + "instanceLocation": {"weight": 120.0, "width": 100.0}, + "masters": [ + { + "font": "master.ufo1", + "location": {"weight": 20.0, "width": 20.0}, + "glyphName": "BB", + }, + { + "font": "master.ufo2", + "location": {"weight": 900.0, "width": 900.0}, + "glyphName": "CC", + }, + ], + }, + "arrow2": {}, + }, + ), + InstanceDescriptor( + locationLabel="asdf", + ), + InstanceDescriptor( + designLocation={"weight": 600.0, "width": (401.0, 420.0)}, + ), + InstanceDescriptor( + designLocation={"weight": 10.0, "Italic": 0.0}, + userLocation={"width": 100.0}, + ), + InstanceDescriptor( + userLocation={"weight": 300.0, "width": 130.0, "Italic": 1.0}, + ), + ], + ) + + +def test_read_v5_document_decovar(datadir): + doc = DesignSpaceDocument.fromfile(datadir / "test_v5_decovar.designspace") + + assert not doc.variableFonts + + assert_descriptors_equal( + doc.axes, + [ + AxisDescriptor( + default=0, maximum=1000, minimum=0, name="Inline", tag="BLDA" + ), + AxisDescriptor( + default=0, maximum=1000, minimum=0, name="Shearded", tag="TRMD" + ), + AxisDescriptor( + default=0, maximum=1000, minimum=0, name="Rounded Slab", tag="TRMC" + ), + AxisDescriptor( + default=0, maximum=1000, minimum=0, name="Stripes", tag="SKLD" + ), + AxisDescriptor( + default=0, maximum=1000, minimum=0, name="Worm Terminal", tag="TRML" + ), + AxisDescriptor( + default=0, maximum=1000, minimum=0, name="Inline Skeleton", tag="SKLA" + ), + AxisDescriptor( + default=0, + maximum=1000, + minimum=0, + name="Open Inline Terminal", + tag="TRMF", + ), + AxisDescriptor( + default=0, maximum=1000, minimum=0, name="Inline Terminal", tag="TRMK" + ), + AxisDescriptor(default=0, maximum=1000, minimum=0, name="Worm", tag="BLDB"), + AxisDescriptor( + default=0, maximum=1000, minimum=0, name="Weight", tag="WMX2" + ), + AxisDescriptor( + default=0, maximum=1000, minimum=0, name="Flared", tag="TRMB" + ), + AxisDescriptor( + default=0, maximum=1000, minimum=0, name="Rounded", tag="TRMA" + ), + AxisDescriptor( + default=0, maximum=1000, minimum=0, name="Worm Skeleton", tag="SKLB" + ), + AxisDescriptor(default=0, maximum=1000, minimum=0, name="Slab", tag="TRMG"), + AxisDescriptor( + default=0, maximum=1000, minimum=0, name="Bifurcated", tag="TRME" + ), + ], + ) + + assert_descriptors_equal( + doc.locationLabels, + [ + LocationLabelDescriptor(name="Default", elidable=True, userLocation={}), + LocationLabelDescriptor( + name="Open", userLocation={"Inline": 1000}, labelNames={"de": "Offen"} + ), + LocationLabelDescriptor(name="Worm", userLocation={"Worm": 1000}), + LocationLabelDescriptor( + name="Checkered", userLocation={"Inline Skeleton": 1000} + ), + LocationLabelDescriptor( + name="Checkered Reverse", userLocation={"Inline Terminal": 1000} + ), + LocationLabelDescriptor(name="Striped", userLocation={"Stripes": 500}), + LocationLabelDescriptor(name="Rounded", userLocation={"Rounded": 1000}), + LocationLabelDescriptor(name="Flared", userLocation={"Flared": 1000}), + LocationLabelDescriptor( + name="Flared Open", + userLocation={"Inline Skeleton": 1000, "Flared": 1000}, + ), + LocationLabelDescriptor( + name="Rounded Slab", userLocation={"Rounded Slab": 1000} + ), + LocationLabelDescriptor(name="Sheared", userLocation={"Shearded": 1000}), + LocationLabelDescriptor( + name="Bifurcated", userLocation={"Bifurcated": 1000} + ), + LocationLabelDescriptor( + name="Inline", + userLocation={"Inline Skeleton": 500, "Open Inline Terminal": 500}, + ), + LocationLabelDescriptor(name="Slab", userLocation={"Slab": 1000}), + LocationLabelDescriptor(name="Contrast", userLocation={"Weight": 1000}), + LocationLabelDescriptor( + name="Fancy", + userLocation={"Inline Skeleton": 1000, "Flared": 1000, "Weight": 1000}, + ), + LocationLabelDescriptor( + name="Mayhem", + userLocation={ + "Inline Skeleton": 1000, + "Worm Skeleton": 1000, + "Rounded": 500, + "Flared": 500, + "Rounded Slab": 750, + "Bifurcated": 500, + "Open Inline Terminal": 250, + "Slab": 750, + "Inline Terminal": 250, + "Worm Terminal": 250, + "Weight": 750, + "Worm": 1000, + }, + ), + ], + ) + + assert [i.locationLabel for i in doc.instances] == [ + "Default", + "Open", + "Worm", + "Checkered", + "Checkered Reverse", + "Striped", + "Rounded", + "Flared", + "Flared Open", + "Rounded Slab", + "Sheared", + "Bifurcated", + "Inline", + "Slab", + "Contrast", + "Fancy", + "Mayhem", + ] + + +def test_read_v5_document_discrete(datadir): + doc = DesignSpaceDocument.fromfile(datadir / "test_v5_discrete.designspace") + + assert not doc.locationLabels + assert not doc.variableFonts + + assert_descriptors_equal( + doc.axes, + [ + DiscreteAxisDescriptor( + default=400, + values=[400, 700, 900], + name="Weight", + tag="wght", + axisLabels=[ + AxisLabelDescriptor( + name="Regular", + userValue=400, + elidable=True, + linkedUserValue=700, + ), + AxisLabelDescriptor(name="Bold", userValue=700), + AxisLabelDescriptor(name="Black", userValue=900), + ], + ), + DiscreteAxisDescriptor( + default=100, + values=[75, 100], + name="Width", + tag="wdth", + axisLabels=[ + AxisLabelDescriptor(name="Narrow", userValue=75), + AxisLabelDescriptor(name="Normal", userValue=100, elidable=True), + ], + ), + DiscreteAxisDescriptor( + default=0, + values=[0, 1], + name="Italic", + tag="ital", + axisLabels=[ + AxisLabelDescriptor( + name="Roman", userValue=0, elidable=True, linkedUserValue=1 + ), + AxisLabelDescriptor(name="Italic", userValue=1), + ], + ), + ], + ) + + +def test_read_v5_document_aktiv(datadir): + doc = DesignSpaceDocument.fromfile(datadir / "test_v5_aktiv.designspace") + + assert not doc.locationLabels + + assert_descriptors_equal( + doc.axes, + [ + AxisDescriptor( + tag="wght", + name="Weight", + minimum=100, + default=400, + maximum=900, + map=[ + (100, 22), + (200, 38), + (300, 57), + (400, 84), + (500, 98), + (600, 115), + (700, 133), + (800, 158), + (900, 185), + ], + axisOrdering=1, + axisLabels=[ + AxisLabelDescriptor(name="Hair", userValue=100), + AxisLabelDescriptor(userValue=200, name="Thin"), + AxisLabelDescriptor(userValue=300, name="Light"), + AxisLabelDescriptor( + userValue=400, + name="Regular", + elidable=True, + linkedUserValue=700, + ), + AxisLabelDescriptor(userValue=500, name="Medium"), + AxisLabelDescriptor(userValue=600, name="SemiBold"), + AxisLabelDescriptor(userValue=700, name="Bold"), + AxisLabelDescriptor(userValue=800, name="XBold"), + AxisLabelDescriptor(userValue=900, name="Black"), + ], + ), + AxisDescriptor( + tag="wdth", + name="Width", + minimum=75, + default=100, + maximum=125, + axisOrdering=0, + axisLabels=[ + AxisLabelDescriptor(name="Cd", userValue=75), + AxisLabelDescriptor(name="Normal", elidable=True, userValue=100), + AxisLabelDescriptor(name="Ex", userValue=125), + ], + ), + AxisDescriptor( + tag="ital", + name="Italic", + minimum=0, + default=0, + maximum=1, + axisOrdering=2, + axisLabels=[ + AxisLabelDescriptor( + name="Upright", userValue=0, elidable=True, linkedUserValue=1 + ), + AxisLabelDescriptor(name="Italic", userValue=1), + ], + ), + ], + ) + + assert_descriptors_equal( + doc.variableFonts, + [ + VariableFontDescriptor( + name="AktivGroteskVF_WghtWdthItal", + axisSubsets=[ + RangeAxisSubsetDescriptor(name="Weight"), + RangeAxisSubsetDescriptor(name="Width"), + RangeAxisSubsetDescriptor(name="Italic"), + ], + ), + VariableFontDescriptor( + name="AktivGroteskVF_WghtWdth", + axisSubsets=[ + RangeAxisSubsetDescriptor(name="Weight"), + RangeAxisSubsetDescriptor(name="Width"), + ], + ), + VariableFontDescriptor( + name="AktivGroteskVF_Wght", + axisSubsets=[ + RangeAxisSubsetDescriptor(name="Weight"), + ], + ), + VariableFontDescriptor( + name="AktivGroteskVF_Italics_WghtWdth", + axisSubsets=[ + RangeAxisSubsetDescriptor(name="Weight"), + RangeAxisSubsetDescriptor(name="Width"), + ValueAxisSubsetDescriptor(name="Italic", userValue=1), + ], + ), + VariableFontDescriptor( + name="AktivGroteskVF_Italics_Wght", + axisSubsets=[ + RangeAxisSubsetDescriptor(name="Weight"), + ValueAxisSubsetDescriptor(name="Italic", userValue=1), + ], + ), + ], + ) + + +@pytest.fixture +def map_doc(): + """Generate a document with a few axes to test the mapping functions""" + doc = DesignSpaceDocument() + doc.addAxis( + AxisDescriptor( + tag="wght", + name="Weight", + minimum=100, + maximum=900, + default=100, + map=[(100, 10), (900, 90)], + ) + ) + doc.addAxis( + AxisDescriptor( + tag="wdth", + name="Width", + minimum=75, + maximum=200, + default=100, + map=[(75, 7500), (100, 10000), (200, 20000)], + ) + ) + doc.addAxis( + AxisDescriptor(tag="CUST", name="Custom", minimum=1, maximum=2, default=1.5) + ) + doc.addLocationLabel( + LocationLabelDescriptor( + name="Wonky", userLocation={"Weight": 800, "Custom": 1.2} + ) + ) + return doc + + +def test_doc_location_map_forward(map_doc: DesignSpaceDocument): + assert map_doc.map_forward({"Weight": 400, "Width": 150, "Custom": 2}) == { + "Weight": 40, + "Width": 15000, + "Custom": 2, + }, "The mappings should be used to compute the design locations" + assert map_doc.map_forward({"Weight": 400}) == { + "Weight": 40, + "Width": 10000, + "Custom": 1.5, + }, "Missing user locations should be assumed equal to the axis's default" + + +def test_doc_location_map_backward(map_doc: DesignSpaceDocument): + assert map_doc.map_backward({"Weight": 40, "Width": 15000, "Custom": 2}) == { + "Weight": 400, + "Width": 150, + "Custom": 2, + }, "The mappings should be used to compute the user locations" + assert map_doc.map_backward({"Weight": 40}) == { + "Weight": 400, + "Width": 100, + "Custom": 1.5, + }, "Missing design locations should be assumed equal to the axis's default" + assert map_doc.map_backward( + {"Weight": (40, 50), "Width": (15000, 100000), "Custom": (2, 1.5)} + ) == { + "Weight": 400, + "Width": 150, + "Custom": 2, + }, "Only the xvalue of anisotropic locations is used" + + +def test_instance_location_from_label(map_doc): + inst = InstanceDescriptor(locationLabel="Wonky") + assert inst.getFullUserLocation(map_doc) == { + "Weight": 800, + "Width": 100, + "Custom": 1.2, + }, "an instance with a locationLabel uses the user location from that label, empty values on the label use axis defaults" + assert inst.getFullDesignLocation(map_doc) == { + "Weight": 80, + "Width": 10000, + "Custom": 1.2, + }, "an instance with a locationLabel computes the design location from that label, empty values on the label use axis defaults" + + inst = InstanceDescriptor(locationLabel="Wonky", userLocation={"Width": 200}) + assert inst.getFullUserLocation(map_doc) == { + "Weight": 800, + "Width": 100, + "Custom": 1.2, + }, "an instance with a locationLabel uses the user location from that label, other location values are ignored" + assert inst.getFullDesignLocation(map_doc) == { + "Weight": 80, + "Width": 10000, + "Custom": 1.2, + }, "an instance with a locationLabel computes the design location from that label, other location values are ignored" + + +def test_instance_location_no_data(map_doc): + inst = InstanceDescriptor() + assert inst.getFullUserLocation(map_doc) == { + "Weight": 100, + "Width": 100, + "Custom": 1.5, + }, "an instance without any location data has the default user location" + assert inst.getFullDesignLocation(map_doc) == { + "Weight": 10, + "Width": 10000, + "Custom": 1.5, + }, "an instance without any location data has the default design location" + + +def test_instance_location_design_first(map_doc): + inst = InstanceDescriptor( + designLocation={"Weight": (60, 61), "Width": 11000, "Custom": 1.2}, + userLocation={"Weight": 700, "Width": 180, "Custom": 1.4}, + ) + assert inst.getFullUserLocation(map_doc) == { + "Weight": 600, + "Width": 110, + "Custom": 1.2, + }, "when both design and user location data are provided, design wins" + assert inst.getFullDesignLocation(map_doc) == { + "Weight": (60, 61), + "Width": 11000, + "Custom": 1.2, + }, "when both design and user location data are provided, design wins (incl. anisotropy)" + + +def test_instance_location_mix(map_doc): + inst = InstanceDescriptor( + designLocation={"Weight": (60, 61)}, + userLocation={"Width": 180}, + ) + assert inst.getFullUserLocation(map_doc) == { + "Weight": 600, + "Width": 180, + "Custom": 1.5, + }, "instance location is a mix of design and user locations" + assert inst.getFullDesignLocation(map_doc) == { + "Weight": (60, 61), + "Width": 18000, + "Custom": 1.5, + }, "instance location is a mix of design and user location" + + +@pytest.mark.parametrize( + "filename", + [ + "test_v4_original.designspace", + "test_v5_original.designspace", + "test_v5_aktiv.designspace", + "test_v5_decovar.designspace", + "test_v5_discrete.designspace", + "test_v5_sourceserif.designspace", + "test_v5.designspace", + ], +) +def test_roundtrip(tmpdir, datadir, filename): + test_file = datadir / filename + output_path = tmpdir / filename + # Move the file to the tmpdir so that the filenames stay the same + # (they're relative to the file's path) + shutil.copy(test_file, output_path) + doc = DesignSpaceDocument.fromfile(output_path) + doc.write(output_path) + # The input XML has comments and empty lines for documentation purposes + xml = test_file.read_text(encoding="utf-8") + xml = re.sub( + r"<!-- ROUNDTRIP_TEST_REMOVE_ME_BEGIN -->(.|\n)*?<!-- ROUNDTRIP_TEST_REMOVE_ME_END -->", + "", + xml, + ) + xml = re.sub(r"<!--(.|\n)*?-->", "", xml) + xml = re.sub(r"\s*\n+", "\n", xml) + assert output_path.read_text(encoding="utf-8") == xml + + +def test_using_v5_features_upgrades_format(tmpdir, datadir): + test_file = datadir / "test_v4_original.designspace" + output_4_path = tmpdir / "test_v4.designspace" + output_5_path = tmpdir / "test_v5.designspace" + shutil.copy(test_file, output_4_path) + doc = DesignSpaceDocument.fromfile(output_4_path) + doc.write(output_4_path) + assert 'format="4.1"' in output_4_path.read_text(encoding="utf-8") + doc.addVariableFont(VariableFontDescriptor(name="TestVF")) + doc.write(output_5_path) + assert 'format="5.0"' in output_5_path.read_text(encoding="utf-8") + + +def test_addAxisDescriptor_discrete(): + ds = DesignSpaceDocument() + + axis = ds.addAxisDescriptor( + name="Italic", + tag="ital", + values=[0, 1], + default=0, + hidden=True, + map=[(0, -12), (1, 0)], + axisOrdering=3, + axisLabels=[ + AxisLabelDescriptor( + name="Roman", + userValue=0, + elidable=True, + olderSibling=True, + linkedUserValue=1, + labelNames={"fr": "Romain"}, + ) + ], + ) + + assert ds.axes[0] is axis + assert_descriptors_equal( + [axis], + [ + DiscreteAxisDescriptor( + tag="ital", + name="Italic", + values=[0, 1], + default=0, + hidden=True, + map=[(0, -12), (1, 0)], + axisOrdering=3, + axisLabels=[ + AxisLabelDescriptor( + name="Roman", + userValue=0, + elidable=True, + olderSibling=True, + linkedUserValue=1, + labelNames={"fr": "Romain"}, + ) + ], + ) + ], + ) + + +def test_addLocationLabelDescriptor(): + ds = DesignSpaceDocument() + + label = ds.addLocationLabelDescriptor( + name="Somewhere", + userLocation={}, + elidable=True, + olderSibling=True, + labelNames={"fr": "Quelque part"}, + ) + + assert ds.locationLabels[0] is label + assert_descriptors_equal( + [label], + [ + LocationLabelDescriptor( + name="Somewhere", + userLocation={}, + elidable=True, + olderSibling=True, + labelNames={"fr": "Quelque part"}, + ) + ], + ) + + +def test_addVariableFontDescriptor(): + ds = DesignSpaceDocument() + + vf = ds.addVariableFontDescriptor(name="TestVF", filename="TestVF.ttf") + + assert ds.variableFonts[0] is vf + assert_descriptors_equal( + [vf], [VariableFontDescriptor(name="TestVF", filename="TestVF.ttf")] + ) diff --git a/Tests/designspaceLib/fixtures.py b/Tests/designspaceLib/fixtures.py new file mode 100644 index 00000000..66041bed --- /dev/null +++ b/Tests/designspaceLib/fixtures.py @@ -0,0 +1,8 @@ +from pathlib import Path + +import pytest + + +@pytest.fixture +def datadir(): + return Path(__file__).parent / "data" diff --git a/Tests/designspaceLib/split_test.py b/Tests/designspaceLib/split_test.py new file mode 100644 index 00000000..8708f704 --- /dev/null +++ b/Tests/designspaceLib/split_test.py @@ -0,0 +1,150 @@ +import shutil +from pathlib import Path + +import pytest +from fontTools.designspaceLib import DesignSpaceDocument +from fontTools.designspaceLib.split import splitInterpolable, splitVariableFonts, convert5to4 + +from .fixtures import datadir + +UPDATE_REFERENCE_OUT_FILES_INSTEAD_OF_TESTING = False + + +@pytest.mark.parametrize( + "test_ds,expected_interpolable_spaces", + [ + ( + "test_v5_aktiv.designspace", + [ + ( + {}, + { + "AktivGroteskVF_Italics_Wght", + "AktivGroteskVF_Italics_WghtWdth", + "AktivGroteskVF_Wght", + "AktivGroteskVF_WghtWdth", + "AktivGroteskVF_WghtWdthItal", + }, + ) + ], + ), + ( + "test_v5_sourceserif.designspace", + [ + ( + {"italic": 0}, + {"SourceSerif4Variable-Roman"}, + ), + ( + {"italic": 1}, + {"SourceSerif4Variable-Italic"}, + ), + ], + ), + ( + "test_v5_MutatorSans_and_Serif.designspace", + [ + ( + {"serif": 0}, + { + "MutatorSansVariable_Weight_Width", + "MutatorSansVariable_Weight", + "MutatorSansVariable_Width", + }, + ), + ( + {"serif": 1}, + { + "MutatorSerifVariable_Width", + }, + ), + ], + ), + ], +) +def test_split(datadir, tmpdir, test_ds, expected_interpolable_spaces): + data_in = datadir / test_ds + temp_in = Path(tmpdir) / test_ds + shutil.copy(data_in, temp_in) + doc = DesignSpaceDocument.fromfile(temp_in) + + for i, (location, sub_doc) in enumerate(splitInterpolable(doc)): + expected_location, expected_vf_names = expected_interpolable_spaces[i] + assert location == expected_location + vfs = list(splitVariableFonts(sub_doc)) + assert expected_vf_names == set(vf[0] for vf in vfs) + + loc_str = "_".join(f"{name}_{value}"for name, value in sorted(location.items())) + data_out = datadir / "split_output" / f"{temp_in.stem}_{loc_str}.designspace" + temp_out = Path(tmpdir) / "out" / f"{temp_in.stem}_{loc_str}.designspace" + temp_out.parent.mkdir(exist_ok=True) + sub_doc.write(temp_out) + + if UPDATE_REFERENCE_OUT_FILES_INSTEAD_OF_TESTING: + data_out.write_text(temp_out.read_text(encoding="utf-8"), encoding="utf-8") + else: + assert data_out.read_text(encoding="utf-8") == temp_out.read_text( + encoding="utf-8" + ) + + for vf_name, vf_doc in vfs: + data_out = (datadir / "split_output" / vf_name).with_suffix(".designspace") + temp_out = (Path(tmpdir) / "out" / vf_name).with_suffix(".designspace") + temp_out.parent.mkdir(exist_ok=True) + vf_doc.write(temp_out) + + if UPDATE_REFERENCE_OUT_FILES_INSTEAD_OF_TESTING: + data_out.write_text( + temp_out.read_text(encoding="utf-8"), encoding="utf-8" + ) + else: + assert data_out.read_text(encoding="utf-8") == temp_out.read_text( + encoding="utf-8" + ) + + + + +@pytest.mark.parametrize( + "test_ds,expected_vfs", + [ + ( + "test_v5_aktiv.designspace", + { + "AktivGroteskVF_Italics_Wght", + "AktivGroteskVF_Italics_WghtWdth", + "AktivGroteskVF_Wght", + "AktivGroteskVF_WghtWdth", + "AktivGroteskVF_WghtWdthItal", + }, + ), + ( + "test_v5_sourceserif.designspace", + { + "SourceSerif4Variable-Italic", + "SourceSerif4Variable-Roman", + }, + ), + ], +) +def test_convert5to4(datadir, tmpdir, test_ds, expected_vfs): + data_in = datadir / test_ds + temp_in = tmpdir / test_ds + shutil.copy(data_in, temp_in) + doc = DesignSpaceDocument.fromfile(temp_in) + + variable_fonts = convert5to4(doc) + + assert variable_fonts.keys() == expected_vfs + for vf_name, vf in variable_fonts.items(): + data_out = (datadir / "convert5to4_output" / vf_name).with_suffix(".designspace") + temp_out = (Path(tmpdir) / "out" / vf_name).with_suffix(".designspace") + temp_out.parent.mkdir(exist_ok=True) + vf.write(temp_out) + + if UPDATE_REFERENCE_OUT_FILES_INSTEAD_OF_TESTING: + data_out.write_text(temp_out.read_text(encoding="utf-8"), encoding="utf-8") + else: + assert data_out.read_text(encoding="utf-8") == temp_out.read_text( + encoding="utf-8" + ) diff --git a/Tests/designspaceLib/statNames_test.py b/Tests/designspaceLib/statNames_test.py new file mode 100644 index 00000000..076abc90 --- /dev/null +++ b/Tests/designspaceLib/statNames_test.py @@ -0,0 +1,61 @@ +from fontTools.designspaceLib import DesignSpaceDocument +from fontTools.designspaceLib.statNames import StatNames, getStatNames + +from .fixtures import datadir + + +def test_instance_getStatNames(datadir): + doc = DesignSpaceDocument.fromfile(datadir / "test_v5_sourceserif.designspace") + + assert getStatNames(doc, doc.instances[0].getFullUserLocation(doc)) == StatNames( + familyNames={"en": "Source Serif 4"}, + styleNames={"en": "Caption ExtraLight"}, + postScriptFontName="SourceSerif4-CaptionExtraLight", + styleMapFamilyNames={"en": "Source Serif 4 Caption ExtraLight"}, + styleMapStyleName="regular", + ) + + +def test_not_all_ordering_specified_and_translations(datadir): + doc = DesignSpaceDocument.fromfile(datadir / "test_v5.designspace") + + assert getStatNames(doc, {"weight": 200, "width": 125, "Italic": 1}) == StatNames( + familyNames={ + "en": "MasterFamilyName", + "fr": "Montserrat", + "ja": "モンセラート", + }, + styleNames={ + "fr": "Wide Extra léger Italic", + "de": "Wide Extraleicht Italic", + "en": "Wide Extra Light Italic", + }, + postScriptFontName="MasterFamilyName-WideExtraLightItalic", + styleMapFamilyNames={ + "en": "MasterFamilyName Wide Extra Light", + "fr": "Montserrat Wide Extra léger", + "de": "MasterFamilyName Wide Extraleicht", + "ja": "モンセラート Wide Extra Light", + }, + styleMapStyleName="italic", + ) + + +def test_detect_ribbi_aktiv(datadir): + doc = DesignSpaceDocument.fromfile(datadir / "test_v5_aktiv.designspace") + + assert getStatNames(doc, {"Weight": 600, "Width": 125, "Italic": 1}) == StatNames( + familyNames={"en": "Aktiv Grotesk"}, + styleNames={"en": "Ex SemiBold Italic"}, + postScriptFontName="AktivGrotesk-ExSemiBoldItalic", + styleMapFamilyNames={"en": "Aktiv Grotesk Ex SemiBold"}, + styleMapStyleName="italic", + ) + + assert getStatNames(doc, {"Weight": 700, "Width": 75, "Italic": 1}) == StatNames( + familyNames={"en": "Aktiv Grotesk"}, + styleNames={"en": "Cd Bold Italic"}, + postScriptFontName="AktivGrotesk-CdBoldItalic", + styleMapFamilyNames={"en": "Aktiv Grotesk Cd"}, + styleMapStyleName="bold italic", + ) diff --git a/Tests/feaLib/data/spec6h_ii.ttx b/Tests/feaLib/data/spec6h_ii.ttx index 2f0efc6f..e8ec85f2 100644 --- a/Tests/feaLib/data/spec6h_ii.ttx +++ b/Tests/feaLib/data/spec6h_ii.ttx @@ -112,23 +112,25 @@ </MarkBasePos> </Lookup> <Lookup index="2"> - <LookupType value="7"/> + <LookupType value="8"/> <LookupFlag value="0"/> <!-- SubTableCount=1 --> - <ContextPos index="0" Format="3"> - <!-- GlyphCount=3 --> - <!-- PosCount=2 --> - <Coverage index="0"> + <ChainContextPos index="0" Format="3"> + <!-- BacktrackGlyphCount=0 --> + <!-- InputGlyphCount=3 --> + <InputCoverage index="0"> <Glyph value="T"/> - </Coverage> - <Coverage index="1"> + </InputCoverage> + <InputCoverage index="1"> <Glyph value="c"/> <Glyph value="o"/> - </Coverage> - <Coverage index="2"> + </InputCoverage> + <InputCoverage index="2"> <Glyph value="grave"/> <Glyph value="acute"/> - </Coverage> + </InputCoverage> + <!-- LookAheadGlyphCount=0 --> + <!-- PosCount=2 --> <PosLookupRecord index="0"> <SequenceIndex value="0"/> <LookupListIndex value="0"/> @@ -137,7 +139,7 @@ <SequenceIndex value="2"/> <LookupListIndex value="1"/> </PosLookupRecord> - </ContextPos> + </ChainContextPos> </Lookup> </LookupList> </GPOS> diff --git a/Tests/feaLib/data/spec6h_iii_3d.ttx b/Tests/feaLib/data/spec6h_iii_3d.ttx index 2335dd0b..a608f0e6 100644 --- a/Tests/feaLib/data/spec6h_iii_3d.ttx +++ b/Tests/feaLib/data/spec6h_iii_3d.ttx @@ -30,23 +30,25 @@ <LookupList> <!-- LookupCount=2 --> <Lookup index="0"> - <LookupType value="7"/> + <LookupType value="8"/> <LookupFlag value="0"/> <!-- SubTableCount=1 --> - <ContextPos index="0" Format="3"> - <!-- GlyphCount=2 --> - <!-- PosCount=1 --> - <Coverage index="0"> + <ChainContextPos index="0" Format="3"> + <!-- BacktrackGlyphCount=0 --> + <!-- InputGlyphCount=2 --> + <InputCoverage index="0"> <Glyph value="L"/> - </Coverage> - <Coverage index="1"> + </InputCoverage> + <InputCoverage index="1"> <Glyph value="quoteright"/> - </Coverage> + </InputCoverage> + <!-- LookAheadGlyphCount=0 --> + <!-- PosCount=1 --> <PosLookupRecord index="0"> <SequenceIndex value="1"/> <LookupListIndex value="1"/> </PosLookupRecord> - </ContextPos> + </ChainContextPos> </Lookup> <Lookup index="1"> <LookupType value="1"/> diff --git a/Tests/fontBuilder/fontBuilder_test.py b/Tests/fontBuilder/fontBuilder_test.py index 6368cb87..775e94d9 100644 --- a/Tests/fontBuilder/fontBuilder_test.py +++ b/Tests/fontBuilder/fontBuilder_test.py @@ -1,13 +1,13 @@ import os import pytest -import re from fontTools.ttLib import TTFont from fontTools.pens.ttGlyphPen import TTGlyphPen from fontTools.pens.t2CharStringPen import T2CharStringPen from fontTools.fontBuilder import FontBuilder from fontTools.ttLib.tables.TupleVariation import TupleVariation from fontTools.misc.psCharStrings import T2CharString +from fontTools.misc.testTools import stripVariableItemsFromTTX def getTestData(fileName, mode="r"): @@ -16,16 +16,6 @@ def getTestData(fileName, mode="r"): return f.read() -def strip_VariableItems(string): - # ttlib changes with the fontTools version - string = re.sub(' ttLibVersion=".*"', '', string) - # head table checksum and creation and mod date changes with each save. - string = re.sub('<checkSumAdjustment value="[^"]+"/>', '', string) - string = re.sub('<modified value="[^"]+"/>', '', string) - string = re.sub('<created value="[^"]+"/>', '', string) - return string - - def drawTestGlyph(pen): pen.moveTo((100, 100)) pen.lineTo((100, 1000)) @@ -91,8 +81,8 @@ def _verifyOutput(outPath, tables=None): f = TTFont(outPath) f.saveXML(outPath + ".ttx", tables=tables) with open(outPath + ".ttx") as f: - testData = strip_VariableItems(f.read()) - refData = strip_VariableItems(getTestData(os.path.basename(outPath) + ".ttx")) + testData = stripVariableItemsFromTTX(f.read()) + refData = stripVariableItemsFromTTX(getTestData(os.path.basename(outPath) + ".ttx")) assert refData == testData diff --git a/Tests/merge/data/CFFFont_expected.ttx b/Tests/merge/data/CFFFont_expected.ttx index 6e0acc22..c8870e44 100644 --- a/Tests/merge/data/CFFFont_expected.ttx +++ b/Tests/merge/data/CFFFont_expected.ttx @@ -834,7 +834,7 @@ <!-- The fields 'usFirstCharIndex' and 'usLastCharIndex' will be recalculated by the compiler --> <version value="4"/> - <xAvgCharWidth value="505"/> + <xAvgCharWidth value="501"/> <usWeightClass value="400"/> <usWidthClass value="5"/> <fsType value="00000000 00000000"/> diff --git a/Tests/misc/configTools_test.py b/Tests/misc/configTools_test.py new file mode 100644 index 00000000..94afb233 --- /dev/null +++ b/Tests/misc/configTools_test.py @@ -0,0 +1,80 @@ +import dataclasses +import pytest + +from fontTools.misc.configTools import ( + AbstractConfig, + Option, + Options, + ConfigUnknownOptionError, +) + + +def test_can_create_custom_config_system(): + class MyConfig(AbstractConfig): + options = Options() + + MyConfig.register_option( + "test:option_name", + "This is an option", + 0, + int, + lambda v: isinstance(v, int), + ) + + cfg = MyConfig({"test:option_name": "10"}, parse_values=True) + + assert 10 == cfg["test:option_name"] + + # This config is independent from "the" fontTools config + with pytest.raises(ConfigUnknownOptionError): + MyConfig({"fontTools.otlLib.optimize.gpos:COMPRESSION_LEVEL": 4}) + + # Test the repr() + assert repr(cfg) == "MyConfig({'test:option_name': 10})" + + # Test the skip_unknown param: just check that the following does not raise + MyConfig({"test:unknown": "whatever"}, skip_unknown=True) + + # Test that it raises on unknown option + with pytest.raises(ConfigUnknownOptionError): + cfg.get("test:unknown") + + +def test_options_are_unique(): + class MyConfig(AbstractConfig): + options = Options() + + opt1 = MyConfig.register_option("test:OPT_1", "", "foo", str, any) + cfg = MyConfig({opt1: "bar"}) + assert cfg[opt1] == "bar" + + opt2 = Option("test:OPT_1", "", "foo", str, any) + + assert dataclasses.asdict(opt1) == dataclasses.asdict(opt2) + assert opt1 != opt2 + + with pytest.raises(ConfigUnknownOptionError): + cfg.get(opt2) + with pytest.raises(ConfigUnknownOptionError): + cfg.set(opt2, "bar") + + +def test_optional_bool(): + for v in ("yes", "YES", "Yes", "1", "True", "true", "TRUE"): + assert Option.parse_optional_bool(v) is True + + for v in ("no", "NO", "No", "0", "False", "false", "FALSE"): + assert Option.parse_optional_bool(v) is False + + for v in ("auto", "AUTO", "Auto", "None", "none", "NONE"): + assert Option.parse_optional_bool(v) is None + + with pytest.raises(ValueError, match="invalid optional bool"): + Option.parse_optional_bool("foobar") + + assert Option.validate_optional_bool(True) + assert Option.validate_optional_bool(False) + assert Option.validate_optional_bool(None) + assert not Option.validate_optional_bool(1) + assert not Option.validate_optional_bool(0) + assert not Option.validate_optional_bool("1") diff --git a/Tests/misc/psCharStrings_test.py b/Tests/misc/psCharStrings_test.py index 47ff4fda..5e36fe73 100644 --- a/Tests/misc/psCharStrings_test.py +++ b/Tests/misc/psCharStrings_test.py @@ -8,6 +8,7 @@ from fontTools.misc.psCharStrings import ( read_fixed1616, read_realNumber, ) +from fontTools.pens.recordingPen import RecordingPen import unittest @@ -158,6 +159,14 @@ class T2CharStringTest(unittest.TestCase): self.assertNotIsInstance(expected_arg, str) self.assertAlmostEqual(arg, expected_arg) + def test_pen_closePath(self): + # Test CFF2/T2 charstring: it does NOT end in "endchar" + # https://github.com/fonttools/fonttools/issues/2455 + cs = self.stringToT2CharString("100 100 rmoveto -50 -150 200 0 -50 150 rrcurveto") + pen = RecordingPen() + cs.draw(pen) + self.assertEqual(pen.value[-1], ('closePath', ())) + if __name__ == "__main__": import sys diff --git a/Tests/otlLib/optimize_test.py b/Tests/otlLib/optimize_test.py index 40cf389e..a2e43322 100644 --- a/Tests/otlLib/optimize_test.py +++ b/Tests/otlLib/optimize_test.py @@ -1,17 +1,15 @@ +import contextlib import logging +import os from pathlib import Path from subprocess import run -import contextlib -import os from typing import List, Optional, Tuple -from fontTools.ttLib import TTFont import pytest - from fontTools.feaLib.builder import addOpenTypeFeaturesFromString from fontTools.fontBuilder import FontBuilder - -from fontTools.ttLib.tables.otBase import OTTableWriter, ValueRecord +from fontTools.ttLib import TTFont +from fontTools.ttLib.tables.otBase import OTTableWriter def test_main(tmpdir: Path): @@ -34,7 +32,7 @@ def test_main(tmpdir: Path): [ "fonttools", "otlLib.optimize", - "--gpos-compact-mode", + "--gpos-compression-level", "5", str(input), "-o", @@ -127,9 +125,9 @@ def get_kerning_by_blocks(blocks: List[Tuple[int, int]]) -> Tuple[List[str], str @pytest.mark.parametrize( - ("blocks", "mode", "expected_subtables", "expected_bytes"), + ("blocks", "level", "expected_subtables", "expected_bytes"), [ - # Mode = 0 = no optimization leads to 650 bytes of GPOS + # Level = 0 = no optimization leads to 650 bytes of GPOS ([(15, 3), (2, 10)], None, 1, 602), # Optimization level 1 recognizes the 2 blocks and splits into 2 # subtables = adds 1 subtable leading to a size reduction of @@ -143,13 +141,13 @@ def get_kerning_by_blocks(blocks: List[Tuple[int, int]]) -> Tuple[List[str], str ([(4, 4) for _ in range(20)], 9, 20, 1886), # On a fully occupied kerning matrix, even the strategy 9 doesn't # split anything. - ([(10, 10)], 9, 1, 304) + ([(10, 10)], 9, 1, 304), ], ) def test_optimization_mode( caplog, blocks: List[Tuple[int, int]], - mode: Optional[int], + level: Optional[int], expected_subtables: int, expected_bytes: int, ): @@ -161,15 +159,10 @@ def test_optimization_mode( glyphs, features = get_kerning_by_blocks(blocks) glyphs = [".notdef space"] + glyphs - env = {} - if mode is not None: - # NOTE: activating this optimization via the environment variable is - # experimental and may not be supported once an alternative mechanism - # is in place. See: https://github.com/fonttools/fonttools/issues/2349 - env["FONTTOOLS_GPOS_COMPACT_MODE"] = str(mode) - with set_env(**env): - fb = FontBuilder(1000) - fb.setupGlyphOrder(glyphs) - addOpenTypeFeaturesFromString(fb.font, features) - assert expected_subtables == count_pairpos_subtables(fb.font) - assert expected_bytes == count_pairpos_bytes(fb.font) + fb = FontBuilder(1000) + if level is not None: + fb.font.cfg["fontTools.otlLib.optimize.gpos:COMPRESSION_LEVEL"] = level + fb.setupGlyphOrder(glyphs) + addOpenTypeFeaturesFromString(fb.font, features) + assert expected_subtables == count_pairpos_subtables(fb.font) + assert expected_bytes == count_pairpos_bytes(fb.font) diff --git a/Tests/subset/data/expect_harfbuzz_repacker.ttx b/Tests/subset/data/expect_harfbuzz_repacker.ttx new file mode 100644 index 00000000..aeebe7ba --- /dev/null +++ b/Tests/subset/data/expect_harfbuzz_repacker.ttx @@ -0,0 +1,78 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="OTTO" ttLibVersion="4.29"> + + <GSUB> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=2 --> + <ScriptRecord index="0"> + <ScriptTag value="DFLT"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=1 --> + <FeatureIndex index="0" value="0"/> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + <ScriptRecord index="1"> + <ScriptTag value="hang"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=1 --> + <FeatureIndex index="0" value="1"/> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=2 --> + <FeatureRecord index="0"> + <FeatureTag value="aalt"/> + <Feature> + <!-- LookupCount=1 --> + <LookupListIndex index="0" value="0"/> + </Feature> + </FeatureRecord> + <FeatureRecord index="1"> + <FeatureTag value="jp90"/> + <Feature> + <!-- LookupCount=1 --> + <LookupListIndex index="0" value="1"/> + </Feature> + </FeatureRecord> + </FeatureList> + <LookupList> + <!-- LookupCount=2 --> + <Lookup index="0"> + <LookupType value="3"/> + <LookupFlag value="0"/> + <!-- SubTableCount=1 --> + <AlternateSubst index="0"> + <AlternateSet glyph="cid12223"> + <Alternate glyph="cid62031"/> + <Alternate glyph="cid62033"/> + <Alternate glyph="cid61789"/> + </AlternateSet> + <AlternateSet glyph="cid61789"> + <Alternate glyph="cid62031"/> + <Alternate glyph="cid62033"/> + <Alternate glyph="cid12223"/> + </AlternateSet> + </AlternateSubst> + </Lookup> + <Lookup index="1"> + <LookupType value="1"/> + <LookupFlag value="0"/> + <!-- SubTableCount=1 --> + <SingleSubst index="0"> + <Substitution in="cid12223" out="cid61789"/> + </SingleSubst> + </Lookup> + </LookupList> + </GSUB> + +</ttFont> diff --git a/Tests/subset/data/expect_lcar_0.ttx b/Tests/subset/data/expect_lcar_0.ttx index feb866d7..0edcaa11 100644 --- a/Tests/subset/data/expect_lcar_0.ttx +++ b/Tests/subset/data/expect_lcar_0.ttx @@ -12,5 +12,5 @@ </Carets> </LigatureCarets> </lcar> - + </ttFont> diff --git a/Tests/subset/data/expect_lcar_1.ttx b/Tests/subset/data/expect_lcar_1.ttx index 26b50082..72b4aabc 100644 --- a/Tests/subset/data/expect_lcar_1.ttx +++ b/Tests/subset/data/expect_lcar_1.ttx @@ -12,5 +12,5 @@ </Carets> </LigatureCarets> </lcar> - + </ttFont> diff --git a/Tests/subset/data/expect_opbd_0.ttx b/Tests/subset/data/expect_opbd_0.ttx index 55842a01..3f6c4199 100644 --- a/Tests/subset/data/expect_opbd_0.ttx +++ b/Tests/subset/data/expect_opbd_0.ttx @@ -14,5 +14,5 @@ </OpticalBoundsDeltas> </OpticalBounds> </opbd> - + </ttFont> diff --git a/Tests/subset/data/expect_opbd_1.ttx b/Tests/subset/data/expect_opbd_1.ttx index 080abd91..7b40401b 100644 --- a/Tests/subset/data/expect_opbd_1.ttx +++ b/Tests/subset/data/expect_opbd_1.ttx @@ -14,5 +14,5 @@ </OpticalBoundsPoints> </OpticalBounds> </opbd> - + </ttFont> diff --git a/Tests/subset/data/expect_prop_0.ttx b/Tests/subset/data/expect_prop_0.ttx index f8ca1509..64201e12 100644 --- a/Tests/subset/data/expect_prop_0.ttx +++ b/Tests/subset/data/expect_prop_0.ttx @@ -7,5 +7,5 @@ <DefaultProperties value="3"/> </GlyphProperties> </prop> - + </ttFont> diff --git a/Tests/subset/data/expect_prop_1.ttx b/Tests/subset/data/expect_prop_1.ttx index f7f2d23c..a582ac21 100644 --- a/Tests/subset/data/expect_prop_1.ttx +++ b/Tests/subset/data/expect_prop_1.ttx @@ -10,5 +10,5 @@ </Properties> </GlyphProperties> </prop> - + </ttFont> diff --git a/Tests/subset/data/harfbuzz_repacker.ttx b/Tests/subset/data/harfbuzz_repacker.ttx new file mode 100644 index 00000000..667d8687 --- /dev/null +++ b/Tests/subset/data/harfbuzz_repacker.ttx @@ -0,0 +1,1542 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="OTTO" ttLibVersion="4.29"> + + <GlyphOrder> + <!-- The 'id' attribute is only for humans; it is ignored when parsed. --> + <GlyphID id="0" name=".notdef"/> + <GlyphID id="1" name="cid12223"/> + <GlyphID id="2" name="cid12224"/> + <GlyphID id="3" name="cid12342"/> + <GlyphID id="4" name="cid15450"/> + <GlyphID id="5" name="cid15451"/> + <GlyphID id="6" name="cid15452"/> + <GlyphID id="7" name="cid18153"/> + <GlyphID id="8" name="cid18154"/> + <GlyphID id="9" name="cid18155"/> + <GlyphID id="10" name="cid59592"/> + <GlyphID id="11" name="cid59593"/> + <GlyphID id="12" name="cid61789"/> + <GlyphID id="13" name="cid61811"/> + <GlyphID id="14" name="cid62031"/> + <GlyphID id="15" name="cid62032"/> + <GlyphID id="16" name="cid62033"/> + <GlyphID id="17" name="cid62034"/> + <GlyphID id="18" name="cid62039"/> + <GlyphID id="19" name="cid62104"/> + <GlyphID id="20" name="cid62105"/> + <GlyphID id="21" name="cid62172"/> + </GlyphOrder> + + <head> + <!-- Most of this table will be recalculated by the compiler --> + <tableVersion value="1.0"/> + <fontRevision value="1.004"/> + <checkSumAdjustment value="0x96aa8849"/> + <magicNumber value="0x5f0f3cf5"/> + <flags value="00000000 00000011"/> + <unitsPerEm value="1000"/> + <created value="Mon Jun 15 05:06:56 2015"/> + <modified value="Sat Mar 5 04:13:07 2022"/> + <xMin value="30"/> + <yMin value="-82"/> + <xMax value="972"/> + <yMax value="838"/> + <macStyle value="00000000 00000000"/> + <lowestRecPPEM value="3"/> + <fontDirectionHint value="2"/> + <indexToLocFormat value="0"/> + <glyphDataFormat value="0"/> + </head> + + <hhea> + <tableVersion value="0x00010000"/> + <ascent value="1160"/> + <descent value="-320"/> + <lineGap value="0"/> + <advanceWidthMax value="1000"/> + <minLeftSideBearing value="30"/> + <minRightSideBearing value="28"/> + <xMaxExtent value="972"/> + <caretSlopeRise value="1"/> + <caretSlopeRun value="0"/> + <caretOffset value="0"/> + <reserved0 value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <metricDataFormat value="0"/> + <numberOfHMetrics value="1"/> + </hhea> + + <maxp> + <tableVersion value="0x5000"/> + <numGlyphs value="22"/> + </maxp> + + <OS_2> + <!-- The fields 'usFirstCharIndex' and 'usLastCharIndex' + will be recalculated by the compiler --> + <version value="3"/> + <xAvgCharWidth value="979"/> + <usWeightClass value="400"/> + <usWidthClass value="5"/> + <fsType value="00000000 00000000"/> + <ySubscriptXSize value="650"/> + <ySubscriptYSize value="600"/> + <ySubscriptXOffset value="0"/> + <ySubscriptYOffset value="75"/> + <ySuperscriptXSize value="650"/> + <ySuperscriptYSize value="600"/> + <ySuperscriptXOffset value="0"/> + <ySuperscriptYOffset value="350"/> + <yStrikeoutSize value="50"/> + <yStrikeoutPosition value="325"/> + <sFamilyClass value="0"/> + <panose> + <bFamilyType value="2"/> + <bSerifStyle value="11"/> + <bWeight value="5"/> + <bProportion value="0"/> + <bContrast value="0"/> + <bStrokeVariation value="0"/> + <bArmStyle value="0"/> + <bLetterForm value="0"/> + <bMidline value="0"/> + <bXHeight value="0"/> + </panose> + <ulUnicodeRange1 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange2 value="00001000 00000000 00000000 00000000"/> + <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/> + <achVendID value="GOOG"/> + <fsSelection value="00000000 01000000"/> + <usFirstCharIndex value="21417"/> + <usLastCharIndex value="24674"/> + <sTypoAscender value="880"/> + <sTypoDescender value="-120"/> + <sTypoLineGap value="0"/> + <usWinAscent value="1160"/> + <usWinDescent value="320"/> + <ulCodePageRange1 value="01100000 00101110 00000001 00000111"/> + <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/> + <sxHeight value="543"/> + <sCapHeight value="733"/> + <usDefaultChar value="0"/> + <usBreakChar value="32"/> + <usMaxContext value="6"/> + </OS_2> + + <name> + <namerecord nameID="0" platformID="3" platEncID="1" langID="0x409"> + Copyright © 2014, 2015 Adobe Systems Incorporated (http://www.adobe.com/). + </namerecord> + <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409"> + Noto Sans CJK JP Regular + </namerecord> + <namerecord nameID="2" platformID="3" platEncID="1" langID="0x409"> + Regular + </namerecord> + <namerecord nameID="3" platformID="3" platEncID="1" langID="0x409"> + 1.004;GOOG;NotoSansCJKjp-Regular;ADOBE + </namerecord> + <namerecord nameID="4" platformID="3" platEncID="1" langID="0x409"> + Noto Sans CJK JP Regular + </namerecord> + <namerecord nameID="5" platformID="3" platEncID="1" langID="0x409"> + Version 1.004;PS 1.004;hotconv 1.0.82;makeotf.lib2.5.63406 + </namerecord> + <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409"> + NotoSansCJKjp-Regular + </namerecord> + </name> + + <cmap> + <tableVersion version="0"/> + <cmap_format_4 platformID="0" platEncID="3" language="0"> + <map code="0x53a9" name="cid12223"/><!-- CJK UNIFIED IDEOGRAPH-53A9 --> + <map code="0x53f1" name="cid12342"/><!-- CJK UNIFIED IDEOGRAPH-53F1 --> + <map code="0x5abe" name="cid15450"/><!-- CJK UNIFIED IDEOGRAPH-5ABE --> + <map code="0x6062" name="cid18153"/><!-- CJK UNIFIED IDEOGRAPH-6062 --> + </cmap_format_4> + <cmap_format_12 platformID="0" platEncID="4" format="12" reserved="0" length="64" language="0" nGroups="4"> + <map code="0x53a9" name="cid12223"/><!-- CJK UNIFIED IDEOGRAPH-53A9 --> + <map code="0x53f1" name="cid12342"/><!-- CJK UNIFIED IDEOGRAPH-53F1 --> + <map code="0x5abe" name="cid15450"/><!-- CJK UNIFIED IDEOGRAPH-5ABE --> + <map code="0x6062" name="cid18153"/><!-- CJK UNIFIED IDEOGRAPH-6062 --> + </cmap_format_12> + <cmap_format_14 platformID="0" platEncID="5"> + <map uv="0x53f1" uvs="0xe0100"/> + <map uv="0x5abe" uvs="0xe0100"/> + <map uv="0x53a9" uvs="0xe0100" name="cid61789"/> + <map uv="0x6062" uvs="0xe0100" name="cid61811"/> + <map uv="0x53a9" uvs="0xe0101" name="cid62031"/> + <map uv="0x53f1" uvs="0xe0101" name="cid62039"/> + <map uv="0x5abe" uvs="0xe0101" name="cid62104"/> + <map uv="0x6062" uvs="0xe0101" name="cid62172"/> + <map uv="0x6062" uvs="0xe0102"/> + <map uv="0x53a9" uvs="0xe0102" name="cid62032"/> + <map uv="0x5abe" uvs="0xe0102" name="cid62105"/> + <map uv="0x53a9" uvs="0xe0103" name="cid62033"/> + <map uv="0x53a9" uvs="0xe0104" name="cid62034"/> + <map uv="0x53a9" uvs="0xe0105"/> + </cmap_format_14> + <cmap_format_4 platformID="3" platEncID="1" language="0"> + <map code="0x53a9" name="cid12223"/><!-- CJK UNIFIED IDEOGRAPH-53A9 --> + <map code="0x53f1" name="cid12342"/><!-- CJK UNIFIED IDEOGRAPH-53F1 --> + <map code="0x5abe" name="cid15450"/><!-- CJK UNIFIED IDEOGRAPH-5ABE --> + <map code="0x6062" name="cid18153"/><!-- CJK UNIFIED IDEOGRAPH-6062 --> + </cmap_format_4> + <cmap_format_12 platformID="3" platEncID="10" format="12" reserved="0" length="64" language="0" nGroups="4"> + <map code="0x53a9" name="cid12223"/><!-- CJK UNIFIED IDEOGRAPH-53A9 --> + <map code="0x53f1" name="cid12342"/><!-- CJK UNIFIED IDEOGRAPH-53F1 --> + <map code="0x5abe" name="cid15450"/><!-- CJK UNIFIED IDEOGRAPH-5ABE --> + <map code="0x6062" name="cid18153"/><!-- CJK UNIFIED IDEOGRAPH-6062 --> + </cmap_format_12> + </cmap> + + <post> + <formatType value="3.0"/> + <italicAngle value="0.0"/> + <underlinePosition value="-125"/> + <underlineThickness value="50"/> + <isFixedPitch value="0"/> + <minMemType42 value="0"/> + <maxMemType42 value="0"/> + <minMemType1 value="0"/> + <maxMemType1 value="0"/> + </post> + + <CFF> + <major value="1"/> + <minor value="0"/> + <CFFFont name="NotoSansCJKjp-Regular"> + <ROS Registry="Adobe" Order="Identity" Supplement="0"/> + <Notice value="Copyright 2014, 2015 Adobe Systems Incorporated (http://www.adobe.com/). Noto is a trademark of Google Inc."/> + <FullName value="Noto Sans CJK JP Regular"/> + <FamilyName value="Noto Sans CJK JP"/> + <Weight value="Regular"/> + <isFixedPitch value="0"/> + <ItalicAngle value="0"/> + <UnderlinePosition value="-150"/> + <UnderlineThickness value="50"/> + <PaintType value="0"/> + <CharstringType value="2"/> + <FontMatrix value="0.001 0 0 0.001 0 0"/> + <FontBBox value="30 -82 972 838"/> + <StrokeWidth value="0"/> + <XUID value="1 11 9274312"/> + <CIDFontVersion value="1.004"/> + <CIDFontRevision value="0"/> + <CIDFontType value="0"/> + <CIDCount value="65535"/> + <!-- charset is dumped separately as the 'GlyphOrder' element --> + <FDSelect format="3"/> + <FDArray> + <FontDict index="0"> + <FontName value="NotoSansCJKjp-Regular-Generic"/> + <Private> + <BlueValues value="-250 -250 1100 1100"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="1"/> + <StdHW value="40"/> + <StdVW value="40"/> + <StemSnapH value="40 120"/> + <StemSnapV value="40 120"/> + <ForceBold value="0"/> + <LanguageGroup value="1"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="1000"/> + <nominalWidthX value="107"/> + </Private> + </FontDict> + <FontDict index="1"> + <FontName value="NotoSansCJKjp-Regular-Ideographs"/> + <Private> + <BlueValues value="-250 -250 1100 1100"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="1"/> + <StdHW value="58"/> + <StdVW value="63"/> + <StemSnapH value="58 65 84"/> + <StemSnapV value="63 73 89"/> + <ForceBold value="0"/> + <LanguageGroup value="1"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="1000"/> + <nominalWidthX value="0"/> + <Subrs> + <!-- The 'index' attribute is only for humans; it is ignored when parsed. --> + <CharString index="0"> + -351 rmoveto + -8 48 -27 80 -31 60 -101 callsubr + return + </CharString> + <CharString index="1"> + 68 16 113 -95 callsubr + return + </CharString> + <CharString index="2"> + 77 -94 callsubr + return + </CharString> + <CharString index="3"> + 7 -100 callsubr + return + </CharString> + <CharString index="4"> + hlineto + 14 70 12 68 11 61 -68 6 rcurveline + -10 -62 -12 -71 -14 -72 rrcurveto + -97 -67 84 -85 callsubr + return + </CharString> + <CharString index="5"> + -59.5 return + </CharString> + <CharString index="6"> + -46 -17 rcurveline + 28 -62 26 -81 8 -50 rrcurveto + return + </CharString> + <CharString index="7"> + -92 callsubr + -34 return + </CharString> + <CharString index="8"> + -103 callsubr + 11 44 30 return + </CharString> + <CharString index="9"> + -96 callsubr + 141 -71 callsubr + return + </CharString> + <CharString index="10"> + -98 callsubr + 190 -107 callsubr + return + </CharString> + <CharString index="11"> + -106 callsubr + -60 rlinecurve + return + </CharString> + <CharString index="12"> + 90 vvcurveto + -50 -104 callsubr + return + </CharString> + <CharString index="13"> + -89 callsubr + 87 return + </CharString> + <CharString index="14"> + hlineto + hintmask 011000000010101000000000 + -62 181 vlineto + -31 -154 -66 -109 -129 -72 22 17 10 33 4 65 -18 5 -26 9 -14 11 rrcurveto + -80 -4 -4 -12 -27 hhcurveto + -113 hlineto + -33 -5 4 24 hvcurveto + 87 vlineto + 80 19 87 29 62 32 -54 46 rcurveline + -41 -26 -68 -26 -66 -20 rrcurveto + 98 -65 -240 vlineto + -68 19 -19 77 vhcurveto + -96 callgsubr + 18 15 2 7 11 hvcurveto + 14 -11 27 -24 10 -12 87 54 60 66 41 85 rrcurveto + hintmask 100000000000001010000000 + -92 vlineto + -55 5 -16 15 -12 vhcurveto + -12 13 23 -4 18 hhcurveto + 53 hlineto + 18 21 3 6 11 hvcurveto + 14 7 9 13 5 18 5 17 3 52 1 44 -16 5 -20 10 -12 11 rrcurveto + -48 -2 -37 -2 -16 vhcurveto + -3 -15 -4 -9 -5 -3 rrcurveto + -3 -5 -12 -2 -9 hhcurveto + endchar + </CharString> + <CharString index="15"> + -2 -87 -16 -108 return + </CharString> + <CharString index="16"> + -86 callsubr + -23 31 -26 29 -76 callsubr + 72 45 58 63 45 86 37 -37 32 -36 22 -31 45 60 rcurveline + return + </CharString> + <CharString index="17"> + 16 -78 callsubr + return + </CharString> + <CharString index="18"> + vlineto + -220 vmoveto + return + </CharString> + <CharString index="19"> + 70 912 -70 return + </CharString> + <CharString index="20"> + 135 62 187 36 230 rrcurveto + 318 -129 rmoveto + -16 -85 -28 -89 -34 -60 15 -5 27 -13 11 -9 34 63 31 95 19 90 rrcurveto + -337 5 rmoveto + -12 -84 -21 -85 -36 -58 15 -7 24 -15 10 -9 36 62 26 93 15 93 rrcurveto + 58 112 rmoveto + -13 -323 -42 -198 -222 -79 14 -15 19 -26 9 -20 128 51 72 83 42 122 42 -113 66 -88 92 -48 11 18 20 25 16 13 -112 49 -72 112 -36 137 17 84 8 99 4 114 rrcurveto + endchar + </CharString> + <CharString index="21"> + -100 callgsubr + -120 -99 callsubr + return + </CharString> + <CharString index="22"> + hlineto + -24 -124 -27 -121 -22 -85 59 -35 rcurveline + return + </CharString> + <CharString index="23"> + 189 721 rmoveto + 755 68 -825 -294 hlineto + -156 -7 -220 -76 -157 vhcurveto + 18 -7 31 -18 14 -11 rrcurveto + 79 164 11 241 164 vvcurveto + return + </CharString> + <CharString index="24"> + 104 54 73 69 50 91 rrcurveto + -117 vlineto + -45 4 -14 16 -13 vhcurveto + -13 14 23 -3 22 hhcurveto + 55 hlineto + 18 22 3 7 12 hvcurveto + 15 8 10 12 6 18 6 17 3 50 1 45 -17 6 -24 13 -12 12 1 -46 -2 -40 -2 -15 -3 -11 -6 -7 -5 -4 rrcurveto + -3 -6 -12 -1 -10 hhcurveto + endchar + </CharString> + <CharString index="25"> + 284 -154 rmoveto + -70 -166 70 vlineto + -193 vmoveto + 71 166 -71 vlineto + 70 -316 rmoveto + 56 -236 75 230 54 -230 75 227 305 -140 vlineto + 10 22 11 26 11 24 -69 16 rcurveline + -5 -25 -10 -35 -10 -28 rrcurveto + -89 -678 64 -92 callgsubr + return + </CharString> + <CharString index="26"> + rmoveto + 69 913 -69 hlineto + return + </CharString> + <CharString index="27"> + 61 -31 69 75 53 cntrmask 0110111011111000 + cntrmask 1001000110100101 + hintmask 1110110111111101 + 949 715 rmoveto + 68 -827 -281 vlineto + -154 -7 -218 -77 -155 vhcurveto + 18 -7 30 -18 14 -11 rrcurveto + 81 163 10 238 162 vvcurveto + 213 vlineto + return + </CharString> + <CharString index="28"> + 6 -99 callgsubr + return + </CharString> + <CharString index="29"> + -15 19 -26 10 -18 return + </CharString> + <CharString index="30"> + -164 68 164 345 -85 hlineto + -13 -69 callsubr + 9 -18 9 -25 3 -18 -49 callsubr + 26 -107 callgsubr + 85 56 vlineto + endchar + </CharString> + <CharString index="31"> + -27 rlinecurve + -43 -85 -56 -59 callsubr + return + </CharString> + <CharString index="32"> + rmoveto + -88 callsubr + hlineto + return + </CharString> + <CharString index="33"> + -14 -1 vhcurveto + -13 -1 -48 0 return + </CharString> + <CharString index="34"> + -147 69 114 55 -114 60 134 57 -134 82 -68 -82 -154 82 -67 -82 -129 -57 129 -60 -105 -55 105 -69 -144 -56 250 -57 hlineto + return + </CharString> + <CharString index="35"> + -55 9 -4 -83 -18 -109 -27 -64 rlinecurve + 126 -467 -81 callsubr + 193 -350 rmoveto + -8 48 -27 79 -29 62 -53 -20 rcurveline + 28 -63 return + </CharString> + <CharString index="36"> + -465 -75 callsubr + return + </CharString> + <CharString index="37"> + hstemhm + 83 50 39 70 return + </CharString> + <CharString index="38"> + -60 callsubr + -52 2 return + </CharString> + <CharString index="39"> + -61.5 return + </CharString> + <CharString index="40"> + -38 -90 callsubr + return + </CharString> + <CharString index="41"> + 68 -102 callsubr + return + </CharString> + <CharString index="42"> + hstem + 83 50 39 70 return + </CharString> + <CharString index="43"> + 232 -58 callsubr + 762 return + </CharString> + <CharString index="44"> + -134 hlineto + 134 return + </CharString> + <CharString index="45"> + rrcurveto + hintmask 101000000000001000000000 + 85 -380 rmoveto + -9 -7 2 4 -4 hvcurveto + -5 3 -1 11 19 vvcurveto + 275 -6 4 return + </CharString> + <CharString index="46"> + 10 18 20 25 16 return + </CharString> + <CharString index="47"> + -4 -54 callsubr + return + </CharString> + <CharString index="48"> + -62 -67 -67 callsubr + return + </CharString> + <CharString index="49"> + -57 callsubr + -50 callsubr + return + </CharString> + <CharString index="50"> + -53 callsubr + -90 -34 29 -35 28 return + </CharString> + <CharString index="51"> + rmoveto + -11 -131 -23 -110 return + </CharString> + <CharString index="52"> + -124 hlineto + 124 return + </CharString> + <CharString index="53"> + -3 -74 callsubr + return + </CharString> + <CharString index="54"> + -56 callsubr + -33 return + </CharString> + <CharString index="55"> + -40 -79 callsubr + return + </CharString> + <CharString index="56"> + 120 -69 -120 return + </CharString> + <CharString index="57"> + -34 25 18 76 18 87 18 86 rrcurveto + return + </CharString> + <CharString index="58"> + rrcurveto + 72 45 0 11 28 hvcurveto + return + </CharString> + <CharString index="59"> + hvcurveto + 25 11 7 19 36 vvcurveto + return + </CharString> + <CharString index="60"> + -7 31 -18 13 -11 rrcurveto + return + </CharString> + <CharString index="61"> + -14 19 -25 9 -17 return + </CharString> + </Subrs> + </Private> + </FontDict> + </FDArray> + <CharStrings> + <CharString name=".notdef" fdSelectIndex="0"> + endchar + </CharString> + <CharString name="cid12223" fdSelectIndex="1"> + -67 64 55 56 75 54 74 61 -60 56 71 52 70 56 -46 61 83 68 hstemhm + 122 69 54 64 166 61 61 61 80 -80 callsubr + hintmask 0110111000110000 + -82 callsubr + hintmask 0001000100001010 + 349 320 rmoveto + 199 -95 callgsubr + -4 -73 -6 -66 -11 -60 rrcurveto + hintmask 1001000000000100 + 82 -375 rmoveto + -10 -7 1 4 -5 hvcurveto + -6 3 -2 6 8 vvcurveto + 281 vlineto + 3 11 rlineto + 144 61 hlineto + hintmask 0001000100001010 + -86 callgsubr + 11 60 7 66 5 73 rrcurveto + 99 61 -339 -260 -40 -61 177 hlineto + -41 -161 -80 -107 -154 -69 16 -12 27 -27 9 -11 rrcurveto + hintmask 1000000000001101 + -83 callsubr + </CharString> + <CharString name="cid12224" fdSelectIndex="1"> + -58 57 292 65 -54 59 88 56 75 61 80 68 hstemhm + 119 71 55 66 155 64 86 63 58 68 -43 66 81 53 cntrmask 1100111100101000 + cntrmask 0011100110000000 + hintmask 1011111111101000 + 946 721 rmoveto + 68 -827 -333 vlineto + -149 -6 -202 -73 -143 vhcurveto + 18 -7 32 -18 13 -13 rrcurveto + 76 151 11 225 156 vvcurveto + 265 vlineto + 276 -139 rmoveto + -77 -155 77 vlineto + -221 vmoveto + 88 155 -88 vlineto + 79 -307 rmoveto + -16 54 -46 86 -43 64 -53 -21 rcurveline + 17 -28 18 -31 16 -30 -127 -47 rcurveline + 201 219 340 -285 -514 vlineto + -41 -22 -22 -16 -9 vhcurveto + 12 -15 16 -28 6 -18 rrcurveto + -1 vlineto + 17 15 27 13 178 71 11 -24 9 -21 5 -19 rrcurveto + 343 -30 rmoveto + -8 -7 1 4 -5 hvcurveto + -5 3 -1 10 18 vvcurveto + hintmask 1101111111101000 + 220 -34 vlineto + 3 12 4 12 4 12 rrcurveto + 154 65 hlineto + hintmask 1101111111011000 + -139 hlineto + 17 77 9 77 5 70 rrcurveto + 104 61 -341 -61 -83 callgsubr + -5 -68 -8 -79 -18 -77 rrcurveto + -91 hlineto + 14 58 16 85 9 39 rrcurveto + -63 hlineto + -7 -39 -22 -117 -9 -18 -6 -16 -8 -5 -12 -5 7 -13 15 -30 5 -16 rrcurveto + -1 vlineto + 8 8 29 5 37 hhcurveto + 60 hlineto + -38 -122 -70 -115 -131 -72 17 -12 20 -21 10 -15 rrcurveto + hintmask 1011111111101000 + 104 59 67 84 45 94 rrcurveto + -130 vlineto + -55 6 -16 15 -11 vhcurveto + -12 14 24 -5 20 hhcurveto + 55 hlineto + 16 23 3 6 12 hvcurveto + 14 7 9 11 6 17 6 17 3 47 2 41 -18 6 -22 10 -13 11 rrcurveto + -43 -1 -33 -4 -16 vhcurveto + -2 -12 -4 -8 -6 -3 rrcurveto + -3 -5 -10 -1 -10 hhcurveto + endchar + </CharString> + <CharString name="cid12342" fdSelectIndex="1"> + -59 73 170 70 411 69 hstem + 77 72 144 73 189 76 255 72 cntrmask 01111100 + 293 665 rmoveto + -411 -144 411 vlineto + 217 69 rmoveto + -289 -646 72 96 217 hlineto + 316 -170 rmoveto + -43 -8 10 50 hvcurveto + 287 vlineto + 112 75 108 90 83 96 -72 49 rcurveline + -61 -77 -82 -75 -88 -65 rrcurveto + 361 -76 -414 vlineto + -60 -39 -60 -35 -58 -27 17 -15 24 -26 12 -16 41 20 42 23 42 26 rrcurveto + -236 vlineto + -105 27 -30 91 vhcurveto + -97 callgsubr + 93 20 60 167 10 hvcurveto + -22 5 -30 14 -20 16 rrcurveto + -150 -5 -7 -39 -43 hhcurveto + endchar + </CharString> + <CharString name="cid15450" fdSelectIndex="1"> + -75 62 102 61 74 52 71 54 60 55 48 67 -45 53 64 55 hstemhm + 311 71 57 68 17 66 41 69 44 67 19 69 cntrmask 1111101101010100 + cntrmask 0000000000101000 + hintmask 1111101101010100 + 700 150 rmoveto + 74 130 -74 vlineto + -323 74 rmoveto + 124 -74 -55 callsubr + 197 rmoveto + -71 -124 71 vlineto + 323 hmoveto + -71 -130 71 vlineto + hintmask 0000010010000000 + -389 217 -58 callsubr + hintmask 0000101100101000 + 395 22 rmoveto + 154 -70 -154 hlineto + 187 vmoveto + 154 -64 -154 hlineto + hintmask 0101100000010100 + 367 -489 rmoveto + -58 251 -199 60 252 55 hlineto + hintmask 0001101100111000 + -141 70 103 53 -103 64 122 55 -122 78 -67 -78 -154 78 -66 -78 -125 -55 125 -64 -98 -53 98 -70 -138 -55 245 -60 hlineto + hintmask 1101010011000100 + -192 -251 -65 -40 hlineto + -21 24 -26 25 -28 25 45 113 27 145 11 185 -43 6 rcurveline + -91 callsubr + -4 5 -4 6 -5 5 rrcurveto + 47 -164 68 164 323 -87 hlineto + -11 -4 -3 -11 -1 vhcurveto + -13 -1 -40 0 -46 1 8 -17 11 -27 3 -18 rrcurveto + 62 41 0 11 26 -48 callsubr + 87 58 vlineto + endchar + </CharString> + <CharString name="cid15451" fdSelectIndex="1"> + -76 61 101 59 74 52 72 56 57 56 51 68 -50 55 60 57 hstemhm + 160 67 55 69 66 68 28 67 39 66 49 68 28 69 cntrmask 1111101100101010 + cntrmask 0000000000010100 + hintmask 1111101100101010 + 685 145 rmoveto + 74 145 -74 vlineto + -345 74 rmoveto + 134 -74 -63 callsubr + 198 rmoveto + -72 -134 72 vlineto + 345 hmoveto + -72 -145 72 vlineto + hintmask 0000010001000000 + -403 220 rmoveto + -10 -120 -18 -101 -29 -86 -29 24 -31 22 -29 21 17 69 18 84 16 87 rrcurveto + hintmask 0000101100010100 + 393 18 rmoveto + 154 -69 -154 hlineto + 184 vmoveto + 154 -60 -154 hlineto + hintmask 0101100000001010 + 375 -491 rmoveto + -56 254 -214 57 264 56 hlineto + hintmask 0001101100011100 + -73 callsubr + hintmask 1101010011100010 + -202 -254 -51 -17 hlineto + -24 27 -29 28 -34 29 39 107 24 137 9 171 -52 callsubr + -100 hlineto + 12 68 10 67 6 61 -67 3 rcurveline + -6 -61 -9 -68 -11 -70 rrcurveto + -90 -68 78 hlineto + -19 -102 -22 -98 -21 -71 45 -31 48 -38 44 -38 -42 -93 -56 -66 -69 -40 14 -46 callsubr + 73 48 60 67 44 93 38 -36 31 -36 22 -30 47 50 rcurveline + 30 -77 callsubr + </CharString> + <CharString name="cid15452" fdSelectIndex="1"> + -76 61 101 59 74 52 72 56 57 56 -103 callgsubr + 70 -68 callsubr + -66 callsubr + 66 -102 callgsubr + 55 60 57 hstemhm + 43 139 -45 68 57 66 41 17 31 68 28 67 39 66 49 68 28 69 cntrmask 111110001100110101000000 + cntrmask 000000000000001010100000 + hintmask 000000100000100000000000 + 262 556 rmoveto + -1 -96 -8 -114 -39 -111 -27 25 -29 25 -27 24 14 70 15 84 14 87 rrcurveto + -105 callgsubr + 211 13 rmoveto + hintmask 000000001000110000000000 + 1 66 -58 -3 rlineto + hintmask 000000100010100000000000 + 69 -66 -72 vlineto + -80 -4 rlineto + -106 callgsubr + 10 74 8 72 5 65 -68 3 rcurveline + -4 -66 -8 -76 -10 -75 rrcurveto + hintmask 000001000010100000000000 + -76 -3 8 -70 60 3 -15 -97 -17 -93 -16 -68 rlinecurve + 41 -35 45 -42 41 -42 -32 -70 -47 -68 -68 -61 17 -10 24 -22 11 -15 65 59 47 66 34 68 29 -32 26 -29 17 -24 44 55 rcurveline + -20 28 -31 33 -35 35 rrcurveto + hintmask 011100010000101010100000 + 51 132 9 135 1 111 rrcurveto + 357 -415 rmoveto + 74 145 -74 vlineto + -345 74 rmoveto + 134 -74 -63 callsubr + 198 rmoveto + -72 -134 72 vlineto + 345 hmoveto + -72 -145 72 vlineto + hintmask 000010001100000101000000 + -105 238 rmoveto + 154 -69 -154 hlineto + 184 vmoveto + 154 -60 -154 hlineto + hintmask 010110000000000010100000 + 375 -491 rmoveto + -56 254 -214 57 264 56 hlineto + hintmask 000110001100010111000000 + -73 callsubr + hintmask 110100000000001000100000 + -202 -254 -51 -59 51 -77 callsubr + </CharString> + <CharString name="cid18153" fdSelectIndex="1"> + 656 68 -65 callsubr + 161 66 60 55 87 68 cntrmask 01110100 + 81 367 rmoveto + 36 -97 callsubr + 157 192 rmoveto + 486 68 -486 112 -66 -112 -82 -68 82 -109 hlineto + -191 -12 -213 -118 -175 vhcurveto + 17 -9 26 -21 13 -13 rrcurveto + 127 187 13 228 208 vvcurveto + 382 -272 rmoveto + 32 56 37 93 31 77 -65 16 rcurveline + -19 -69 -39 -99 -30 -60 rrcurveto + -274 -33 rmoveto + 40 57 12 94 8 84 -55 13 rcurveline + -5 -81 -15 -88 -34 -51 rrcurveto + 264 344 rmoveto + -68 -259 hlineto + -71 -36 -210 -209 -108 vhcurveto + 13 -15 19 -28 9 -15 165 88 61 159 12 71 12 -70 55 -164 154 -84 10 17 20 29 12 15 rrcurveto + -195 105 -34 212 69 vvcurveto + endchar + </CharString> + <CharString name="cid18154" fdSelectIndex="1"> + 617 68 hstemhm + 92 55 22 69 266 70 128 63 hintmask 11000000 + 99 370 rmoveto + 28 72 17 113 3 83 rrcurveto + hintmask 10111000 + -72 callsubr + 26 -81 7 -50 rrcurveto + 635 -89 callgsubr + 68 -384 vlineto + 7 47 5 49 5 51 -70 6 rcurveline + -5 -53 -5 -51 -7 -49 rrcurveto + -139 -68 130 hlineto + -33 -210 -57 -173 -109 -118 16 -12 28 -26 11 -13 115 -87 callsubr + </CharString> + <CharString name="cid18155" fdSelectIndex="1"> + 617 68 hstemhm + 92 55 22 69 240 70 -54 70 -8 60 76 66 cntrmask 00100010 + hintmask 11000000 + 99 370 rmoveto + 28 72 17 113 3 83 rrcurveto + hintmask 10110000 + -72 callsubr + 25 -81 8 -50 rrcurveto + 635 -89 callgsubr + 68 -393 vlineto + hintmask 10001000 + 6 47 5 49 5 51 -70 6 rcurveline + hintmask 10010000 + -4 -53 -6 -51 -6 -49 rrcurveto + -131 -68 -84 callgsubr + -32 -213 -56 -176 -109 -120 16 -11 29 -26 10 -14 116 137 60 191 35 232 rrcurveto + 332 -129 rmoveto + -19 -82 -32 -90 -33 -62 16 -5 26 -13 13 -9 31 64 35 97 22 85 rrcurveto + hintmask 10000110 + -313 -229 rmoveto + -4 59 -16 107 -16 84 -56 -9 rcurveline + 14 -83 14 -109 4 -64 rrcurveto + 136 355 rmoveto + -6 -328 -13 -180 -251 -94 14 -13 20 -25 9 -17 138 55 71 80 39 115 42 -112 66 -89 93 -48 -61 callsubr + 13 -113 50 -73 115 -36 139 14 84 4 98 2 114 rrcurveto + endchar + </CharString> + <CharString name="cid59592" fdSelectIndex="1"> + -49 71 205 69 377 70 hstem + 79 70 159 71 161 75 281 69 cntrmask 01111100 + 308 673 rmoveto + -377 -159 377 vlineto + 230 70 rmoveto + -300 -602 70 86 230 hlineto + 292 -205 rmoveto + -47 -9 10 51 hvcurveto + 345 vlineto + 345 85 -18 68 -327 -80 rlineto + 319 -75 -337 vlineto + -158 -39 17 -69 141 35 rlineto + -326 vlineto + -105 29 -28 95 vhcurveto + 178 hlineto + 92 21 53 154 10 hvcurveto + -21 6 -29 13 -19 13 rrcurveto + -134 -6 -7 -34 -45 hhcurveto + endchar + </CharString> + <CharString name="cid59593" fdSelectIndex="1"> + -50 72 192 70 219 73 97 70 hstem + 78 71 159 72 160 75 254 70 cntrmask 10101110 + cntrmask 01010000 + 308 673 rmoveto + -389 -159 389 vlineto + 231 70 rmoveto + -302 -626 71 97 231 hlineto + 576 289 rmoveto + 73 -341 244 -75 -244 -116 -73 116 -421 vlineto + -104 27 -28 90 vhcurveto + -90 callgsubr + 89 20 53 154 10 hvcurveto + -22 5 -29 14 -19 14 rrcurveto + -134 -6 -6 -34 -41 hhcurveto + -85 callgsubr + -42 -9 10 48 hvcurveto + 423 vlineto + endchar + </CharString> + <CharString name="cid61789" fdSelectIndex="1"> + -65 59 305 63 87 56 74 63 79 68 hstemhm + 119 70 59 65 157 64 59 63 82 68 -33 69 71 52 cntrmask 1111111110000000 + cntrmask 0000001001010000 + -87 callgsubr + 189 721 rmoveto + 755 68 -825 -294 hlineto + -157 -7 -219 -81 -157 vhcurveto + 18 -47 callsubr + 85 164 11 240 165 vvcurveto + 281 87 rmoveto + -77 -157 -105 callsubr + 157 -87 vlineto + 97 -316 rmoveto + -15 58 -45 88 -46 65 -59 -20 rcurveline + 19 -27 19 -32 16 -31 -49 -18 -49 -17 -45 -15 rrcurveto + 205 221 340 -286 -567 vlineto + -23 -8 -21 -7 -19 -6 24 -67 rcurveline + 77 30 99 37 96 38 10 -25 9 -24 5 -20 rrcurveto + 151 339 rmoveto + 217 vlineto + hintmask 0101000000100000 + -94 callgsubr + -3 -75 -5 -73 -13 -69 rrcurveto + hintmask 1100000001000000 + 81 -368 rmoveto + -9 -6 1 3 -5 hvcurveto + -5 4 -2 11 19 vvcurveto + 264 vlineto + 1 3 rlineto + 144 63 hlineto + hintmask 0101000010100000 + -131 hlineto + 12 69 6 74 4 74 rrcurveto + 92 63 -341 -280 -38 -63 182 hlineto + -39 -140 -82 -117 -184 -68 15 -13 20 -25 8 -16 rrcurveto + hintmask 1000000011010000 + 127 49 82 73 54 87 rrcurveto + -92 vlineto + -56 6 -16 15 -13 vhcurveto + -12 14 25 -5 20 hhcurveto + 56 hlineto + 17 23 3 6 11 hvcurveto + 15 7 10 12 6 18 rrcurveto + 6 15 3 48 41 vvcurveto + -16 6 -23 11 -13 12 rrcurveto + -43 -2 -34 -2 -14 vhcurveto + -2 -14 -5 -8 -6 -3 rrcurveto + -3 -5 -12 -1 -10 hhcurveto + endchar + </CharString> + <CharString name="cid61811" fdSelectIndex="1"> + -75 40 751 67 -65 callsubr + 133 69 77 58 86 72 cntrmask 00111010 + 81 367 rmoveto + 36 -97 callsubr + 132 252 rmoveto + 499 67 -568 -300 hlineto + -156 -10 -212 -102 -150 vhcurveto + 17 -7 32 -18 13 -11 rrcurveto + 104 154 15 236 164 vvcurveto + 403 -190 rmoveto + 31 57 38 92 30 78 -66 15 rcurveline + -19 -68 -39 -99 -30 -60 rrcurveto + -275 -36 rmoveto + 40 56 14 95 8 85 -58 14 rcurveline + -7 -81 -16 -87 -35 -52 rrcurveto + 274 352 rmoveto + -72 -268 hlineto + -74 -38 -216 -214 -112 vhcurveto + 13 -15 21 -30 9 -16 169 90 63 165 12 73 13 -72 56 -169 158 -87 11 18 21 31 13 15 rrcurveto + -200 110 -35 217 72 vvcurveto + endchar + </CharString> + <CharString name="cid62031" fdSelectIndex="1"> + -65 53 -29 60 287 62 -58 51 78 49 78 51 -45 62 82 63 hstemhm + 122 70 48 61 -58 65 165 62 -41 58 53 61 83 63 -43 65 81 48 cntrmask 010111011101010000000000 + cntrmask 101000110010001010000000 + hintmask 010110111101011010000000 + 949 716 rmoveto + 63 -827 -297 vlineto + -153 -7 -214 -77 -152 vhcurveto + 18 -7 31 -19 14 -11 rrcurveto + 80 159 11 236 161 vvcurveto + 234 vlineto + 281 -228 rmoveto + -172 hlineto + hintmask 000111000101010000000000 + 78 172 vlineto + -205 vmoveto + -172 78 172 hlineto + 62 178 rmoveto + -128 hlineto + 10 22 11 23 10 24 -69 16 rcurveline + -6 -24 -11 -32 -11 -29 rrcurveto + -101 -307 295 hlineto + 131 58 rmoveto + hintmask 000100100000010100000000 + 204 103 vlineto + -3 -75 -4 -68 -9 -61 -62 callsubr + 140 vlineto + hintmask 000100100000010100000000 + 62 -129 vlineto + 9 62 5 67 3 75 rrcurveto + 104 62 -333 -266 -44 -93 callsubr + </CharString> + <CharString name="cid62032" fdSelectIndex="1"> + -67 64 55 56 75 54 70 61 -56 56 71 52 70 56 -47 60 85 68 hstemhm + 122 69 54 64 166 61 66 61 75 -80 callsubr + hintmask 1110111011111101 + -82 callsubr + 520 -55 rmoveto + -10 -7 1 4 -5 hvcurveto + -6 3 -2 6 8 vvcurveto + hintmask 1111010111111101 + 281 vlineto + 2 7 rlineto + 148 61 hlineto + hintmask 1111010111111011 + -91 callgsubr + 11 61 8 67 5 74 rrcurveto + 101 60 -365 -60 -88 callgsubr + -4 -74 -6 -68 -12 -60 rrcurveto + -83 167 -61 hlineto + hintmask 1110110111111101 + -167 -44 vlineto + hintmask 1111010111111101 + -61 175 vlineto + -41 -159 -80 -106 -153 -68 16 -12 27 -27 9 -11 -83 callsubr + </CharString> + <CharString name="cid62033" fdSelectIndex="1"> + -65 58 304 63 -59 59 88 55 76 63 79 68 hstemhm + 119 70 58 65 158 63 83 58 63 68 -32 68 71 53 cntrmask 1100111111000000 + cntrmask 0011100100101000 + hintmask 1101111111100000 + -84 callsubr + 281 87 rmoveto + -79 -158 79 vlineto + hintmask 0011100110000000 + -221 vmoveto + 87 158 -87 vlineto + 98 -316 rmoveto + -15 59 -44 88 -46 65 -59 -20 rcurveline + 19 -27 18 -32 16 -31 -50 -17 -49 -17 -46 -16 rrcurveto + 204 221 341 -286 -567 vlineto + -23 -7 -21 -7 -19 -6 26 -67 rcurveline + 78 29 99 39 95 37 11 -26 8 -24 5 -20 rrcurveto + hintmask 0100100001010000 + 168 337 rmoveto + 219 99 vlineto + -4 -75 -5 -74 -13 -70 rrcurveto + hintmask 1100000000100000 + 81 -367 rmoveto + -9 -6 1 3 -5 hvcurveto + -6 4 -1 11 18 vvcurveto + 264 -1 vlineto + 1 3 rlineto + 145 63 hlineto + hintmask 0100100001010000 + -86 callgsubr + 13 70 6 74 4 75 rrcurveto + 96 63 -371 -63 50 -219 -62 -63 182 hlineto + -40 -139 -83 -118 -182 -68 15 -13 19 -24 9 -17 rrcurveto + hintmask 1000000000101000 + 127 50 82 74 54 88 rrcurveto + -94 vlineto + -56 5 -16 16 -13 vhcurveto + -12 14 25 -4 20 hhcurveto + 56 hlineto + 17 23 2 6 11 hvcurveto + 15 7 10 12 6 17 6 16 3 48 1 41 -18 5 -23 12 -12 12 rrcurveto + -44 -2 -33 -2 -15 vhcurveto + -2 -13 -5 -8 -6 -3 rrcurveto + -3 -5 -12 -1 -10 hhcurveto + endchar + </CharString> + <CharString name="cid62034" fdSelectIndex="1"> + -65 53 -29 60 287 62 -58 51 78 49 78 51 -43 60 82 63 hstemhm + 122 70 48 61 -58 65 165 62 -41 58 59 59 79 63 -43 66 80 48 cntrmask 010111011101010000000000 + cntrmask 101000110010001010000000 + hintmask 010110111101011010000000 + 949 716 rmoveto + 63 -827 -297 vlineto + -153 -7 -214 -77 -152 vhcurveto + 18 -7 31 -19 14 -11 rrcurveto + 80 159 11 236 161 vvcurveto + 234 vlineto + 281 -228 rmoveto + -172 hlineto + hintmask 000111000101010000000000 + 78 172 vlineto + -205 vmoveto + -172 78 172 hlineto + 62 178 rmoveto + -128 hlineto + 10 22 11 23 10 24 -69 16 rcurveline + -6 -24 -11 -32 -11 -29 rrcurveto + -101 -307 295 hlineto + 135 58 rmoveto + hintmask 000100100000010100000000 + 206 99 vlineto + -3 -76 -4 -68 -9 -62 -62 callsubr + 141 vlineto + hintmask 000100100000010100000000 + 62 -130 vlineto + 9 62 5 69 4 75 rrcurveto + 100 60 -367 -60 43 -206 -50 -93 callsubr + </CharString> + <CharString name="cid62039" fdSelectIndex="1"> + -52 71 206 69 377 69 hstem + 79 70 162 72 100 75 331 70 cntrmask 01111100 + 311 671 rmoveto + -377 -162 377 vlineto + 234 69 rmoveto + -304 -618 70 103 234 hlineto + 240 -206 rmoveto + -54 -11 12 55 hvcurveto + 261 vlineto + 131 76 143 98 93 94 -55 48 rcurveline + -74 -77 -120 -88 -118 -70 rrcurveto + 407 -75 -748 vlineto + -109 32 -30 103 vhcurveto + 206 hlineto + 102 22 56 157 11 hvcurveto + -21 5 -30 13 -19 14 rrcurveto + -138 -7 -9 -36 -53 hhcurveto + endchar + </CharString> + <CharString name="cid62104" fdSelectIndex="1"> + -76 61 94 56 74 54 69 54 80 56 42 67 -43 53 64 55 hstemhm + 311 71 61 68 13 66 41 69 44 67 15 69 cntrmask 1111101101010100 + cntrmask 0000000000101000 + hintmask 0110101100111000 + 590 588 rmoveto + 154 -66 -154 hlineto + 183 vmoveto + 154 -64 -154 hlineto + 362 -119 rmoveto + -141 66 103 53 -103 64 122 55 -122 76 -67 -76 -154 76 -66 -76 -123 -55 123 -64 -98 -53 98 -66 -138 -56 566 hlineto + -252 -331 rmoveto + 74 vlineto + hintmask 1111010011010100 + 126 -74 hlineto + -315 74 rmoveto + 120 -74 -120 hlineto + 197 vmoveto + -51 callsubr + hlineto + 315 69 rmoveto + -69 -126 69 vlineto + -389 -64 callsubr + -429 rmoveto + -62 74 52 54 -52 123 -195 59 -69 -59 -188 -123 -66 -54 66 -74 -71 -23 hlineto + -21 23 -25 25 -27 24 45 113 27 145 11 185 -43 6 rcurveline + -91 callsubr + -5 6 rlineto + 43 -155 68 155 315 -79 hlineto + -11 -4 -4 -11 vhcurveto + -13 -1 -40 0 -46 2 9 -17 10 -27 3 -18 rrcurveto + 62 41 1 10 26 hvcurveto + 25 11 7 19 35 vvcurveto + 79 -101 callgsubr + </CharString> + <CharString name="cid62105" fdSelectIndex="1"> + -76 61 94 58 74 52 69 54 80 54 44 67 -45 53 65 54 hstemhm + 311 71 57 68 17 66 43 65 46 67 19 69 cntrmask 1111101101010100 + cntrmask 0000000000101000 + hintmask 0110101100111000 + 590 586 rmoveto + 154 -66 -154 hlineto + 184 vmoveto + 154 -65 -154 hlineto + 362 -119 rmoveto + -141 66 104 53 -104 65 122 54 -122 78 -67 -78 -154 78 -66 -78 -123 -54 123 -65 -98 -53 98 -66 -138 -54 566 hlineto + -254 -329 rmoveto + 74 vlineto + hintmask 1111010011010100 + 132 -74 hlineto + -323 74 rmoveto + 126 -74 -126 hlineto + 126 195 rmoveto + -69 -126 69 vlineto + 323 hmoveto + -69 -132 69 vlineto + -387 -64 callsubr + -427 rmoveto + -58 249 -201 57 -65 -57 -194 -249 -67 -25 hlineto + -21 23 -25 25 -27 24 45 113 27 145 11 185 -43 6 rcurveline + -86 callsubr + -23 30 -26 30 -76 callsubr + 71 45 58 63 45 85 38 -37 32 -36 22 -30 45 60 rcurveline + -5 6 rlineto + 39 -155 68 155 323 -79 hlineto + -11 -4 -4 -11 vhcurveto + -13 -1 -40 0 -46 2 8 -18 11 -26 3 -18 rrcurveto + 62 41 1 10 26 hvcurveto + 25 11 7 19 35 vvcurveto + 79 58 vlineto + endchar + </CharString> + <CharString name="cid62172" fdSelectIndex="1"> + 650 68 -70 callsubr + 223 69 6 54 77 66 cntrmask 01100100 + hintmask 11110100 + 81 367 rmoveto + 36 -97 callsubr + 639 186 rmoveto + 68 -427 vlineto + 4 37 3 39 3 39 -69 4 rcurveline + -3 -41 -3 -39 -4 -39 rrcurveto + -120 -68 -93 callgsubr + -26 -209 -49 -177 -98 -117 17 -8 35 -20 12 -10 99 131 50 184 29 226 rrcurveto + 340 -406 rmoveto + 27 56 33 88 25 73 -63 15 rcurveline + -16 -64 -33 -95 -27 -58 rrcurveto + hintmask 10001100 + -277 -30 rmoveto + 43 53 16 90 10 83 -54 14 rcurveline + -9 -80 -19 -84 -40 -51 rrcurveto + 265 349 rmoveto + -66 -247 hlineto + -69 -35 -203 -212 -104 vhcurveto + 13 -15 19 -26 8 -16 167 86 61 154 12 68 12 -68 53 -158 155 -82 10 16 19 28 12 16 rrcurveto + -196 101 -32 206 66 vvcurveto + endchar + </CharString> + </CharStrings> + </CFFFont> + + <GlobalSubrs> + <!-- The 'index' attribute is only for humans; it is ignored when parsed. --> + <CharString index="0"> + 11 -104 callgsubr + return + </CharString> + <CharString index="1"> + hintmask 000001000001000000000000 + return + </CharString> + <CharString index="2"> + hintmask 000000010000010000000000 + return + </CharString> + <CharString index="3"> + 8 18 37 vvcurveto + return + </CharString> + <CharString index="4"> + 32.5 return + </CharString> + <CharString index="5"> + -46.5 return + </CharString> + <CharString index="6"> + 62 vlineto + endchar + </CharString> + <CharString index="7"> + -11 -2 rlineto + return + </CharString> + <CharString index="8"> + rcurveline + -98 callgsubr + return + </CharString> + <CharString index="9"> + -12 -2 rlineto + return + </CharString> + <CharString index="10"> + 162 hlineto + return + </CharString> + <CharString index="11"> + 127 hlineto + return + </CharString> + <CharString index="12"> + 110 vlineto + return + </CharString> + <CharString index="13"> + 117 hlineto + return + </CharString> + <CharString index="14"> + 112 hlineto + return + </CharString> + <CharString index="15"> + 113 hlineto + return + </CharString> + <CharString index="16"> + -136 hlineto + return + </CharString> + <CharString index="17"> + 163 hlineto + return + </CharString> + <CharString index="18"> + 155 rmoveto + return + </CharString> + <CharString index="19"> + 195 hlineto + return + </CharString> + <CharString index="20"> + hintmask 1111111111000000 + return + </CharString> + <CharString index="21"> + -132 hlineto + return + </CharString> + <CharString index="22"> + -150 hlineto + return + </CharString> + <CharString index="23"> + 122 hlineto + return + </CharString> + <CharString index="24"> + 171 hlineto + return + </CharString> + </GlobalSubrs> + </CFF> + + <GSUB> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=2 --> + <ScriptRecord index="0"> + <ScriptTag value="DFLT"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=1 --> + <FeatureIndex index="0" value="0"/> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + <ScriptRecord index="1"> + <ScriptTag value="hang"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=1 --> + <FeatureIndex index="0" value="1"/> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=2 --> + <FeatureRecord index="0"> + <FeatureTag value="aalt"/> + <Feature> + <!-- LookupCount=1 --> + <LookupListIndex index="0" value="0"/> + </Feature> + </FeatureRecord> + <FeatureRecord index="1"> + <FeatureTag value="jp90"/> + <Feature> + <!-- LookupCount=1 --> + <LookupListIndex index="0" value="1"/> + </Feature> + </FeatureRecord> + </FeatureList> + <LookupList> + <!-- LookupCount=2 --> + <Lookup index="0"> + <LookupType value="3"/> + <LookupFlag value="0"/> + <!-- SubTableCount=1 --> + <AlternateSubst index="0"> + <AlternateSet glyph="cid12223"> + <Alternate glyph="cid62031"/> + <Alternate glyph="cid62033"/> + <Alternate glyph="cid61789"/> + </AlternateSet> + <AlternateSet glyph="cid12342"> + <Alternate glyph="cid62039"/> + <Alternate glyph="cid59592"/> + </AlternateSet> + <AlternateSet glyph="cid15450"> + <Alternate glyph="cid62104"/> + <Alternate glyph="cid62105"/> + </AlternateSet> + <AlternateSet glyph="cid18153"> + <Alternate glyph="cid62172"/> + <Alternate glyph="cid61811"/> + </AlternateSet> + <AlternateSet glyph="cid61789"> + <Alternate glyph="cid62031"/> + <Alternate glyph="cid62033"/> + <Alternate glyph="cid12223"/> + </AlternateSet> + <AlternateSet glyph="cid61811"> + <Alternate glyph="cid62172"/> + <Alternate glyph="cid18153"/> + </AlternateSet> + </AlternateSubst> + </Lookup> + <Lookup index="1"> + <LookupType value="1"/> + <LookupFlag value="0"/> + <!-- SubTableCount=1 --> + <SingleSubst index="0"> + <Substitution in="cid12223" out="cid61789"/> + <Substitution in="cid18153" out="cid61811"/> + </SingleSubst> + </Lookup> + </LookupList> + </GSUB> + + <VORG> + <majorVersion value="1"/> + <minorVersion value="0"/> + <defaultVertOriginY value="880"/> + <numVertOriginYMetrics value="0"/> + </VORG> + + <hmtx> + <mtx name=".notdef" width="1000" lsb="100"/> + <mtx name="cid12223" width="1000" lsb="38"/> + <mtx name="cid12224" width="1000" lsb="40"/> + <mtx name="cid12342" width="1000" lsb="77"/> + <mtx name="cid15450" width="1000" lsb="44"/> + <mtx name="cid15451" width="1000" lsb="30"/> + <mtx name="cid15452" width="1000" lsb="39"/> + <mtx name="cid18153" width="1000" lsb="31"/> + <mtx name="cid18154" width="1000" lsb="43"/> + <mtx name="cid18155" width="1000" lsb="43"/> + <mtx name="cid59592" width="1000" lsb="79"/> + <mtx name="cid59593" width="1000" lsb="78"/> + <mtx name="cid61789" width="1000" lsb="31"/> + <mtx name="cid61811" width="1000" lsb="31"/> + <mtx name="cid62031" width="1000" lsb="38"/> + <mtx name="cid62032" width="1000" lsb="38"/> + <mtx name="cid62033" width="1000" lsb="36"/> + <mtx name="cid62034" width="1000" lsb="38"/> + <mtx name="cid62039" width="1000" lsb="79"/> + <mtx name="cid62104" width="1000" lsb="44"/> + <mtx name="cid62105" width="1000" lsb="44"/> + <mtx name="cid62172" width="1000" lsb="31"/> + </hmtx> + + <vhea> + <tableVersion value="0x00011000"/> + <ascent value="500"/> + <descent value="-500"/> + <lineGap value="0"/> + <advanceHeightMax value="1000"/> + <minTopSideBearing value="42"/> + <minBottomSideBearing value="38"/> + <yMaxExtent value="962"/> + <caretSlopeRise value="0"/> + <caretSlopeRun value="1"/> + <caretOffset value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <reserved4 value="0"/> + <metricDataFormat value="0"/> + <numberOfVMetrics value="1"/> + </vhea> + + <vmtx> + <mtx name=".notdef" height="1000" tsb="0"/> + <mtx name="cid12223" height="1000" tsb="97"/> + <mtx name="cid12224" height="1000" tsb="91"/> + <mtx name="cid12342" height="1000" tsb="65"/> + <mtx name="cid15450" height="1000" tsb="44"/> + <mtx name="cid15451" height="1000" tsb="45"/> + <mtx name="cid15452" height="1000" tsb="45"/> + <mtx name="cid18153" height="1000" tsb="43"/> + <mtx name="cid18154" height="1000" tsb="42"/> + <mtx name="cid18155" height="1000" tsb="42"/> + <mtx name="cid59592" height="1000" tsb="60"/> + <mtx name="cid59593" height="1000" tsb="60"/> + <mtx name="cid61789" height="1000" tsb="91"/> + <mtx name="cid61811" height="1000" tsb="43"/> + <mtx name="cid62031" height="1000" tsb="101"/> + <mtx name="cid62032" height="1000" tsb="97"/> + <mtx name="cid62033" height="1000" tsb="91"/> + <mtx name="cid62034" height="1000" tsb="101"/> + <mtx name="cid62039" height="1000" tsb="45"/> + <mtx name="cid62104" height="1000" tsb="44"/> + <mtx name="cid62105" height="1000" tsb="44"/> + <mtx name="cid62172" height="1000" tsb="43"/> + </vmtx> + +</ttFont> diff --git a/Tests/subset/subset_test.py b/Tests/subset/subset_test.py index d195af0f..facafb2a 100644 --- a/Tests/subset/subset_test.py +++ b/Tests/subset/subset_test.py @@ -1,5 +1,6 @@ import io -from fontTools.misc.testTools import getXML +import fontTools.ttLib.tables.otBase +from fontTools.misc.testTools import getXML, stripVariableItemsFromTTX from fontTools.misc.textTools import tobytes, tostr from fontTools import subset from fontTools.fontBuilder import FontBuilder @@ -19,44 +20,36 @@ import pathlib import pytest -class SubsetTest(unittest.TestCase): - def __init__(self, methodName): - unittest.TestCase.__init__(self, methodName) - # Python 3 renamed assertRaisesRegexp to assertRaisesRegex, - # and fires deprecation warnings if a program uses the old name. - if not hasattr(self, "assertRaisesRegex"): - self.assertRaisesRegex = self.assertRaisesRegexp +class SubsetTest: + @classmethod + def setup_class(cls): + cls.tempdir = None + cls.num_tempfiles = 0 - def setUp(self): - self.tempdir = None - self.num_tempfiles = 0 - - def tearDown(self): - if self.tempdir: - shutil.rmtree(self.tempdir) + @classmethod + def teardown_class(cls): + if cls.tempdir: + shutil.rmtree(cls.tempdir, ignore_errors=True) @staticmethod def getpath(testfile): path, _ = os.path.split(__file__) return os.path.join(path, "data", testfile) - def temp_path(self, suffix): - if not self.tempdir: - self.tempdir = tempfile.mkdtemp() - self.num_tempfiles += 1 - return os.path.join(self.tempdir, - "tmp%d%s" % (self.num_tempfiles, suffix)) - - def read_ttx(self, path): - lines = [] - with open(path, "r", encoding="utf-8") as ttx: - for line in ttx.readlines(): - # Elide ttFont attributes because ttLibVersion may change. - if line.startswith("<ttFont "): - lines.append("<ttFont>\n") - else: - lines.append(line.rstrip() + "\n") - return lines + @classmethod + def temp_path(cls, suffix): + if not cls.tempdir: + cls.tempdir = tempfile.mkdtemp() + cls.num_tempfiles += 1 + return os.path.join(cls.tempdir, + "tmp%d%s" % (cls.num_tempfiles, suffix)) + + @staticmethod + def read_ttx(path): + with open(path, "r", encoding="utf-8") as f: + ttx = f.read() + # don't care whether TTF or OTF, thus strip sfntVersion as well + return stripVariableItemsFromTTX(ttx, sfntVersion=True).splitlines(True) def expect_ttx(self, font, expected_ttx, tables=None): path = self.temp_path(suffix=".ttx") @@ -67,21 +60,21 @@ class SubsetTest(unittest.TestCase): for line in difflib.unified_diff( expected, actual, fromfile=expected_ttx, tofile=path): sys.stdout.write(line) - self.fail("TTX output is different from expected") + pytest.fail("TTX output is different from expected") def compile_font(self, path, suffix): savepath = self.temp_path(suffix=suffix) font = TTFont(recalcBBoxes=False, recalcTimestamp=False) font.importXML(path) font.save(savepath, reorderTables=None) - return font, savepath + return savepath # ----- # Tests # ----- def test_layout_scripts(self): - _, fontpath = self.compile_font(self.getpath("layout_scripts.ttx"), ".otf") + fontpath = self.compile_font(self.getpath("layout_scripts.ttx"), ".otf") subsetpath = self.temp_path(".otf") subset.main([fontpath, "--glyphs=*", "--layout-features=*", "--layout-scripts=latn,arab.URD,arab.dflt", @@ -91,41 +84,41 @@ class SubsetTest(unittest.TestCase): ["GPOS", "GSUB"]) def test_no_notdef_outline_otf(self): - _, fontpath = self.compile_font(self.getpath("TestOTF-Regular.ttx"), ".otf") + fontpath = self.compile_font(self.getpath("TestOTF-Regular.ttx"), ".otf") subsetpath = self.temp_path(".otf") subset.main([fontpath, "--no-notdef-outline", "--gids=0", "--output-file=%s" % subsetpath]) subsetfont = TTFont(subsetpath) self.expect_ttx(subsetfont, self.getpath("expect_no_notdef_outline_otf.ttx"), ["CFF "]) def test_no_notdef_outline_cid(self): - _, fontpath = self.compile_font(self.getpath("TestCID-Regular.ttx"), ".otf") + fontpath = self.compile_font(self.getpath("TestCID-Regular.ttx"), ".otf") subsetpath = self.temp_path(".otf") subset.main([fontpath, "--no-notdef-outline", "--gids=0", "--output-file=%s" % subsetpath]) subsetfont = TTFont(subsetpath) self.expect_ttx(subsetfont, self.getpath("expect_no_notdef_outline_cid.ttx"), ["CFF "]) def test_no_notdef_outline_ttf(self): - _, fontpath = self.compile_font(self.getpath("TestTTF-Regular.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("TestTTF-Regular.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--no-notdef-outline", "--gids=0", "--output-file=%s" % subsetpath]) subsetfont = TTFont(subsetpath) self.expect_ttx(subsetfont, self.getpath("expect_no_notdef_outline_ttf.ttx"), ["glyf", "hmtx"]) def test_subset_ankr(self): - _, fontpath = self.compile_font(self.getpath("TestANKR.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("TestANKR.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--glyphs=one", "--output-file=%s" % subsetpath]) subsetfont = TTFont(subsetpath) self.expect_ttx(subsetfont, self.getpath("expect_ankr.ttx"), ["ankr"]) def test_subset_ankr_remove(self): - _, fontpath = self.compile_font(self.getpath("TestANKR.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("TestANKR.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--glyphs=two", "--output-file=%s" % subsetpath]) - self.assertNotIn("ankr", TTFont(subsetpath)) + assert "ankr" not in TTFont(subsetpath) def test_subset_bsln_format_0(self): - _, fontpath = self.compile_font(self.getpath("TestBSLN-0.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("TestBSLN-0.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--glyphs=one", "--output-file=%s" % subsetpath]) subsetfont = TTFont(subsetpath) @@ -138,7 +131,7 @@ class SubsetTest(unittest.TestCase): # a subsetted font with {zero, one} and the implicit .notdef, all # glyphs in the resulting font use the Roman baseline. In this case, # we expect a format 0 'bsln' table because it is the most compact. - _, fontpath = self.compile_font(self.getpath("TestBSLN-1.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("TestBSLN-1.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--unicodes=U+0030-0031", "--output-file=%s" % subsetpath]) @@ -154,7 +147,7 @@ class SubsetTest(unittest.TestCase): # subsetted font, we expect a format 1 'bsln' table whose default # is Roman, but with an override that uses the ideographic baseline # for uni2EA2. - _, fontpath = self.compile_font(self.getpath("TestBSLN-1.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("TestBSLN-1.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--unicodes=U+0030-0031,U+2EA2", "--output-file=%s" % subsetpath]) @@ -165,7 +158,7 @@ class SubsetTest(unittest.TestCase): # The 'bsln' table in TestBSLN-2 refers to control points in glyph 'P' # for defining its baselines. Therefore, the subsetted font should # include this glyph even though it is not requested explicitly. - _, fontpath = self.compile_font(self.getpath("TestBSLN-2.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("TestBSLN-2.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--glyphs=one", "--output-file=%s" % subsetpath]) subsetfont = TTFont(subsetpath) @@ -179,7 +172,7 @@ class SubsetTest(unittest.TestCase): # baseline measurement, all glyphs in the resulting font use the Roman # baseline. In this case, we expect a format 2 'bsln' table because it # is the most compact encoding. - _, fontpath = self.compile_font(self.getpath("TestBSLN-3.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("TestBSLN-3.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--unicodes=U+0030", "--output-file=%s" % subsetpath]) @@ -195,7 +188,7 @@ class SubsetTest(unittest.TestCase): # subsetted font, we expect a format 1 'bsln' table whose default # is Roman, but with an override that uses the ideographic baseline # for uni2EA2. - _, fontpath = self.compile_font(self.getpath("TestBSLN-3.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("TestBSLN-3.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--unicodes=U+0030-0031,U+2EA2", "--output-file=%s" % subsetpath]) @@ -203,35 +196,35 @@ class SubsetTest(unittest.TestCase): self.expect_ttx(subsetfont, self.getpath("expect_bsln_3.ttx"), ["bsln"]) def test_subset_clr(self): - _, fontpath = self.compile_font(self.getpath("TestCLR-Regular.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("TestCLR-Regular.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--glyphs=smileface", "--output-file=%s" % subsetpath]) subsetfont = TTFont(subsetpath) self.expect_ttx(subsetfont, self.getpath("expect_keep_colr.ttx"), ["GlyphOrder", "hmtx", "glyf", "COLR", "CPAL"]) def test_subset_gvar(self): - _, fontpath = self.compile_font(self.getpath("TestGVAR.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("TestGVAR.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--unicodes=U+002B,U+2212", "--output-file=%s" % subsetpath]) subsetfont = TTFont(subsetpath) self.expect_ttx(subsetfont, self.getpath("expect_keep_gvar.ttx"), ["GlyphOrder", "avar", "fvar", "gvar", "name"]) def test_subset_gvar_notdef_outline(self): - _, fontpath = self.compile_font(self.getpath("TestGVAR.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("TestGVAR.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--unicodes=U+0030", "--notdef_outline", "--output-file=%s" % subsetpath]) subsetfont = TTFont(subsetpath) self.expect_ttx(subsetfont, self.getpath("expect_keep_gvar_notdef_outline.ttx"), ["GlyphOrder", "avar", "fvar", "gvar", "name"]) def test_subset_lcar_remove(self): - _, fontpath = self.compile_font(self.getpath("TestLCAR-0.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("TestLCAR-0.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--glyphs=one", "--output-file=%s" % subsetpath]) subsetfont = TTFont(subsetpath) - self.assertNotIn("lcar", subsetfont) + assert "lcar" not in subsetfont def test_subset_lcar_format_0(self): - _, fontpath = self.compile_font(self.getpath("TestLCAR-0.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("TestLCAR-0.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--unicodes=U+FB01", "--output-file=%s" % subsetpath]) @@ -239,7 +232,7 @@ class SubsetTest(unittest.TestCase): self.expect_ttx(subsetfont, self.getpath("expect_lcar_0.ttx"), ["lcar"]) def test_subset_lcar_format_1(self): - _, fontpath = self.compile_font(self.getpath("TestLCAR-1.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("TestLCAR-1.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--unicodes=U+FB01", "--output-file=%s" % subsetpath]) @@ -247,14 +240,14 @@ class SubsetTest(unittest.TestCase): self.expect_ttx(subsetfont, self.getpath("expect_lcar_1.ttx"), ["lcar"]) def test_subset_math(self): - _, fontpath = self.compile_font(self.getpath("TestMATH-Regular.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("TestMATH-Regular.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--unicodes=U+0041,U+0028,U+0302,U+1D400,U+1D435", "--output-file=%s" % subsetpath]) subsetfont = TTFont(subsetpath) self.expect_ttx(subsetfont, self.getpath("expect_keep_math.ttx"), ["GlyphOrder", "CFF ", "MATH", "hmtx"]) def test_subset_math_partial(self): - _, fontpath = self.compile_font(self.getpath("test_math_partial.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("test_math_partial.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--text=A", "--output-file=%s" % subsetpath]) subsetfont = TTFont(subsetpath) @@ -265,21 +258,21 @@ class SubsetTest(unittest.TestCase): # the Optical Bounds table. When subsetting, we do not request any # of those glyphs. Therefore, the produced subsetted font should # not contain an 'opbd' table. - _, fontpath = self.compile_font(self.getpath("TestOPBD-0.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("TestOPBD-0.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--glyphs=one", "--output-file=%s" % subsetpath]) subsetfont = TTFont(subsetpath) - self.assertNotIn("opbd", subsetfont) + assert "opbd" not in subsetfont def test_subset_opbd_format_0(self): - _, fontpath = self.compile_font(self.getpath("TestOPBD-0.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("TestOPBD-0.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--glyphs=A", "--output-file=%s" % subsetpath]) subsetfont = TTFont(subsetpath) self.expect_ttx(subsetfont, self.getpath("expect_opbd_0.ttx"), ["opbd"]) def test_subset_opbd_format_1(self): - _, fontpath = self.compile_font(self.getpath("TestOPBD-1.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("TestOPBD-1.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--glyphs=A", "--output-file=%s" % subsetpath]) subsetfont = TTFont(subsetpath) @@ -288,12 +281,12 @@ class SubsetTest(unittest.TestCase): def test_subset_prop_remove_default_zero(self): # If all glyphs have an AAT glyph property with value 0, # the "prop" table should be removed from the subsetted font. - _, fontpath = self.compile_font(self.getpath("TestPROP.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("TestPROP.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--unicodes=U+0041", "--output-file=%s" % subsetpath]) subsetfont = TTFont(subsetpath) - self.assertNotIn("prop", subsetfont) + assert "prop" not in subsetfont def test_subset_prop_0(self): # If all glyphs share the same AAT glyph properties, the "prop" table @@ -302,7 +295,7 @@ class SubsetTest(unittest.TestCase): # Unless the shared value is zero, in which case the subsetted font # should have no "prop" table at all. But that case has already been # tested above in test_subset_prop_remove_default_zero(). - _, fontpath = self.compile_font(self.getpath("TestPROP.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("TestPROP.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--unicodes=U+0030-0032", "--no-notdef-glyph", "--output-file=%s" % subsetpath]) @@ -313,7 +306,7 @@ class SubsetTest(unittest.TestCase): # If not all glyphs share the same AAT glyph properties, the subsetted # font should contain a "prop" table in format 1. To save space, the # DefaultProperties should be set to the most frequent value. - _, fontpath = self.compile_font(self.getpath("TestPROP.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("TestPROP.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--unicodes=U+0030-0032", "--notdef-outline", "--output-file=%s" % subsetpath]) @@ -323,32 +316,32 @@ class SubsetTest(unittest.TestCase): def test_options(self): # https://github.com/fonttools/fonttools/issues/413 opt1 = subset.Options() - self.assertTrue('Xyz-' not in opt1.layout_features) + assert 'Xyz-' not in opt1.layout_features opt2 = subset.Options() opt2.layout_features.append('Xyz-') - self.assertTrue('Xyz-' in opt2.layout_features) - self.assertTrue('Xyz-' not in opt1.layout_features) + assert 'Xyz-' in opt2.layout_features + assert 'Xyz-' not in opt1.layout_features def test_google_color(self): - _, fontpath = self.compile_font(self.getpath("google_color.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("google_color.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--gids=0,1", "--output-file=%s" % subsetpath]) subsetfont = TTFont(subsetpath) - self.assertTrue("CBDT" in subsetfont) - self.assertTrue("CBLC" in subsetfont) - self.assertTrue("x" in subsetfont['CBDT'].strikeData[0]) - self.assertFalse("y" in subsetfont['CBDT'].strikeData[0]) + assert "CBDT" in subsetfont + assert "CBLC" in subsetfont + assert "x" in subsetfont['CBDT'].strikeData[0] + assert "y" not in subsetfont['CBDT'].strikeData[0] def test_google_color_all(self): - _, fontpath = self.compile_font(self.getpath("google_color.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("google_color.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--unicodes=*", "--output-file=%s" % subsetpath]) subsetfont = TTFont(subsetpath) - self.assertTrue("x" in subsetfont['CBDT'].strikeData[0]) - self.assertTrue("y" in subsetfont['CBDT'].strikeData[0]) + assert "x" in subsetfont['CBDT'].strikeData[0] + assert "y" in subsetfont['CBDT'].strikeData[0] def test_sbix(self): - _, fontpath = self.compile_font(self.getpath("sbix.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("sbix.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--gids=0,1", "--output-file=%s" % subsetpath]) subsetfont = TTFont(subsetpath) @@ -356,7 +349,7 @@ class SubsetTest(unittest.TestCase): "expect_sbix.ttx"), ["sbix"]) def test_timing_publishes_parts(self): - _, fontpath = self.compile_font(self.getpath("TestTTF-Regular.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("TestTTF-Regular.ttx"), ".ttf") options = subset.Options() options.timing = True @@ -367,15 +360,15 @@ class SubsetTest(unittest.TestCase): subsetter.subset(font) logs = captor.records - self.assertTrue(len(logs) > 5) - self.assertEqual(len(logs), len([l for l in logs if 'msg' in l.args and 'time' in l.args])) + assert len(logs) > 5 + assert len(logs) == len([l for l in logs if 'msg' in l.args and 'time' in l.args]) # Look for a few things we know should happen - self.assertTrue(filter(lambda l: l.args['msg'] == "load 'cmap'", logs)) - self.assertTrue(filter(lambda l: l.args['msg'] == "subset 'cmap'", logs)) - self.assertTrue(filter(lambda l: l.args['msg'] == "subset 'glyf'", logs)) + assert filter(lambda l: l.args['msg'] == "load 'cmap'", logs) + assert filter(lambda l: l.args['msg'] == "subset 'cmap'", logs) + assert filter(lambda l: l.args['msg'] == "subset 'glyf'", logs) def test_passthrough_tables(self): - _, fontpath = self.compile_font(self.getpath("TestTTF-Regular.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("TestTTF-Regular.ttx"), ".ttf") font = TTFont(fontpath) unknown_tag = 'ZZZZ' unknown_table = newTable(unknown_tag) @@ -388,17 +381,17 @@ class SubsetTest(unittest.TestCase): subsetfont = TTFont(subsetpath) # tables we can't subset are dropped by default - self.assertFalse(unknown_tag in subsetfont) + assert unknown_tag not in subsetfont subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--passthrough-tables", "--output-file=%s" % subsetpath]) subsetfont = TTFont(subsetpath) # unknown tables are kept if --passthrough-tables option is passed - self.assertTrue(unknown_tag in subsetfont) + assert unknown_tag in subsetfont def test_non_BMP_text_arg_input(self): - _, fontpath = self.compile_font( + fontpath = self.compile_font( self.getpath("TestTTF-Regular_non_BMP_char.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") text = tostr(u"A\U0001F6D2", encoding='utf-8') @@ -406,11 +399,11 @@ class SubsetTest(unittest.TestCase): subset.main([fontpath, "--text=%s" % text, "--output-file=%s" % subsetpath]) subsetfont = TTFont(subsetpath) - self.assertEqual(subsetfont['maxp'].numGlyphs, 3) - self.assertEqual(subsetfont.getGlyphOrder(), ['.notdef', 'A', 'u1F6D2']) + assert subsetfont['maxp'].numGlyphs == 3 + assert subsetfont.getGlyphOrder() == ['.notdef', 'A', 'u1F6D2'] def test_non_BMP_text_file_input(self): - _, fontpath = self.compile_font( + fontpath = self.compile_font( self.getpath("TestTTF-Regular_non_BMP_char.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") text = tobytes(u"A\U0001F6D2", encoding='utf-8') @@ -424,12 +417,12 @@ class SubsetTest(unittest.TestCase): finally: os.remove(tmp.name) - self.assertEqual(subsetfont['maxp'].numGlyphs, 3) - self.assertEqual(subsetfont.getGlyphOrder(), ['.notdef', 'A', 'u1F6D2']) + assert subsetfont['maxp'].numGlyphs == 3 + assert subsetfont.getGlyphOrder() == ['.notdef', 'A', 'u1F6D2'] def test_no_hinting_CFF(self): ttxpath = self.getpath("Lobster.subset.ttx") - _, fontpath = self.compile_font(ttxpath, ".otf") + fontpath = self.compile_font(ttxpath, ".otf") subsetpath = self.temp_path(".otf") subset.main([fontpath, "--no-hinting", "--notdef-outline", "--output-file=%s" % subsetpath, "*"]) @@ -439,7 +432,7 @@ class SubsetTest(unittest.TestCase): def test_desubroutinize_CFF(self): ttxpath = self.getpath("Lobster.subset.ttx") - _, fontpath = self.compile_font(ttxpath, ".otf") + fontpath = self.compile_font(ttxpath, ".otf") subsetpath = self.temp_path(".otf") subset.main([fontpath, "--desubroutinize", "--notdef-outline", "--output-file=%s" % subsetpath, "*"]) @@ -449,7 +442,7 @@ class SubsetTest(unittest.TestCase): def test_desubroutinize_hinted_subrs_CFF(self): ttxpath = self.getpath("test_hinted_subrs_CFF.ttx") - _, fontpath = self.compile_font(ttxpath, ".otf") + fontpath = self.compile_font(ttxpath, ".otf") subsetpath = self.temp_path(".otf") subset.main([fontpath, "--desubroutinize", "--notdef-outline", "--output-file=%s" % subsetpath, "*"]) @@ -459,7 +452,7 @@ class SubsetTest(unittest.TestCase): def test_desubroutinize_cntrmask_CFF(self): ttxpath = self.getpath("test_cntrmask_CFF.ttx") - _, fontpath = self.compile_font(ttxpath, ".otf") + fontpath = self.compile_font(ttxpath, ".otf") subsetpath = self.temp_path(".otf") subset.main([fontpath, "--desubroutinize", "--notdef-outline", "--output-file=%s" % subsetpath, "*"]) @@ -469,7 +462,7 @@ class SubsetTest(unittest.TestCase): def test_no_hinting_desubroutinize_CFF(self): ttxpath = self.getpath("test_hinted_subrs_CFF.ttx") - _, fontpath = self.compile_font(ttxpath, ".otf") + fontpath = self.compile_font(ttxpath, ".otf") subsetpath = self.temp_path(".otf") subset.main([fontpath, "--no-hinting", "--desubroutinize", "--notdef-outline", "--output-file=%s" % subsetpath, "*"]) @@ -478,7 +471,7 @@ class SubsetTest(unittest.TestCase): "expect_no_hinting_desubroutinize_CFF.ttx"), ["CFF "]) def test_no_hinting_TTF(self): - _, fontpath = self.compile_font(self.getpath("TestTTF-Regular.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("TestTTF-Regular.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--no-hinting", "--notdef-outline", "--output-file=%s" % subsetpath, "*"]) @@ -486,11 +479,11 @@ class SubsetTest(unittest.TestCase): self.expect_ttx(subsetfont, self.getpath( "expect_no_hinting_TTF.ttx"), ["glyf", "maxp"]) for tag in subset.Options().hinting_tables: - self.assertTrue(tag not in subsetfont) + assert tag not in subsetfont def test_notdef_width_cid(self): # https://github.com/fonttools/fonttools/pull/845 - _, fontpath = self.compile_font(self.getpath("NotdefWidthCID-Regular.ttx"), ".otf") + fontpath = self.compile_font(self.getpath("NotdefWidthCID-Regular.ttx"), ".otf") subsetpath = self.temp_path(".otf") subset.main([fontpath, "--no-notdef-outline", "--gids=0,1", "--output-file=%s" % subsetpath]) subsetfont = TTFont(subsetpath) @@ -503,18 +496,18 @@ class SubsetTest(unittest.TestCase): head = font['head'] bounds = [head.xMin, head.yMin, head.xMax, head.yMax] - _, fontpath = self.compile_font(ttxpath, ".ttf") + fontpath = self.compile_font(ttxpath, ".ttf") subsetpath = self.temp_path(".ttf") # by default, the subsetter does not recalculate the bounding box subset.main([fontpath, "--output-file=%s" % subsetpath, "*"]) head = TTFont(subsetpath)['head'] - self.assertEqual(bounds, [head.xMin, head.yMin, head.xMax, head.yMax]) + assert bounds == [head.xMin, head.yMin, head.xMax, head.yMax] subset.main([fontpath, "--recalc-bounds", "--output-file=%s" % subsetpath, "*"]) head = TTFont(subsetpath)['head'] bounds = [132, 304, 365, 567] - self.assertEqual(bounds, [head.xMin, head.yMin, head.xMax, head.yMax]) + assert bounds == [head.xMin, head.yMin, head.xMax, head.yMax] def test_recalc_bounds_otf(self): ttxpath = self.getpath("TestOTF-Regular.ttx") @@ -523,76 +516,76 @@ class SubsetTest(unittest.TestCase): head = font['head'] bounds = [head.xMin, head.yMin, head.xMax, head.yMax] - _, fontpath = self.compile_font(ttxpath, ".otf") + fontpath = self.compile_font(ttxpath, ".otf") subsetpath = self.temp_path(".otf") # by default, the subsetter does not recalculate the bounding box subset.main([fontpath, "--output-file=%s" % subsetpath, "*"]) head = TTFont(subsetpath)['head'] - self.assertEqual(bounds, [head.xMin, head.yMin, head.xMax, head.yMax]) + assert bounds == [head.xMin, head.yMin, head.xMax, head.yMax] subset.main([fontpath, "--recalc-bounds", "--output-file=%s" % subsetpath, "*"]) head = TTFont(subsetpath)['head'] bounds = [132, 304, 365, 567] - self.assertEqual(bounds, [head.xMin, head.yMin, head.xMax, head.yMax]) + assert bounds == [head.xMin, head.yMin, head.xMax, head.yMax] def test_recalc_timestamp_ttf(self): ttxpath = self.getpath("TestTTF-Regular.ttx") font = TTFont() font.importXML(ttxpath) modified = font['head'].modified - _, fontpath = self.compile_font(ttxpath, ".ttf") + fontpath = self.compile_font(ttxpath, ".ttf") subsetpath = self.temp_path(".ttf") # by default, the subsetter does not recalculate the modified timestamp subset.main([fontpath, "--output-file=%s" % subsetpath, "*"]) - self.assertEqual(modified, TTFont(subsetpath)['head'].modified) + assert modified == TTFont(subsetpath)['head'].modified subset.main([fontpath, "--recalc-timestamp", "--output-file=%s" % subsetpath, "*"]) - self.assertLess(modified, TTFont(subsetpath)['head'].modified) + assert modified < TTFont(subsetpath)['head'].modified def test_recalc_timestamp_otf(self): ttxpath = self.getpath("TestOTF-Regular.ttx") font = TTFont() font.importXML(ttxpath) modified = font['head'].modified - _, fontpath = self.compile_font(ttxpath, ".otf") + fontpath = self.compile_font(ttxpath, ".otf") subsetpath = self.temp_path(".otf") # by default, the subsetter does not recalculate the modified timestamp subset.main([fontpath, "--output-file=%s" % subsetpath, "*"]) - self.assertEqual(modified, TTFont(subsetpath)['head'].modified) + assert modified == TTFont(subsetpath)['head'].modified subset.main([fontpath, "--recalc-timestamp", "--output-file=%s" % subsetpath, "*"]) - self.assertLess(modified, TTFont(subsetpath)['head'].modified) + assert modified < TTFont(subsetpath)['head'].modified def test_recalc_max_context(self): ttxpath = self.getpath("Lobster.subset.ttx") font = TTFont() font.importXML(ttxpath) max_context = font['OS/2'].usMaxContext - _, fontpath = self.compile_font(ttxpath, ".otf") + fontpath = self.compile_font(ttxpath, ".otf") subsetpath = self.temp_path(".otf") # by default, the subsetter does not recalculate the usMaxContext subset.main([fontpath, "--drop-tables+=GSUB,GPOS", "--output-file=%s" % subsetpath]) - self.assertEqual(max_context, TTFont(subsetpath)['OS/2'].usMaxContext) + assert max_context == TTFont(subsetpath)['OS/2'].usMaxContext subset.main([fontpath, "--recalc-max-context", "--drop-tables+=GSUB,GPOS", "--output-file=%s" % subsetpath]) - self.assertEqual(0, TTFont(subsetpath)['OS/2'].usMaxContext) + assert 0 == TTFont(subsetpath)['OS/2'].usMaxContext def test_retain_gids_ttf(self): - _, fontpath = self.compile_font(self.getpath("TestTTF-Regular.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("TestTTF-Regular.ttx"), ".ttf") font = TTFont(fontpath) - self.assertEqual(font["hmtx"]["A"], (500, 132)) - self.assertEqual(font["hmtx"]["B"], (400, 132)) + assert font["hmtx"]["A"] == (500, 132) + assert font["hmtx"]["B"] == (400, 132) - self.assertGreater(font["glyf"]["A"].numberOfContours, 0) - self.assertGreater(font["glyf"]["B"].numberOfContours, 0) + assert font["glyf"]["A"].numberOfContours > 0 + assert font["glyf"]["B"].numberOfContours > 0 subsetpath = self.temp_path(".ttf") subset.main( @@ -606,29 +599,29 @@ class SubsetTest(unittest.TestCase): ) subsetfont = TTFont(subsetpath) - self.assertEqual(subsetfont.getGlyphOrder(), font.getGlyphOrder()[0:3]) + assert subsetfont.getGlyphOrder() == font.getGlyphOrder()[0:3] hmtx = subsetfont["hmtx"] - self.assertEqual(hmtx["A"], ( 0, 0)) - self.assertEqual(hmtx["B"], (400, 132)) + assert hmtx["A"] == (0, 0) + assert hmtx["B"] == (400, 132) glyf = subsetfont["glyf"] - self.assertEqual(glyf["A"].numberOfContours, 0) - self.assertGreater(glyf["B"].numberOfContours, 0) + assert glyf["A"].numberOfContours == 0 + assert glyf["B"].numberOfContours > 0 def test_retain_gids_cff(self): - _, fontpath = self.compile_font(self.getpath("TestOTF-Regular.ttx"), ".otf") + fontpath = self.compile_font(self.getpath("TestOTF-Regular.ttx"), ".otf") font = TTFont(fontpath) - self.assertEqual(font["hmtx"]["A"], (500, 132)) - self.assertEqual(font["hmtx"]["B"], (400, 132)) - self.assertEqual(font["hmtx"]["C"], (500, 0)) + assert font["hmtx"]["A"] == (500, 132) + assert font["hmtx"]["B"] == (400, 132) + assert font["hmtx"]["C"] == (500, 0) font["CFF "].cff[0].decompileAllCharStrings() cs = font["CFF "].cff[0].CharStrings - self.assertGreater(len(cs["A"].program), 0) - self.assertGreater(len(cs["B"].program), 0) - self.assertGreater(len(cs["C"].program), 0) + assert len(cs["A"].program) > 0 + assert len(cs["B"].program) > 0 + assert len(cs["C"].program) > 0 subsetpath = self.temp_path(".otf") subset.main( @@ -642,29 +635,30 @@ class SubsetTest(unittest.TestCase): ) subsetfont = TTFont(subsetpath) - self.assertEqual(subsetfont.getGlyphOrder(), font.getGlyphOrder()[0:3]) + assert subsetfont.getGlyphOrder() == font.getGlyphOrder()[0:3] hmtx = subsetfont["hmtx"] - self.assertEqual(hmtx["A"], (0, 0)) - self.assertEqual(hmtx["B"], (400, 132)) + assert hmtx["A"] == (0, 0) + assert hmtx["B"] == (400, 132) subsetfont["CFF "].cff[0].decompileAllCharStrings() cs = subsetfont["CFF "].cff[0].CharStrings - self.assertEqual(cs["A"].program, ["endchar"]) - self.assertGreater(len(cs["B"].program), 0) + assert cs["A"].program == ["endchar"] + assert len(cs["B"].program) > 0 def test_retain_gids_cff2(self): ttx_path = self.getpath("../../varLib/data/master_ttx_varfont_otf/TestCFF2VF.ttx") - font, fontpath = self.compile_font(ttx_path, ".otf") + fontpath = self.compile_font(ttx_path, ".otf") + font = TTFont(fontpath) - self.assertEqual(font["hmtx"]["A"], (600, 31)) - self.assertEqual(font["hmtx"]["T"], (600, 41)) + assert font["hmtx"]["A"] == (600, 31) + assert font["hmtx"]["T"] == (600, 41) font["CFF2"].cff[0].decompileAllCharStrings() cs = font["CFF2"].cff[0].CharStrings - self.assertGreater(len(cs["A"].program), 0) - self.assertGreater(len(cs["T"].program), 0) + assert len(cs["A"].program) > 0 + assert len(cs["T"].program) > 0 subsetpath = self.temp_path(".otf") subset.main( @@ -677,33 +671,33 @@ class SubsetTest(unittest.TestCase): ) subsetfont = TTFont(subsetpath) - self.assertEqual(len(subsetfont.getGlyphOrder()), len(font.getGlyphOrder()[0:3])) + assert len(subsetfont.getGlyphOrder()) == len(font.getGlyphOrder()[0:3]) hmtx = subsetfont["hmtx"] - self.assertEqual(hmtx["glyph00001"], ( 0, 0)) - self.assertEqual(hmtx["T"], (600, 41)) + assert hmtx["glyph00001"] == (0, 0) + assert hmtx["T"] == (600, 41) subsetfont["CFF2"].cff[0].decompileAllCharStrings() cs = subsetfont["CFF2"].cff[0].CharStrings - self.assertEqual(cs["glyph00001"].program, []) - self.assertGreater(len(cs["T"].program), 0) + assert cs["glyph00001"].program == [] + assert len(cs["T"].program) > 0 def test_HVAR_VVAR(self): - _, fontpath = self.compile_font(self.getpath("TestHVVAR.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("TestHVVAR.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--text=BD", "--output-file=%s" % subsetpath]) subsetfont = TTFont(subsetpath) self.expect_ttx(subsetfont, self.getpath("expect_HVVAR.ttx"), ["GlyphOrder", "HVAR", "VVAR", "avar", "fvar"]) def test_HVAR_VVAR_retain_gids(self): - _, fontpath = self.compile_font(self.getpath("TestHVVAR.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("TestHVVAR.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--text=BD", "--retain-gids", "--output-file=%s" % subsetpath]) subsetfont = TTFont(subsetpath) self.expect_ttx(subsetfont, self.getpath("expect_HVVAR_retain_gids.ttx"), ["GlyphOrder", "HVAR", "VVAR", "avar", "fvar"]) def test_subset_flavor(self): - _, fontpath = self.compile_font(self.getpath("TestTTF-Regular.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("TestTTF-Regular.ttx"), ".ttf") font = TTFont(fontpath) woff_path = self.temp_path(".woff") @@ -717,7 +711,7 @@ class SubsetTest(unittest.TestCase): ) woff = TTFont(woff_path) - self.assertEqual(woff.flavor, "woff") + assert woff.flavor == "woff" woff2_path = self.temp_path(".woff2") subset.main( @@ -730,7 +724,7 @@ class SubsetTest(unittest.TestCase): ) woff2 = TTFont(woff2_path) - self.assertEqual(woff2.flavor, "woff2") + assert woff2.flavor == "woff2" ttf_path = self.temp_path(".ttf") subset.main( @@ -742,13 +736,13 @@ class SubsetTest(unittest.TestCase): ) ttf = TTFont(ttf_path) - self.assertEqual(ttf.flavor, None) + assert ttf.flavor is None def test_subset_context_subst_format_3(self): # https://github.com/fonttools/fonttools/issues/1879 # Test font contains 'calt' feature with Format 3 ContextSubst lookup subtables ttx = self.getpath("TestContextSubstFormat3.ttx") - font, fontpath = self.compile_font(ttx, ".ttf") + fontpath = self.compile_font(ttx, ".ttf") subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--unicodes=*", "--output-file=%s" % subsetpath]) subsetfont = TTFont(subsetpath) @@ -756,13 +750,14 @@ class SubsetTest(unittest.TestCase): self.expect_ttx(subsetfont, ttx) def test_cmap_prune_format12(self): - _, fontpath = self.compile_font(self.getpath("CmapSubsetTest.ttx"), ".ttf") + fontpath = self.compile_font(self.getpath("CmapSubsetTest.ttx"), ".ttf") subsetpath = self.temp_path(".ttf") subset.main([fontpath, "--glyphs=a", "--output-file=%s" % subsetpath]) subsetfont = TTFont(subsetpath) self.expect_ttx(subsetfont, self.getpath("CmapSubsetTest.subset.ttx"), ["cmap"]) - def test_GPOS_PairPos_Format2_useClass0(self): + @pytest.mark.parametrize("text, n", [("!", 1), ("#", 2)]) + def test_GPOS_PairPos_Format2_useClass0(self, text, n): # Check two things related to class 0 ('every other glyph'): # 1) that it's reused for ClassDef1 when it becomes empty as the subset glyphset # is intersected with the table's Coverage @@ -772,29 +767,27 @@ class SubsetTest(unittest.TestCase): # The test font (from Harfbuzz test suite) is constructed to trigger these two # situations depending on the input subset --text. # https://github.com/fonttools/fonttools/pull/2221 - _, fontpath = self.compile_font( + fontpath = self.compile_font( self.getpath("GPOS_PairPos_Format2_PR_2221.ttx"), ".ttf" ) subsetpath = self.temp_path(".ttf") - for n, text in enumerate("!#", start=1): - expected_ttx = self.getpath( - f"GPOS_PairPos_Format2_ClassDef{n}_useClass0.subset.ttx" - ) - with self.subTest(text=text, expected_ttx=expected_ttx): - subset.main( - [ - fontpath, - f"--text='{text}'", - "--layout-features+=test", - "--output-file=%s" % subsetpath, - ] - ) - subsetfont = TTFont(subsetpath) - self.expect_ttx(subsetfont, expected_ttx, ["GPOS"]) + expected_ttx = self.getpath( + f"GPOS_PairPos_Format2_ClassDef{n}_useClass0.subset.ttx" + ) + subset.main( + [ + fontpath, + f"--text='{text}'", + "--layout-features+=test", + "--output-file=%s" % subsetpath, + ] + ) + subsetfont = TTFont(subsetpath) + self.expect_ttx(subsetfont, expected_ttx, ["GPOS"]) def test_GPOS_SinglePos_prune_post_subset_no_value(self): - _, fontpath = self.compile_font( + fontpath = self.compile_font( self.getpath("GPOS_SinglePos_no_value_issue_2312.ttx"), ".ttf" ) subsetpath = self.temp_path(".ttf") @@ -806,6 +799,91 @@ class SubsetTest(unittest.TestCase): ["GlyphOrder", "GPOS"], ) + @pytest.mark.parametrize( + "installed, enabled, ok", + [ + pytest.param(True, None, True, id="installed-auto-ok"), + pytest.param(True, None, False, id="installed-auto-fail"), + pytest.param(True, True, True, id="installed-enabled-ok"), + pytest.param(True, True, False, id="installed-enabled-fail"), + pytest.param(True, False, True, id="installed-disabled"), + pytest.param(False, True, True, id="not_installed-enabled"), + pytest.param(False, False, True, id="not_installed-disabled"), + ], + ) + def test_harfbuzz_repacker(self, caplog, monkeypatch, installed, enabled, ok): + # Use a mock to test the pure-python serializer is used when uharfbuzz + # returns an error or is not installed + have_uharfbuzz = fontTools.ttLib.tables.otBase.have_uharfbuzz + if installed: + if not have_uharfbuzz: + pytest.skip("uharfbuzz is not installed") + if not ok: + # pretend hb.repack returns an error + import uharfbuzz as hb + + def mock_repack(data, obj_list): + raise hb.RepackerError("mocking") + + monkeypatch.setattr(hb, "repack", mock_repack) + else: + if have_uharfbuzz: + # pretend uharfbuzz is not installed + monkeypatch.setattr( + fontTools.ttLib.tables.otBase, "have_uharfbuzz", False + ) + + fontpath = self.compile_font(self.getpath("harfbuzz_repacker.ttx"), ".otf") + subsetpath = self.temp_path(".otf") + args = [ + fontpath, + "--unicodes=0x53a9", + "--layout-features=*", + f"--output-file={subsetpath}", + ] + if enabled is True: + args.append("--harfbuzz-repacker") + elif enabled is False: + args.append("--no-harfbuzz-repacker") + # elif enabled is None: ... is the default + + if enabled is True and not installed: + # raise if enabled but not installed + with pytest.raises(ImportError, match="uharfbuzz"): + subset.main(args) + return + + with caplog.at_level(logging.DEBUG, "fontTools.ttLib.tables.otBase"): + subset.main(args) + + subsetfont = TTFont(subsetpath) + # both hb.repack and pure-python serializer compile to the same ttx + self.expect_ttx( + subsetfont, self.getpath("expect_harfbuzz_repacker.ttx"), ["GSUB"] + ) + + if enabled or enabled is None: + if installed: + assert "serializing 'GSUB' with hb.repack" in caplog.text + + if enabled is None and not installed: + assert ( + "uharfbuzz not found, compiling 'GSUB' with pure-python serializer" + ) in caplog.text + + if enabled is False: + assert ( + "hb.repack disabled, compiling 'GSUB' with pure-python serializer" + ) in caplog.text + + # test we emit a log.error if hb.repack fails (and we don't if successful) + assert ( + ( + "hb.repack failed to serialize 'GSUB', reverting to " + "pure-python serializer; the error message was: RepackerError: mocking" + ) in caplog.text + ) ^ ok + @pytest.fixture def featureVarsTestFont(): diff --git a/Tests/varLib/data/test_results/InterpolateLayoutGPOS_7_diff.ttx b/Tests/varLib/data/test_results/InterpolateLayoutGPOS_8_diff.ttx index 14e12097..0086ddc3 100644 --- a/Tests/varLib/data/test_results/InterpolateLayoutGPOS_7_diff.ttx +++ b/Tests/varLib/data/test_results/InterpolateLayoutGPOS_8_diff.ttx @@ -83,21 +83,23 @@ </MarkBasePos> </Lookup> <Lookup index="2"> - <LookupType value="7"/> + <LookupType value="8"/> <LookupFlag value="0"/> <!-- SubTableCount=1 --> - <ContextPos index="0" Format="1"> + <ChainContextPos index="0" Format="1"> <Coverage> <Glyph value="A"/> </Coverage> - <!-- PosRuleSetCount=1 --> - <PosRuleSet index="0"> - <!-- PosRuleCount=1 --> - <PosRule index="0"> - <!-- GlyphCount=3 --> - <!-- PosCount=2 --> + <!-- ChainPosRuleSetCount=1 --> + <ChainPosRuleSet index="0"> + <!-- ChainPosRuleCount=1 --> + <ChainPosRule index="0"> + <!-- BacktrackGlyphCount=0 --> + <!-- InputGlyphCount=3 --> <Input index="0" value="a"/> <Input index="1" value="uni0303"/> + <!-- LookAheadGlyphCount=0 --> + <!-- PosCount=2 --> <PosLookupRecord index="0"> <SequenceIndex value="0"/> <LookupListIndex value="0"/> @@ -106,9 +108,9 @@ <SequenceIndex value="2"/> <LookupListIndex value="1"/> </PosLookupRecord> - </PosRule> - </PosRuleSet> - </ContextPos> + </ChainPosRule> + </ChainPosRuleSet> + </ChainContextPos> </Lookup> </LookupList> </GPOS> diff --git a/Tests/varLib/data/test_results/InterpolateLayoutGPOS_7_same.ttx b/Tests/varLib/data/test_results/InterpolateLayoutGPOS_8_same.ttx index eff24fc3..a32c94d0 100644 --- a/Tests/varLib/data/test_results/InterpolateLayoutGPOS_7_same.ttx +++ b/Tests/varLib/data/test_results/InterpolateLayoutGPOS_8_same.ttx @@ -83,21 +83,23 @@ </MarkBasePos> </Lookup> <Lookup index="2"> - <LookupType value="7"/> + <LookupType value="8"/> <LookupFlag value="0"/> <!-- SubTableCount=1 --> - <ContextPos index="0" Format="1"> + <ChainContextPos index="0" Format="1"> <Coverage> <Glyph value="A"/> </Coverage> - <!-- PosRuleSetCount=1 --> - <PosRuleSet index="0"> - <!-- PosRuleCount=1 --> - <PosRule index="0"> - <!-- GlyphCount=3 --> - <!-- PosCount=2 --> + <!-- ChainPosRuleSetCount=1 --> + <ChainPosRuleSet index="0"> + <!-- ChainPosRuleCount=1 --> + <ChainPosRule index="0"> + <!-- BacktrackGlyphCount=0 --> + <!-- InputGlyphCount=3 --> <Input index="0" value="a"/> <Input index="1" value="uni0303"/> + <!-- LookAheadGlyphCount=0 --> + <!-- PosCount=2 --> <PosLookupRecord index="0"> <SequenceIndex value="0"/> <LookupListIndex value="0"/> @@ -106,9 +108,9 @@ <SequenceIndex value="2"/> <LookupListIndex value="1"/> </PosLookupRecord> - </PosRule> - </PosRuleSet> - </ContextPos> + </ChainPosRule> + </ChainPosRuleSet> + </ChainContextPos> </Lookup> </LookupList> </GPOS> diff --git a/Tests/varLib/instancer/instancer_test.py b/Tests/varLib/instancer/instancer_test.py index bb2d1758..b9d4ffe9 100644 --- a/Tests/varLib/instancer/instancer_test.py +++ b/Tests/varLib/instancer/instancer_test.py @@ -1,4 +1,5 @@ from fontTools.misc.fixedTools import floatToFixedToFloat +from fontTools.misc.testTools import stripVariableItemsFromTTX from fontTools.misc.textTools import Tag from fontTools import ttLib from fontTools import designspaceLib @@ -1386,10 +1387,6 @@ def test_setMacOverlapFlags(): assert b.components[0].flags & flagOverlapCompound != 0 -def _strip_ttLibVersion(string): - return re.sub(' ttLibVersion=".*"', "", string) - - @pytest.fixture def varfont2(): f = ttLib.TTFont(recalcTimestamp=False) @@ -1412,7 +1409,7 @@ def _dump_ttx(ttFont): ttFont2 = ttLib.TTFont(tmp, recalcBBoxes=False, recalcTimestamp=False) s = StringIO() ttFont2.saveXML(s) - return _strip_ttLibVersion(s.getvalue()) + return stripVariableItemsFromTTX(s.getvalue()) def _get_expected_instance_ttx( @@ -1428,7 +1425,7 @@ def _get_expected_instance_ttx( "r", encoding="utf-8", ) as fp: - return _strip_ttLibVersion(fp.read()) + return stripVariableItemsFromTTX(fp.read()) class InstantiateVariableFontTest(object): diff --git a/Tests/varLib/interpolate_layout_test.py b/Tests/varLib/interpolate_layout_test.py index 18dc3a75..219f087f 100644 --- a/Tests/varLib/interpolate_layout_test.py +++ b/Tests/varLib/interpolate_layout_test.py @@ -746,8 +746,8 @@ class InterpolateLayoutTest(unittest.TestCase): self.check_ttx_dump(instfont, expected_ttx_path, tables, suffix) - def test_varlib_interpolate_layout_GPOS_only_LookupType_7_same_val_ttf(self): - """Only GPOS; LookupType 7; same values in all masters. + def test_varlib_interpolate_layout_GPOS_only_LookupType_8_same_val_ttf(self): + """Only GPOS; LookupType 8; same values in all masters. """ suffix = '.ttf' ds_path = self.get_test_input('InterpolateLayout.designspace') @@ -779,13 +779,13 @@ class InterpolateLayoutTest(unittest.TestCase): instfont = interpolate_layout(ds_path, {'weight': 500}, finder) tables = ['GPOS'] - expected_ttx_path = self.get_test_output('InterpolateLayoutGPOS_7_same.ttx') + expected_ttx_path = self.get_test_output('InterpolateLayoutGPOS_8_same.ttx') self.expect_ttx(instfont, expected_ttx_path, tables) self.check_ttx_dump(instfont, expected_ttx_path, tables, suffix) - def test_varlib_interpolate_layout_GPOS_only_LookupType_7_diff_val_ttf(self): - """Only GPOS; LookupType 7; different values in each master. + def test_varlib_interpolate_layout_GPOS_only_LookupType_8_diff_val_ttf(self): + """Only GPOS; LookupType 8; different values in each master. """ suffix = '.ttf' ds_path = self.get_test_input('InterpolateLayout.designspace') @@ -831,7 +831,7 @@ class InterpolateLayoutTest(unittest.TestCase): instfont = interpolate_layout(ds_path, {'weight': 500}, finder) tables = ['GPOS'] - expected_ttx_path = self.get_test_output('InterpolateLayoutGPOS_7_diff.ttx') + expected_ttx_path = self.get_test_output('InterpolateLayoutGPOS_8_diff.ttx') self.expect_ttx(instfont, expected_ttx_path, tables) self.check_ttx_dump(instfont, expected_ttx_path, tables, suffix) diff --git a/Tests/varLib/stat_test.py b/Tests/varLib/stat_test.py new file mode 100644 index 00000000..6aa88a05 --- /dev/null +++ b/Tests/varLib/stat_test.py @@ -0,0 +1,167 @@ +from pathlib import Path + +import pytest +from fontTools.designspaceLib import DesignSpaceDocument +from fontTools.designspaceLib.split import Range +from fontTools.varLib.stat import getStatAxes, getStatLocations + + +@pytest.fixture +def datadir(): + return Path(__file__).parent / "../designspaceLib/data" + + +def test_getStatAxes(datadir): + doc = DesignSpaceDocument.fromfile(datadir / "test_v5.designspace") + + assert getStatAxes( + doc, {"Italic": 0, "width": Range(50, 150), "weight": Range(200, 900)} + ) == [ + { + "values": [ + { + "flags": 0, + "name": { + "de": "Extraleicht", + "en": "Extra Light", + "fr": "Extra léger", + }, + "nominalValue": 200.0, + "rangeMaxValue": 250.0, + "rangeMinValue": 200.0, + }, + { + "flags": 0, + "name": {"en": "Light"}, + "nominalValue": 300.0, + "rangeMaxValue": 350.0, + "rangeMinValue": 250.0, + }, + { + "flags": 2, + "name": {"en": "Regular"}, + "nominalValue": 400.0, + "rangeMaxValue": 450.0, + "rangeMinValue": 350.0, + }, + { + "flags": 0, + "name": {"en": "Semi Bold"}, + "nominalValue": 600.0, + "rangeMaxValue": 650.0, + "rangeMinValue": 450.0, + }, + { + "flags": 0, + "name": {"en": "Bold"}, + "nominalValue": 700.0, + "rangeMaxValue": 850.0, + "rangeMinValue": 650.0, + }, + { + "flags": 0, + "name": {"en": "Black"}, + "nominalValue": 900.0, + "rangeMaxValue": 900.0, + "rangeMinValue": 850.0, + }, + ], + "name": {"en": "Wéíght", "fa-IR": "قطر"}, + "ordering": 2, + "tag": "wght", + }, + { + "values": [ + {"flags": 0, "name": {"en": "Condensed"}, "value": 50.0}, + {"flags": 3, "name": {"en": "Normal"}, "value": 100.0}, + {"flags": 0, "name": {"en": "Wide"}, "value": 125.0}, + { + "flags": 0, + "name": {"en": "Extra Wide"}, + "nominalValue": 150.0, + "rangeMinValue": 150.0, + }, + ], + "name": {"en": "width", "fr": "Chasse"}, + "ordering": 1, + "tag": "wdth", + }, + { + "values": [ + {"flags": 2, "linkedValue": 1.0, "name": {"en": "Roman"}, "value": 0.0}, + ], + "name": {"en": "Italic"}, + "ordering": 3, + "tag": "ital", + }, + ] + + assert getStatAxes(doc, {"Italic": 1, "width": 100, "weight": Range(400, 700)}) == [ + { + "values": [ + { + "flags": 2, + "name": {"en": "Regular"}, + "nominalValue": 400.0, + "rangeMaxValue": 450.0, + "rangeMinValue": 350.0, + }, + { + "flags": 0, + "name": {"en": "Semi Bold"}, + "nominalValue": 600.0, + "rangeMaxValue": 650.0, + "rangeMinValue": 450.0, + }, + { + "flags": 0, + "name": {"en": "Bold"}, + "nominalValue": 700.0, + "rangeMaxValue": 850.0, + "rangeMinValue": 650.0, + }, + ], + "name": {"en": "Wéíght", "fa-IR": "قطر"}, + "ordering": 2, + "tag": "wght", + }, + { + "values": [ + {"flags": 3, "name": {"en": "Normal"}, "value": 100.0}, + ], + "name": {"en": "width", "fr": "Chasse"}, + "ordering": 1, + "tag": "wdth", + }, + { + "values": [ + {"flags": 0, "name": {"en": "Italic"}, "value": 1.0}, + ], + "name": {"en": "Italic"}, + "ordering": 3, + "tag": "ital", + }, + ] + + +def test_getStatLocations(datadir): + doc = DesignSpaceDocument.fromfile(datadir / "test_v5.designspace") + + assert getStatLocations( + doc, {"Italic": 0, "width": Range(50, 150), "weight": Range(200, 900)} + ) == [ + { + "flags": 0, + "location": {"ital": 0.0, "wdth": 50.0, "wght": 300.0}, + "name": {"en": "Some Style", "fr": "Un Style"}, + }, + ] + assert getStatLocations( + doc, {"Italic": 1, "width": Range(50, 150), "weight": Range(200, 900)} + ) == [ + { + "flags": 0, + "location": {"ital": 1.0, "wdth": 100.0, "wght": 700.0}, + "name": {"en": "Other"}, + }, + ] |