#include "hb-open-type.hh"
#include "hb-ot-os2-unicode-ranges.hh"
-#include "hb-ot-cmap-table.hh"
#include "hb-set.hh"
TRACE_SUBSET (this);
OS2 *os2_prime = c->serializer->embed (this);
if (unlikely (!os2_prime)) return_trace (false);
+ if (c->plan->flags & HB_SUBSET_FLAGS_NO_PRUNE_UNICODE_RANGES)
+ return_trace (true);
- hb_set_t unicodes;
- hb_map_t unicode_glyphid_map;
-
- OT::cmap::accelerator_t cmap;
- cmap.init (c->plan->source);
- cmap.collect_mapping (&unicodes, &unicode_glyphid_map);
- cmap.fini ();
-
- if (c->plan->unicodes->is_empty ()) unicodes.clear ();
- else hb_set_set (&unicodes, c->plan->unicodes);
-
- + unicode_glyphid_map.iter ()
- | hb_filter (c->plan->glyphs_requested, hb_second)
- | hb_map (hb_first)
- | hb_sink (unicodes)
- ;
+ /* when --gids option is not used, no need to do collect_mapping that is
+ * iterating all codepoints in each subtable, which is not efficient */
uint16_t min_cp, max_cp;
- find_min_and_max_codepoint (&unicodes, &min_cp, &max_cp);
+ find_min_and_max_codepoint (c->plan->unicodes, &min_cp, &max_cp);
os2_prime->usFirstCharIndex = min_cp;
os2_prime->usLastCharIndex = max_cp;
- _update_unicode_ranges (&unicodes, os2_prime->ulUnicodeRange);
+ _update_unicode_ranges (c->plan->unicodes, os2_prime->ulUnicodeRange);
return_trace (true);
}