[subset] support option "--notdef-outline"
This commit is contained in:
parent
10ad185932
commit
d07f789ae3
|
@ -209,7 +209,10 @@ struct glyf
|
||||||
if (!plan->old_gid_for_new_gid (new_gid, &subset_glyph.old_gid))
|
if (!plan->old_gid_for_new_gid (new_gid, &subset_glyph.old_gid))
|
||||||
return subset_glyph;
|
return subset_glyph;
|
||||||
|
|
||||||
subset_glyph.source_glyph = glyf.glyph_for_gid (subset_glyph.old_gid, true);
|
if (new_gid == 0 && !plan->notdef_outline)
|
||||||
|
subset_glyph.source_glyph = Glyph ();
|
||||||
|
else
|
||||||
|
subset_glyph.source_glyph = glyf.glyph_for_gid (subset_glyph.old_gid, true);
|
||||||
if (plan->drop_hints) subset_glyph.drop_hints_bytes ();
|
if (plan->drop_hints) subset_glyph.drop_hints_bytes ();
|
||||||
else subset_glyph.dest_start = subset_glyph.source_glyph.get_bytes ();
|
else subset_glyph.dest_start = subset_glyph.source_glyph.get_bytes ();
|
||||||
|
|
||||||
|
|
|
@ -419,7 +419,7 @@ struct gvar
|
||||||
out->glyphCount = num_glyphs;
|
out->glyphCount = num_glyphs;
|
||||||
|
|
||||||
unsigned int subset_data_size = 0;
|
unsigned int subset_data_size = 0;
|
||||||
for (hb_codepoint_t gid = 0; gid < num_glyphs; gid++)
|
for (hb_codepoint_t gid = c->plan->notdef_outline ? 0 : 1; gid < num_glyphs; gid++)
|
||||||
{
|
{
|
||||||
hb_codepoint_t old_gid;
|
hb_codepoint_t old_gid;
|
||||||
if (!c->plan->old_gid_for_new_gid (gid, &old_gid)) continue;
|
if (!c->plan->old_gid_for_new_gid (gid, &old_gid)) continue;
|
||||||
|
@ -449,7 +449,7 @@ struct gvar
|
||||||
out->dataZ = subset_data - (char *) out;
|
out->dataZ = subset_data - (char *) out;
|
||||||
|
|
||||||
unsigned int glyph_offset = 0;
|
unsigned int glyph_offset = 0;
|
||||||
for (hb_codepoint_t gid = 0; gid < num_glyphs; gid++)
|
for (hb_codepoint_t gid = c->plan->notdef_outline ? 0 : 1; gid < num_glyphs; gid++)
|
||||||
{
|
{
|
||||||
hb_codepoint_t old_gid;
|
hb_codepoint_t old_gid;
|
||||||
hb_bytes_t var_data_bytes = c->plan->old_gid_for_new_gid (gid, &old_gid)
|
hb_bytes_t var_data_bytes = c->plan->old_gid_for_new_gid (gid, &old_gid)
|
||||||
|
|
|
@ -55,6 +55,7 @@ hb_subset_input_create_or_fail ()
|
||||||
input->retain_gids = false;
|
input->retain_gids = false;
|
||||||
input->name_legacy = false;
|
input->name_legacy = false;
|
||||||
input->overlaps_flag = false;
|
input->overlaps_flag = false;
|
||||||
|
input->notdef_outline = false;
|
||||||
input->retain_all_layout_features = false;
|
input->retain_all_layout_features = false;
|
||||||
|
|
||||||
hb_tag_t default_drop_tables[] = {
|
hb_tag_t default_drop_tables[] = {
|
||||||
|
@ -349,3 +350,17 @@ hb_subset_input_get_overlaps_flag (hb_subset_input_t *subset_input)
|
||||||
{
|
{
|
||||||
return subset_input->overlaps_flag;
|
return subset_input->overlaps_flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HB_EXTERN void
|
||||||
|
hb_subset_input_set_notdef_outline (hb_subset_input_t *subset_input,
|
||||||
|
hb_bool_t notdef_outline)
|
||||||
|
{
|
||||||
|
subset_input->notdef_outline = notdef_outline;
|
||||||
|
}
|
||||||
|
|
||||||
|
HB_EXTERN hb_bool_t
|
||||||
|
hb_subset_input_get_notdef_outline (hb_subset_input_t *subset_input)
|
||||||
|
{
|
||||||
|
return subset_input->notdef_outline;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -45,12 +45,14 @@ struct hb_subset_input_t
|
||||||
hb_set_t *drop_tables;
|
hb_set_t *drop_tables;
|
||||||
hb_set_t *layout_features;
|
hb_set_t *layout_features;
|
||||||
|
|
||||||
bool drop_hints;
|
//use hb_bool_t to be consistent with G option parser
|
||||||
bool desubroutinize;
|
hb_bool_t drop_hints;
|
||||||
bool retain_gids;
|
hb_bool_t desubroutinize;
|
||||||
bool name_legacy;
|
hb_bool_t retain_gids;
|
||||||
bool overlaps_flag;
|
hb_bool_t name_legacy;
|
||||||
bool retain_all_layout_features;
|
hb_bool_t overlaps_flag;
|
||||||
|
hb_bool_t notdef_outline;
|
||||||
|
hb_bool_t retain_all_layout_features;
|
||||||
/* TODO
|
/* TODO
|
||||||
*
|
*
|
||||||
* features
|
* features
|
||||||
|
|
|
@ -401,6 +401,7 @@ hb_subset_plan_create (hb_face_t *face,
|
||||||
plan->retain_gids = input->retain_gids;
|
plan->retain_gids = input->retain_gids;
|
||||||
plan->name_legacy = input->name_legacy;
|
plan->name_legacy = input->name_legacy;
|
||||||
plan->overlaps_flag = input->overlaps_flag;
|
plan->overlaps_flag = input->overlaps_flag;
|
||||||
|
plan->notdef_outline = input->notdef_outline;
|
||||||
plan->retain_all_layout_features = input->retain_all_layout_features;
|
plan->retain_all_layout_features = input->retain_all_layout_features;
|
||||||
plan->unicodes = hb_set_create ();
|
plan->unicodes = hb_set_create ();
|
||||||
plan->name_ids = hb_set_reference (input->name_ids);
|
plan->name_ids = hb_set_reference (input->name_ids);
|
||||||
|
|
|
@ -45,6 +45,7 @@ struct hb_subset_plan_t
|
||||||
bool retain_gids : 1;
|
bool retain_gids : 1;
|
||||||
bool name_legacy : 1;
|
bool name_legacy : 1;
|
||||||
bool overlaps_flag : 1;
|
bool overlaps_flag : 1;
|
||||||
|
bool notdef_outline : 1;
|
||||||
bool retain_all_layout_features : 1;
|
bool retain_all_layout_features : 1;
|
||||||
|
|
||||||
// For each cp that we'd like to retain maps to the corresponding gid.
|
// For each cp that we'd like to retain maps to the corresponding gid.
|
||||||
|
|
|
@ -103,6 +103,13 @@ hb_subset_input_set_overlaps_flag (hb_subset_input_t *subset_input,
|
||||||
HB_EXTERN hb_bool_t
|
HB_EXTERN hb_bool_t
|
||||||
hb_subset_input_get_overlaps_flag (hb_subset_input_t *subset_input);
|
hb_subset_input_get_overlaps_flag (hb_subset_input_t *subset_input);
|
||||||
|
|
||||||
|
HB_EXTERN void
|
||||||
|
hb_subset_input_set_notdef_outline (hb_subset_input_t *subset_input,
|
||||||
|
hb_bool_t notdef_outline);
|
||||||
|
|
||||||
|
HB_EXTERN hb_bool_t
|
||||||
|
hb_subset_input_get_notdef_outline (hb_subset_input_t *subset_input);
|
||||||
|
|
||||||
/* hb_subset () */
|
/* hb_subset () */
|
||||||
HB_EXTERN hb_face_t *
|
HB_EXTERN hb_face_t *
|
||||||
hb_subset (hb_face_t *source, hb_subset_input_t *input);
|
hb_subset (hb_face_t *source, hb_subset_input_t *input);
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue