diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.default.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.default.retain-all-codepoint.ttf new file mode 100644 index 000000000..5de8d8981 Binary files /dev/null and b/test/subset/data/expected/basics/Comfortaa-Regular-new.default.retain-all-codepoint.ttf differ diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.retain-all-codepoint.ttf new file mode 100644 index 000000000..e3c072760 Binary files /dev/null and b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.retain-all-codepoint.ttf differ diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.retain-all-codepoint.ttf new file mode 100644 index 000000000..6425ecfd1 Binary files /dev/null and b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.retain-all-codepoint.ttf differ diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.retain-all-codepoint.ttf new file mode 100644 index 000000000..fbb8c33ac Binary files /dev/null and b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.retain-all-codepoint.ttf differ diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.retain-all-codepoint.ttf new file mode 100644 index 000000000..cc2805a01 Binary files /dev/null and b/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.retain-all-codepoint.ttf differ diff --git a/test/subset/data/expected/basics/Roboto-Regular.abc.default.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Roboto-Regular.abc.default.retain-all-codepoint.ttf new file mode 100644 index 000000000..12d92081b Binary files /dev/null and b/test/subset/data/expected/basics/Roboto-Regular.abc.default.retain-all-codepoint.ttf differ diff --git a/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints-retain-gids.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints-retain-gids.retain-all-codepoint.ttf new file mode 100644 index 000000000..52dc47457 Binary files /dev/null and b/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints-retain-gids.retain-all-codepoint.ttf differ diff --git a/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.retain-all-codepoint.ttf new file mode 100644 index 000000000..52dc47457 Binary files /dev/null and b/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.retain-all-codepoint.ttf differ diff --git a/test/subset/data/expected/basics/Roboto-Regular.abc.name-ids.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Roboto-Regular.abc.name-ids.retain-all-codepoint.ttf new file mode 100644 index 000000000..12d92081b Binary files /dev/null and b/test/subset/data/expected/basics/Roboto-Regular.abc.name-ids.retain-all-codepoint.ttf differ diff --git a/test/subset/data/expected/basics/Roboto-Regular.abc.retain-gids.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Roboto-Regular.abc.retain-gids.retain-all-codepoint.ttf new file mode 100644 index 000000000..12d92081b Binary files /dev/null and b/test/subset/data/expected/basics/Roboto-Regular.abc.retain-gids.retain-all-codepoint.ttf differ diff --git a/test/subset/data/tests/basics.tests b/test/subset/data/tests/basics.tests index c310722b0..772f33cc3 100644 --- a/test/subset/data/tests/basics.tests +++ b/test/subset/data/tests/basics.tests @@ -15,3 +15,4 @@ b c ac a +* diff --git a/test/subset/subset_test_suite.py b/test/subset/subset_test_suite.py index ad438ee2b..47664d0b6 100644 --- a/test/subset/subset_test_suite.py +++ b/test/subset/subset_test_suite.py @@ -12,7 +12,10 @@ class Test: self.subset = subset def unicodes(self): - return ",".join("%X" % ord(c) for (i, c) in enumerate(self.subset)) + if self.subset == '*': + return self.subset[0] + else: + return ",".join("%X" % ord(c) for (i, c) in enumerate(self.subset)) def get_profile_flags(self): with io.open(self.profile_path, mode="r", encoding="utf-8") as f: @@ -23,7 +26,12 @@ class Test: font_base_name_parts = os.path.splitext(font_base_name) profile_name = os.path.splitext(os.path.basename(self.profile_path))[0] - return "%s.%s.%s%s" % (font_base_name_parts[0], + if self.unicodes() == "*": + return "%s.%s.retain-all-codepoint%s" % (font_base_name_parts[0], + profile_name, + font_base_name_parts[1]) + else: + return "%s.%s.%s%s" % (font_base_name_parts[0], profile_name, self.unicodes(), font_base_name_parts[1]) @@ -39,9 +47,9 @@ class SubsetTestSuite: def __init__(self, test_path, definition): self.test_path = test_path - self.fonts = set() - self.profiles = set() - self.subsets = set() + self.fonts = [] + self.profiles = [] + self.subsets = [] self._parse(definition) def get_output_directory(self): @@ -87,6 +95,6 @@ class SubsetTestSuite: if line in destinations: current_destination = destinations[line] elif current_destination is not None: - current_destination.add(line) + current_destination.append(line) else: raise Exception("Failed to parse test suite file.") diff --git a/util/hb-subset.cc b/util/hb-subset.cc index 4b7af8e9a..6d87c563c 100644 --- a/util/hb-subset.cc +++ b/util/hb-subset.cc @@ -53,6 +53,13 @@ struct subset_consumer_t { // TODO(Q1) does this only get called with at least 1 codepoint? hb_set_t *codepoints = hb_subset_input_unicode_set (input); + if (0 == strcmp (text, "*")) + { + hb_face_t *face = hb_font_get_face (font); + hb_face_collect_unicodes (face, codepoints); + return; + } + gchar *c = (gchar *)text; do { gunichar cp = g_utf8_get_char(c); diff --git a/util/options.cc b/util/options.cc index 4e6ca57e7..42dfa956a 100644 --- a/util/options.cc +++ b/util/options.cc @@ -349,28 +349,36 @@ parse_unicodes (const char *name G_GNUC_UNUSED, } GString *gs = g_string_new (nullptr); - char *s = (char *) arg; - char *p; - - while (s && *s) + if (0 == strcmp (arg, "*")) + { + g_string_append_c (gs, '*'); + } + else { - while (*s && strchr (DELIMITERS, *s)) - s++; - if (!*s) - break; - errno = 0; - hb_codepoint_t u = strtoul (s, &p, 16); - if (errno || s == p) + char *s = (char *) arg; + char *p; + + while (s && *s) { - g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, - "Failed parsing Unicode values at: '%s'", s); - return false; + while (*s && strchr (DELIMITERS, *s)) + s++; + if (!*s) + break; + + errno = 0; + hb_codepoint_t u = strtoul (s, &p, 16); + if (errno || s == p) + { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + "Failed parsing Unicode values at: '%s'", s); + return false; + } + + g_string_append_unichar (gs, u); + + s = p; } - - g_string_append_unichar (gs, u); - - s = p; } text_opts->text_len = gs->len;