[subset] For option "--unicodes", add support for "*" to retain all code points
authorQunxin Liu <qxliu@google.com>
Wed, 26 Jun 2019 20:23:24 +0000 (13:23 -0700)
committerGarret Rieger <grieger@google.com>
Mon, 15 Jul 2019 18:18:50 +0000 (11:18 -0700)
14 files changed:
test/subset/data/expected/basics/Comfortaa-Regular-new.default.retain-all-codepoint.ttf [new file with mode: 0644]
test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.retain-all-codepoint.ttf [new file with mode: 0644]
test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.retain-all-codepoint.ttf [new file with mode: 0644]
test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.retain-all-codepoint.ttf [new file with mode: 0644]
test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.retain-all-codepoint.ttf [new file with mode: 0644]
test/subset/data/expected/basics/Roboto-Regular.abc.default.retain-all-codepoint.ttf [new file with mode: 0644]
test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints-retain-gids.retain-all-codepoint.ttf [new file with mode: 0644]
test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.retain-all-codepoint.ttf [new file with mode: 0644]
test/subset/data/expected/basics/Roboto-Regular.abc.name-ids.retain-all-codepoint.ttf [new file with mode: 0644]
test/subset/data/expected/basics/Roboto-Regular.abc.retain-gids.retain-all-codepoint.ttf [new file with mode: 0644]
test/subset/data/tests/basics.tests
test/subset/subset_test_suite.py
util/hb-subset.cc
util/options.cc

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 (file)
index 0000000..5de8d89
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 (file)
index 0000000..e3c0727
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 (file)
index 0000000..6425ecf
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 (file)
index 0000000..fbb8c33
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 (file)
index 0000000..cc2805a
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 (file)
index 0000000..12d9208
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 (file)
index 0000000..52dc474
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 (file)
index 0000000..52dc474
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 (file)
index 0000000..12d9208
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 (file)
index 0000000..12d9208
Binary files /dev/null and b/test/subset/data/expected/basics/Roboto-Regular.abc.retain-gids.retain-all-codepoint.ttf differ
index ad438ee..47664d0 100644 (file)
@@ -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.")
index 4b7af8e..6d87c56 100644 (file)
@@ -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);
index 4e6ca57..42dfa95 100644 (file)
@@ -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;