[subset] Use gsub closure if ot layout is not being dropped.
This commit is contained in:
parent
a5673da9be
commit
feb23892a3
@ -973,8 +973,14 @@ hb_ot_layout_lookups_substitute_closure (hb_face_t *face,
|
||||
do
|
||||
{
|
||||
glyphs_length = glyphs->get_population ();
|
||||
for (hb_codepoint_t lookup_index = HB_SET_VALUE_INVALID; hb_set_next (lookups, &lookup_index);)
|
||||
gsub.get_lookup (lookup_index).closure (&c, lookup_index);
|
||||
if (lookups != nullptr)
|
||||
{
|
||||
for (hb_codepoint_t lookup_index = HB_SET_VALUE_INVALID; hb_set_next (lookups, &lookup_index);)
|
||||
gsub.get_lookup (lookup_index).closure (&c, lookup_index);
|
||||
} else {
|
||||
for (unsigned int i = 0; i < gsub.get_lookup_count (); i++)
|
||||
gsub.get_lookup (i).closure (&c, i);
|
||||
}
|
||||
} while (glyphs_length != glyphs->get_population ());
|
||||
}
|
||||
|
||||
|
@ -53,9 +53,22 @@ _add_gid_and_children (const OT::glyf::accelerator_t &glyf,
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_gsub_closure (hb_face_t *face, hb_set_t *gids_to_retain)
|
||||
{
|
||||
// TODO(grieger): This uses all lookups, instead collect
|
||||
// the set of lookups that are relevant.
|
||||
// See fontTools implementation.
|
||||
hb_ot_layout_lookups_substitute_closure (face,
|
||||
nullptr,
|
||||
gids_to_retain);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
_populate_gids_to_retain (hb_face_t *face,
|
||||
const hb_set_t *unicodes,
|
||||
bool close_over_gsub,
|
||||
hb_set_t *unicodes_to_retain,
|
||||
hb_map_t *codepoint_to_glyph,
|
||||
hb_vector_t<hb_codepoint_t> *glyphs)
|
||||
@ -82,10 +95,12 @@ _populate_gids_to_retain (hb_face_t *face,
|
||||
initial_gids_to_retain->add (gid);
|
||||
}
|
||||
|
||||
if (close_over_gsub)
|
||||
// Add all glyphs needed for GSUB substitutions.
|
||||
_gsub_closure (face, initial_gids_to_retain);
|
||||
|
||||
// Populate a full set of glyphs to retain by adding all referenced
|
||||
// composite glyphs.
|
||||
// TODO expand with glyphs reached by G*
|
||||
|
||||
hb_codepoint_t gid = HB_SET_VALUE_INVALID;
|
||||
hb_set_t *all_gids_to_retain = hb_set_create ();
|
||||
while (initial_gids_to_retain->next (&gid))
|
||||
@ -141,6 +156,7 @@ hb_subset_plan_create (hb_face_t *face,
|
||||
|
||||
_populate_gids_to_retain (face,
|
||||
input->unicodes,
|
||||
!plan->drop_ot_layout,
|
||||
plan->unicodes,
|
||||
plan->codepoint_to_glyph,
|
||||
&plan->glyphs);
|
||||
|
Loading…
Reference in New Issue
Block a user