[subset-plan] Use gid-to-unicodes multimap

One test fails. Need investigation.
This commit is contained in:
Behdad Esfahbod 2022-12-02 16:09:10 -07:00
parent da7961b2e8
commit 32e049a315
1 changed files with 31 additions and 6 deletions

View File

@ -524,14 +524,39 @@ _populate_unicodes_to_retain (const hb_set_t *unicodes,
cmap_unicodes = &plan->accelerator->unicodes; cmap_unicodes = &plan->accelerator->unicodes;
} }
for (hb_codepoint_t cp : *cmap_unicodes) if (plan->accelerator &&
unicodes->get_population () < cmap_unicodes->get_population () &&
glyphs->get_population () < cmap_unicodes->get_population ())
{ {
hb_codepoint_t gid = (*unicode_glyphid_map)[cp]; auto &gid_to_unicodes = plan->accelerator->gid_to_unicodes;
if (!unicodes->has (cp) && !glyphs->has (gid)) for (hb_codepoint_t gid : *glyphs)
continue; {
auto unicodes = gid_to_unicodes.get (gid);
plan->codepoint_to_glyph->set (cp, gid); for (hb_codepoint_t cp : unicodes)
plan->unicode_to_new_gid_list.push (hb_pair (cp, gid)); {
plan->codepoint_to_glyph->set (cp, gid);
plan->unicode_to_new_gid_list.push (hb_pair (cp, gid));
}
}
for (hb_codepoint_t cp : *unicodes)
{
hb_codepoint_t gid = (*unicode_glyphid_map)[cp];
plan->codepoint_to_glyph->set (cp, gid);
plan->unicode_to_new_gid_list.push (hb_pair (cp, gid));
}
}
else
{
for (hb_codepoint_t cp : *cmap_unicodes)
{
hb_codepoint_t gid = (*unicode_glyphid_map)[cp];
if (!unicodes->has (cp) && !glyphs->has (gid))
continue;
plan->codepoint_to_glyph->set (cp, gid);
plan->unicode_to_new_gid_list.push (hb_pair (cp, gid));
}
} }
/* Add gids which where requested, but not mapped in cmap */ /* Add gids which where requested, but not mapped in cmap */