Hide all mentions of name_table_overrides behind EXPERIMENTAL_API

Fixes https://github.com/harfbuzz/harfbuzz/issues/3872
This commit is contained in:
Behdad Esfahbod 2022-11-14 16:06:39 -07:00
parent ebc382a847
commit f6076890c5
5 changed files with 54 additions and 13 deletions

View File

@ -142,14 +142,19 @@ struct NameRecord
return UNSUPPORTED; return UNSUPPORTED;
} }
NameRecord* copy (hb_serialize_context_t *c, const void *base, NameRecord* copy (hb_serialize_context_t *c, const void *base
const hb_hashmap_t<unsigned, hb_bytes_t> *name_table_overrides) const #ifdef HB_EXPERIMENTAL_API
, const hb_hashmap_t<unsigned, hb_bytes_t> *name_table_overrides
#endif
) const
{ {
TRACE_SERIALIZE (this); TRACE_SERIALIZE (this);
auto snap = c->snapshot (); HB_UNUSED auto snap = c->snapshot ();
auto *out = c->embed (this); auto *out = c->embed (this);
if (unlikely (!out)) return_trace (nullptr); if (unlikely (!out)) return_trace (nullptr);
if (name_table_overrides->has (nameID)) { #ifdef HB_EXPERIMENTAL_API
if (name_table_overrides->has (nameID))
{
hb_bytes_t name_bytes = name_table_overrides->get (nameID); hb_bytes_t name_bytes = name_table_overrides->get (nameID);
unsigned text_size = hb_ot_name_convert_utf<hb_utf8_t, hb_utf16_be_t> (name_bytes, nullptr, nullptr); unsigned text_size = hb_ot_name_convert_utf<hb_utf8_t, hb_utf16_be_t> (name_bytes, nullptr, nullptr);
@ -177,7 +182,10 @@ struct NameRecord
utf16_be_bytes.copy (c); utf16_be_bytes.copy (c);
c->add_link (out->offset, c->pop_pack (), hb_serialize_context_t::Tail, 0); c->add_link (out->offset, c->pop_pack (), hb_serialize_context_t::Tail, 0);
hb_free (name_str_utf16_be); hb_free (name_str_utf16_be);
} else { }
else
#endif
{
out->offset.serialize_copy (c, offset, base, 0, hb_serialize_context_t::Tail, length); out->offset.serialize_copy (c, offset, base, 0, hb_serialize_context_t::Tail, length);
} }
return_trace (out); return_trace (out);
@ -293,8 +301,11 @@ struct name
hb_requires (hb_is_source_of (Iterator, const NameRecord &))> hb_requires (hb_is_source_of (Iterator, const NameRecord &))>
bool serialize (hb_serialize_context_t *c, bool serialize (hb_serialize_context_t *c,
Iterator it, Iterator it,
const void *src_string_pool, const void *src_string_pool
const hb_hashmap_t<unsigned, hb_bytes_t> *name_table_overrides) #ifdef HB_EXPERIMENTAL_API
, const hb_hashmap_t<unsigned, hb_bytes_t> *name_table_overrides
#endif
)
{ {
TRACE_SERIALIZE (this); TRACE_SERIALIZE (this);
@ -316,7 +327,12 @@ struct name
records.qsort (); records.qsort ();
c->copy_all (records, src_string_pool, name_table_overrides); c->copy_all (records,
src_string_pool
#ifdef HB_EXPERIMENTAL_API
, name_table_overrides
#endif
);
hb_free (records.arrayZ); hb_free (records.arrayZ);
@ -345,7 +361,12 @@ struct name
}) })
; ;
name_prime->serialize (c->serializer, it, std::addressof (this + stringOffset), c->plan->name_table_overrides); name_prime->serialize (c->serializer,
it, std::addressof (this + stringOffset)
#ifdef HB_EXPERIMENTAL_API
, c->plan->name_table_overrides
#endif
);
return_trace (name_prime->count); return_trace (name_prime->count);
} }

View File

@ -49,9 +49,15 @@ hb_subset_input_create_or_fail (void)
set = hb_set_create (); set = hb_set_create ();
input->axes_location = hb_hashmap_create<hb_tag_t, float> (); input->axes_location = hb_hashmap_create<hb_tag_t, float> ();
#ifdef HB_EXPERIMENTAL_API
input->name_table_overrides = hb_hashmap_create<unsigned, hb_bytes_t> (); input->name_table_overrides = hb_hashmap_create<unsigned, hb_bytes_t> ();
#endif
if (!input->axes_location || !input->name_table_overrides || input->in_error ()) if (!input->axes_location ||
#ifdef HB_EXPERIMENTAL_API
!input->name_table_overrides ||
#endif
input->in_error ())
{ {
hb_subset_input_destroy (input); hb_subset_input_destroy (input);
return nullptr; return nullptr;
@ -249,13 +255,14 @@ hb_subset_input_destroy (hb_subset_input_t *input)
hb_hashmap_destroy (input->axes_location); hb_hashmap_destroy (input->axes_location);
#ifdef HB_EXPERIMENTAL_API
if (input->name_table_overrides) if (input->name_table_overrides)
{ {
for (auto _ : input->name_table_overrides->values ()) for (auto _ : input->name_table_overrides->values ())
_.fini (); _.fini ();
} }
hb_hashmap_destroy (input->name_table_overrides); hb_hashmap_destroy (input->name_table_overrides);
#endif
hb_free (input); hb_free (input);
} }
@ -487,7 +494,9 @@ hb_subset_preprocess (hb_face_t *source)
return new_source; return new_source;
} }
#endif
#ifdef HB_EXPERIMENTAL_API
/** /**
* hb_subset_input_override_name_table: * hb_subset_input_override_name_table:
* @input: a #hb_subset_input_t object. * @input: a #hb_subset_input_t object.

View File

@ -61,7 +61,9 @@ struct hb_subset_input_t
unsigned flags; unsigned flags;
bool attach_accelerator_data = false; bool attach_accelerator_data = false;
hb_hashmap_t<hb_tag_t, float> *axes_location; hb_hashmap_t<hb_tag_t, float> *axes_location;
#ifdef HB_EXPERIMENTAL_API
hb_hashmap_t<unsigned, hb_bytes_t> *name_table_overrides; hb_hashmap_t<unsigned, hb_bytes_t> *name_table_overrides;
#endif
inline unsigned num_sets () const inline unsigned num_sets () const
{ {
@ -81,7 +83,11 @@ struct hb_subset_input_t
return true; return true;
} }
return axes_location->in_error () || name_table_overrides->in_error (); return axes_location->in_error ()
#ifdef HB_EXPERIMENTAL_API
|| name_table_overrides->in_error ()
#endif
;
} }
}; };

View File

@ -848,6 +848,7 @@ hb_subset_plan_create_or_fail (hb_face_t *face,
plan->check_success (plan->vmtx_map = hb_hashmap_create<unsigned, hb_pair_t<unsigned, int>> ()); plan->check_success (plan->vmtx_map = hb_hashmap_create<unsigned, hb_pair_t<unsigned, int>> ());
plan->check_success (plan->hmtx_map = hb_hashmap_create<unsigned, hb_pair_t<unsigned, int>> ()); plan->check_success (plan->hmtx_map = hb_hashmap_create<unsigned, hb_pair_t<unsigned, int>> ());
#ifdef HB_EXPERIMENTAL_API
plan->check_success (plan->name_table_overrides = hb_hashmap_create<unsigned, hb_bytes_t> ()); plan->check_success (plan->name_table_overrides = hb_hashmap_create<unsigned, hb_bytes_t> ());
if (plan->name_table_overrides && input->name_table_overrides) if (plan->name_table_overrides && input->name_table_overrides)
{ {
@ -869,7 +870,7 @@ hb_subset_plan_create_or_fail (hb_face_t *face,
plan->name_table_overrides->set (name_id, hb_bytes_t (name_str, len)); plan->name_table_overrides->set (name_id, hb_bytes_t (name_str, len));
} }
} }
#endif
void* accel = hb_face_get_user_data(face, hb_subset_accelerator_t::user_data_key()); void* accel = hb_face_get_user_data(face, hb_subset_accelerator_t::user_data_key());

View File

@ -87,12 +87,14 @@ struct hb_subset_plan_t
hb_hashmap_destroy (vmtx_map); hb_hashmap_destroy (vmtx_map);
hb_hashmap_destroy (layout_variation_idx_delta_map); hb_hashmap_destroy (layout_variation_idx_delta_map);
#ifdef HB_EXPERIMENTAL_API
if (name_table_overrides) if (name_table_overrides)
{ {
for (auto _ : name_table_overrides->values ()) for (auto _ : name_table_overrides->values ())
_.fini (); _.fini ();
} }
hb_hashmap_destroy (name_table_overrides); hb_hashmap_destroy (name_table_overrides);
#endif
if (user_axes_location) if (user_axes_location)
{ {
@ -198,9 +200,11 @@ struct hb_subset_plan_t
//vmtx metrics map: new gid->(advance, lsb) //vmtx metrics map: new gid->(advance, lsb)
hb_hashmap_t<unsigned, hb_pair_t<unsigned, int>> *vmtx_map; hb_hashmap_t<unsigned, hb_pair_t<unsigned, int>> *vmtx_map;
#ifdef HB_EXPERIMENTAL_API
// name table overrides map: name_id->name string new value or None // name table overrides map: name_id->name string new value or None
// to indicate should remove // to indicate should remove
hb_hashmap_t<unsigned, hb_bytes_t> *name_table_overrides; hb_hashmap_t<unsigned, hb_bytes_t> *name_table_overrides;
#endif
const hb_subset_accelerator_t* accelerator; const hb_subset_accelerator_t* accelerator;