[repacker] Update repacker api method to take a table tag.

This is needed to allow table specific optimizations to be performed during repacking.
This commit is contained in:
Garret Rieger 2022-07-29 20:45:56 +00:00
parent 28c02b3768
commit 69913e012e
2 changed files with 10 additions and 3 deletions

View File

@ -25,18 +25,24 @@
#include "hb-repacker.hh" #include "hb-repacker.hh"
#ifdef HB_EXPERIMENTAL_API #ifdef HB_EXPERIMENTAL_API
/** /**
* hb_subset_repack_or_fail: * hb_subset_repack_or_fail:
* @table_tag: tag of the table being packed, needed to allow table specific optimizations.
* @hb_objects: raw array of struct hb_object_t, which provides * @hb_objects: raw array of struct hb_object_t, which provides
* object graph info * object graph info
* @num_hb_objs: number of hb_object_t in the hb_objects array. * @num_hb_objs: number of hb_object_t in the hb_objects array.
* *
* Given the input object graph info, repack a table to eliminate * Given the input object graph info, repack a table to eliminate
* offset overflows. A nullptr is returned if the repacking attempt fails. * offset overflows. A nullptr is returned if the repacking attempt fails.
* Table specific optimizations (eg. extension promotion in GSUB/GPOS) may be performed.
* Passing HB_TAG_NONE will disable table specific optimizations.
* *
* Since: EXPERIMENTAL * Since: EXPERIMENTAL
**/ **/
hb_blob_t* hb_subset_repack_or_fail (hb_object_t* hb_objects, unsigned num_hb_objs) hb_blob_t* hb_subset_repack_or_fail (hb_tag_t table_tag,
hb_object_t* hb_objects,
unsigned num_hb_objs)
{ {
hb_vector_t<const hb_object_t *> packed; hb_vector_t<const hb_object_t *> packed;
packed.alloc (num_hb_objs + 1); packed.alloc (num_hb_objs + 1);
@ -45,7 +51,7 @@ hb_blob_t* hb_subset_repack_or_fail (hb_object_t* hb_objects, unsigned num_hb_ob
packed.push (&(hb_objects[i])); packed.push (&(hb_objects[i]));
return hb_resolve_overflows (packed, return hb_resolve_overflows (packed,
HB_OT_TAG_GSUB, table_tag,
20, 20,
true); true);
} }

View File

@ -70,7 +70,8 @@ struct hb_object_t
typedef struct hb_object_t hb_object_t; typedef struct hb_object_t hb_object_t;
HB_EXTERN hb_blob_t* HB_EXTERN hb_blob_t*
hb_subset_repack_or_fail (hb_object_t* hb_objects, hb_subset_repack_or_fail (hb_tag_t table_tag,
hb_object_t* hb_objects,
unsigned num_hb_objs); unsigned num_hb_objs);
#endif #endif