From f1a69ff1b94a4fd4de69fddcbc80fba6f819e16b Mon Sep 17 00:00:00 2001 From: Qunxin Liu Date: Thu, 30 Jun 2022 16:22:15 -0700 Subject: [PATCH] [instance] update scripts for testing instancing --- ...tain-all-codepoint.wght=400,wdth=100.0.ttf | Bin 0 -> 6584 bytes ...etain-all-codepoint.wght=drop,wdth=100.ttf | Bin 0 -> 6584 bytes .../subset/data/fonts/Roboto-Variable.ABC.ttf | Bin 0 -> 13480 bytes .../data/tests/pin_all_at_default.tests | 12 +++++++ test/subset/generate-expected-outputs.py | 25 ++++++++++++-- test/subset/run-tests.py | 3 ++ test/subset/subset_test_suite.py | 32 +++++++++++++++--- 7 files changed, 65 insertions(+), 7 deletions(-) create mode 100644 test/subset/data/expected/pin_all_at_default/Roboto-Variable.ABC.default.retain-all-codepoint.wght=400,wdth=100.0.ttf create mode 100644 test/subset/data/expected/pin_all_at_default/Roboto-Variable.ABC.default.retain-all-codepoint.wght=drop,wdth=100.ttf create mode 100644 test/subset/data/fonts/Roboto-Variable.ABC.ttf create mode 100644 test/subset/data/tests/pin_all_at_default.tests diff --git a/test/subset/data/expected/pin_all_at_default/Roboto-Variable.ABC.default.retain-all-codepoint.wght=400,wdth=100.0.ttf b/test/subset/data/expected/pin_all_at_default/Roboto-Variable.ABC.default.retain-all-codepoint.wght=400,wdth=100.0.ttf new file mode 100644 index 0000000000000000000000000000000000000000..936647c4cfc40c0f5aa9a257263f83c0a49fc217 GIT binary patch literal 6584 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 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/pin_all_at_default/Roboto-Variable.ABC.default.retain-all-codepoint.wght=drop,wdth=100.ttf b/test/subset/data/expected/pin_all_at_default/Roboto-Variable.ABC.default.retain-all-codepoint.wght=drop,wdth=100.ttf new file mode 100644 index 0000000000000000000000000000000000000000..936647c4cfc40c0f5aa9a257263f83c0a49fc217 GIT binary patch literal 6584 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 literal 0 HcmV?d00001 diff --git a/test/subset/data/fonts/Roboto-Variable.ABC.ttf b/test/subset/data/fonts/Roboto-Variable.ABC.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6cf001fc854c4f501f2a4bf4dfcb66a28f8aeafe GIT binary patch literal 13480 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 literal 0 HcmV?d00001 diff --git a/test/subset/data/tests/pin_all_at_default.tests b/test/subset/data/tests/pin_all_at_default.tests new file mode 100644 index 000000000..068c8ad96 --- /dev/null +++ b/test/subset/data/tests/pin_all_at_default.tests @@ -0,0 +1,12 @@ +FONTS: +Roboto-Variable.ABC.ttf + +PROFILES: +default.txt + +SUBSETS: +* + +INSTANCES: +wght=drop,wdth=100 +wght=400,wdth=100.0 diff --git a/test/subset/generate-expected-outputs.py b/test/subset/generate-expected-outputs.py index 2182643ab..dc3a9028e 100755 --- a/test/subset/generate-expected-outputs.py +++ b/test/subset/generate-expected-outputs.py @@ -27,15 +27,31 @@ def strip_check_sum (ttx_string): ttx_string, count=1) -def generate_expected_output(input_file, unicodes, profile_flags, output_directory, font_name): +def generate_expected_output(input_file, unicodes, profile_flags, instance_flags, output_directory, font_name): fonttools_path = os.path.join(tempfile.mkdtemp (), font_name) args = ["fonttools", "subset", input_file] args.extend(["--drop-tables+=DSIG", "--drop-tables-=sbix", "--unicodes=%s" % unicodes, "--output-file=%s" % fonttools_path]) + #TODO: remove the drop later as instancing support is added to GPOS/GDEF. + if instance_flags: + args.extend(["--drop-tables+=GPOS,GDEF"]) args.extend(profile_flags) check_call(args) + + if instance_flags: + instance_path = os.path.join(tempfile.mkdtemp (), font_name) + args = ["fonttools", "varLib.instancer", + "--no-overlap-flag", + "--no-recalc-bounds", + "--no-recalc-timestamp", + "--output=%s" % instance_path, + fonttools_path] + args.extend(instance_flags) + check_call(args) + fonttools_path = instance_path + with io.StringIO () as fp: with TTFont (fonttools_path) as font: font.saveXML (fp) @@ -50,7 +66,12 @@ def generate_expected_output(input_file, unicodes, profile_flags, output_directo "--drop-tables+=DSIG", "--drop-tables-=sbix"] args.extend(profile_flags) + #TODO: remove the drop later as instancing support is added to GPOS/GDEF. + if instance_flags: + args.extend(["--drop-tables+=GDEF,GPOS", + "--instance=%s" % ','.join(instance_flags)]) check_call(args) + with io.StringIO () as fp: with TTFont (harfbuzz_path) as font: font.saveXML (fp) @@ -84,4 +105,4 @@ for path in args: font_name = test.get_font_name() print("Creating subset %s/%s" % (output_directory, font_name)) generate_expected_output(test.font_path, unicodes, test.get_profile_flags(), - output_directory, font_name) + test.get_instance_flags(), output_directory, font_name) diff --git a/test/subset/run-tests.py b/test/subset/run-tests.py index 75f873855..eb70db9f8 100755 --- a/test/subset/run-tests.py +++ b/test/subset/run-tests.py @@ -55,6 +55,9 @@ def run_test (test, should_check_ots): "--drop-tables+=DSIG", "--drop-tables-=sbix"] cli_args.extend (test.get_profile_flags ()) + if test.get_instance_flags (): + cli_args.extend (["--drop-tables+=GPOS,GDEF", + "--instance=%s" % ','.join(test.get_instance_flags ())]) ret = subset_cmd (cli_args) if ret != "success": diff --git a/test/subset/subset_test_suite.py b/test/subset/subset_test_suite.py index a58d01703..5ef4de303 100644 --- a/test/subset/subset_test_suite.py +++ b/test/subset/subset_test_suite.py @@ -5,10 +5,11 @@ import os # A single test in a subset test suite. Identifies a font # a subsetting profile, and a subset to be cut. class Test: - def __init__(self, font_path, profile_path, subset): + def __init__(self, font_path, profile_path, subset, instance): self.font_path = font_path self.profile_path = profile_path self.subset = subset + self.instance = instance def unicodes(self): import re @@ -20,23 +21,38 @@ class Test: else: return ",".join("%X" % ord(c) for (i, c) in enumerate(self.subset)) + def instance_name(self): + if not self.instance: + return self.instance + else: + s = "." + self.instance.replace(':', '-') + return s + def get_profile_flags(self): with open (self.profile_path, mode="r", encoding="utf-8") as f: return f.read().splitlines() + def get_instance_flags(self): + if not self.instance: + return [] + else: + return self.instance.split(',') + def get_font_name(self): font_base_name = os.path.basename(self.font_path) font_base_name_parts = os.path.splitext(font_base_name) profile_name = os.path.splitext(os.path.basename(self.profile_path))[0] if self.unicodes() == "*": - return "%s.%s.retain-all-codepoint%s" % (font_base_name_parts[0], + return "%s.%s.retain-all-codepoint%s%s" % (font_base_name_parts[0], profile_name, + self.instance_name(), font_base_name_parts[1]) else: - return "%s.%s.%s%s" % (font_base_name_parts[0], + return "%s.%s.%s%s%s" % (font_base_name_parts[0], profile_name, self.unicodes(), + self.instance_name(), font_base_name_parts[1]) def get_font_extension(self): @@ -53,6 +69,7 @@ class SubsetTestSuite: self.fonts = [] self.profiles = [] self.subsets = [] + self.instances = [] self._parse(definition) def get_output_directory(self): @@ -73,7 +90,11 @@ class SubsetTestSuite: for profile in self.profiles: profile = os.path.join(self._base_path(), "profiles", profile) for subset in self.subsets: - yield Test(font, profile, subset) + if self.instances: + for instance in self.instances: + yield Test(font, profile, subset, instance) + else: + yield Test(font, profile, subset, "") def _base_path(self): return os.path.dirname(os.path.dirname(self.test_path)) @@ -82,7 +103,8 @@ class SubsetTestSuite: destinations = { "FONTS:": self.fonts, "PROFILES:": self.profiles, - "SUBSETS:": self.subsets + "SUBSETS:": self.subsets, + "INSTANCES:": self.instances } current_destination = None