(root)/
harfbuzz-8.3.0/
src/
hb-subset-repacker.h
       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 */