summaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorRod Sheeter <rsheeter@google.com>2018-02-06 15:31:14 -0800
committerBehdad Esfahbod <behdad@behdad.org>2018-02-07 12:41:21 -0500
commit6c52d94fd11915b76e858bc45633ee60b8c1d8f4 (patch)
tree8b4e1aa4b50822b3dd4daf484fc4b36daa827ade /util
parent25e9173fe8446735f7e36ec963c7d3554c85631b (diff)
capture the set of codepoints passed by --unicodes
Diffstat (limited to 'util')
-rw-r--r--util/hb-subset.cc17
1 files changed, 16 insertions, 1 deletions
diff --git a/util/hb-subset.cc b/util/hb-subset.cc
index 2ec0efe3..67cfed19 100644
--- a/util/hb-subset.cc
+++ b/util/hb-subset.cc
@@ -43,6 +43,7 @@ struct subset_consumer_t
const font_options_t *font_opts)
{
font = hb_font_reference (font_opts->get_font ());
+ codepoints = hb_set_create();
}
void consume_line (const char *text,
@@ -50,6 +51,16 @@ struct subset_consumer_t
const char *text_before,
const char *text_after)
{
+ // text appears to be a g_string when set by --unicodes
+ // TODO(Q1) are gunichar and hbcodepoint_t interchangeable?
+ // TODO(Q1) does this only get called with at least 1 codepoint?
+ gchar *c = (gchar *)text;
+ do {
+ gunichar cp = g_utf8_get_char(c);
+ hb_codepoint_t hb_cp = cp; // TODO(Q1) is this safe?
+ hb_set_add(codepoints, hb_cp);
+ g_print (" U+%04X %" G_GINT32_FORMAT "\n", cp, cp);
+ } while ((c = g_utf8_find_next_char(c, text + text_len)) != nullptr);
}
hb_bool_t
@@ -80,16 +91,19 @@ struct subset_consumer_t
{
// TODO(Q1) check for errors from creates and such
hb_subset_profile_t *subset_profile = hb_subset_profile_create();
- hb_subset_input_t *subset_input = hb_subset_input_create (hb_set_get_empty ());
+ hb_subset_input_t *subset_input = hb_subset_input_create (codepoints);
hb_face_t *face = hb_font_get_face (font);
hb_subset_face_t *subset_face = hb_subset_face_create(face);
+
+
hb_blob_t *result = nullptr;
failed = !(hb_subset(subset_profile, subset_input, subset_face, &result)
&& write_file(options.output_file, result));
hb_subset_profile_destroy (subset_profile);
hb_subset_input_destroy (subset_input);
+ hb_set_destroy (codepoints);
hb_subset_face_destroy (subset_face);
hb_blob_destroy (result);
hb_font_destroy (font);
@@ -101,6 +115,7 @@ struct subset_consumer_t
private:
output_options_t options;
hb_font_t *font;
+ hb_set_t *codepoints;
};
int