[subset] For option "--unicodes", add support for "*" to retain all code points

This commit is contained in:
Qunxin Liu 2019-06-26 13:23:24 -07:00 committed by Garret Rieger
parent 4730b350b7
commit 1da1b4dc94
14 changed files with 48 additions and 24 deletions

View File

@ -15,3 +15,4 @@ b
c
ac
a
*

View 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.")

View 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);

View 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;