From 48b68370743264f900457e4b463e9ced5325ceae Mon Sep 17 00:00:00 2001 From: Garret Rieger Date: Wed, 23 Nov 2022 20:51:51 +0000 Subject: [PATCH] [subset] add a CFF specific accelerator object. This allows CFF specific accelerator structures to be isolated to the CFF code. --- src/hb-subset-accelerator.hh | 12 +++++++++++- src/hb-subset-cff-common.hh | 22 ++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/hb-subset-accelerator.hh b/src/hb-subset-accelerator.hh index ecf751748..1caf93c7f 100644 --- a/src/hb-subset-accelerator.hh +++ b/src/hb-subset-accelerator.hh @@ -35,6 +35,10 @@ extern HB_INTERNAL hb_user_data_key_t _hb_subset_accelerator_user_data_key; +namespace CFF { +struct cff_subset_accelerator_t; +} + struct hb_subset_accelerator_t { static hb_user_data_key_t* user_data_key() @@ -62,11 +66,17 @@ struct hb_subset_accelerator_t hb_subset_accelerator_t(const hb_map_t& unicode_to_gid_, const hb_set_t& unicodes_) - : unicode_to_gid(unicode_to_gid_), unicodes(unicodes_) {} + : unicode_to_gid(unicode_to_gid_), unicodes(unicodes_), + has_seac(false), cff_accelerator(nullptr) {} + // Generic const hb_map_t unicode_to_gid; const hb_set_t unicodes; + + // CFF bool has_seac; + CFF::cff_subset_accelerator_t* cff_accelerator; + // TODO(garretrieger): cumulative glyf checksum map // TODO(garretrieger): sanitized table cache. diff --git a/src/hb-subset-cff-common.hh b/src/hb-subset-cff-common.hh index 21fd6f899..78b75d17f 100644 --- a/src/hb-subset-cff-common.hh +++ b/src/hb-subset-cff-common.hh @@ -402,6 +402,28 @@ struct parsed_cs_str_vec_t : hb_vector_t typedef hb_vector_t SUPER; }; +struct cff_subset_accelerator_t +{ + static cff_subset_accelerator_t* create() { + cff_subset_accelerator_t* accel = + (cff_subset_accelerator_t*) hb_malloc (sizeof(cff_subset_accelerator_t)); + new (accel) cff_subset_accelerator_t (); + return accel; + } + + static void destroy(void* value) { + if (!value) return; + + cff_subset_accelerator_t* accel = (cff_subset_accelerator_t*) value; + accel->~cff_subset_accelerator_t (); + hb_free (accel); + } + + parsed_cs_str_t parsed_charstring; + parsed_cs_str_vec_t parsed_global_subrs; + parsed_cs_str_vec_t parsed_local_subrs; +}; + struct subr_subset_param_t { subr_subset_param_t (parsed_cs_str_t *parsed_charstring_,