capture the set of codepoints passed by --unicodes
This commit is contained in:
parent
25e9173fe8
commit
6c52d94fd1
|
@ -43,6 +43,7 @@ struct subset_consumer_t
|
||||||
const font_options_t *font_opts)
|
const font_options_t *font_opts)
|
||||||
{
|
{
|
||||||
font = hb_font_reference (font_opts->get_font ());
|
font = hb_font_reference (font_opts->get_font ());
|
||||||
|
codepoints = hb_set_create();
|
||||||
}
|
}
|
||||||
|
|
||||||
void consume_line (const char *text,
|
void consume_line (const char *text,
|
||||||
|
@ -50,6 +51,16 @@ struct subset_consumer_t
|
||||||
const char *text_before,
|
const char *text_before,
|
||||||
const char *text_after)
|
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
|
hb_bool_t
|
||||||
|
@ -80,16 +91,19 @@ struct subset_consumer_t
|
||||||
{
|
{
|
||||||
// TODO(Q1) check for errors from creates and such
|
// TODO(Q1) check for errors from creates and such
|
||||||
hb_subset_profile_t *subset_profile = hb_subset_profile_create();
|
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_face_t *face = hb_font_get_face (font);
|
||||||
hb_subset_face_t *subset_face = hb_subset_face_create(face);
|
hb_subset_face_t *subset_face = hb_subset_face_create(face);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
hb_blob_t *result = nullptr;
|
hb_blob_t *result = nullptr;
|
||||||
failed = !(hb_subset(subset_profile, subset_input, subset_face, &result)
|
failed = !(hb_subset(subset_profile, subset_input, subset_face, &result)
|
||||||
&& write_file(options.output_file, result));
|
&& write_file(options.output_file, result));
|
||||||
|
|
||||||
hb_subset_profile_destroy (subset_profile);
|
hb_subset_profile_destroy (subset_profile);
|
||||||
hb_subset_input_destroy (subset_input);
|
hb_subset_input_destroy (subset_input);
|
||||||
|
hb_set_destroy (codepoints);
|
||||||
hb_subset_face_destroy (subset_face);
|
hb_subset_face_destroy (subset_face);
|
||||||
hb_blob_destroy (result);
|
hb_blob_destroy (result);
|
||||||
hb_font_destroy (font);
|
hb_font_destroy (font);
|
||||||
|
@ -101,6 +115,7 @@ struct subset_consumer_t
|
||||||
private:
|
private:
|
||||||
output_options_t options;
|
output_options_t options;
|
||||||
hb_font_t *font;
|
hb_font_t *font;
|
||||||
|
hb_set_t *codepoints;
|
||||||
};
|
};
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
Loading…
Reference in New Issue