1 /* 2 * Copyright © 2022 Google, Inc. 3 * 4 * This is part of HarfBuzz, a text shaping library. 5 * 6 * Permission is hereby granted, without written agreement and without 7 * license or royalty fees, to use, copy, modify, and distribute this 8 * software and its documentation for any purpose, provided that the 9 * above copyright notice and the following two paragraphs appear in 10 * all copies of this software. 11 * 12 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR 13 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 14 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN 15 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 16 * DAMAGE. 17 * 18 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, 19 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 20 * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS 21 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO 22 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 23 * 24 */ 25 26 #ifndef HB_SUBSET_REPACKER_H 27 #define HB_SUBSET_REPACKER_H 28 29 #include "hb.h" 30 31 HB_BEGIN_DECLS 32 33 #ifdef HB_EXPERIMENTAL_API 34 /* 35 * struct hb_link_t 36 * width: offsetSize in bytes 37 * position: position of the offset field in bytes 38 * from beginning of subtable 39 * objidx: index of subtable 40 */ 41 struct hb_link_t 42 { 43 unsigned width; 44 unsigned position; 45 unsigned objidx; 46 }; 47 48 typedef struct hb_link_t hb_link_t; 49 50 /* 51 * struct hb_object_t 52 * head: start of object data 53 * tail: end of object data 54 * num_real_links: num of offset field in the object 55 * real_links: pointer to array of offset info 56 * num_virtual_links: num of objects that must be packed 57 * after current object in the final serialized order 58 * virtual_links: array of virtual link info 59 */ 60 struct hb_object_t 61 { 62 char *head; 63 char *tail; 64 unsigned num_real_links; 65 hb_link_t *real_links; 66 unsigned num_virtual_links; 67 hb_link_t *virtual_links; 68 }; 69 70 typedef struct hb_object_t hb_object_t; 71 72 HB_EXTERN hb_blob_t* 73 hb_subset_repack_or_fail (hb_tag_t table_tag, 74 hb_object_t* hb_objects, 75 unsigned num_hb_objs); 76 77 #endif 78 79 HB_END_DECLS 80 81 #endif /* HB_SUBSET_REPACKER_H */ 82