< prev index next >

src/java.desktop/share/native/libfontmanager/harfbuzz/hb-face.cc

Print this page

        

*** 26,57 **** * Google Author(s): Behdad Esfahbod */ #include "hb-private.hh" ! #include "hb-ot-layout-private.hh" ! ! #include "hb-font-private.hh" #include "hb-open-file-private.hh" #include "hb-ot-head-table.hh" #include "hb-ot-maxp-table.hh" - #include <string.h> - /* * hb_face_t */ const hb_face_t _hb_face_nil = { HB_OBJECT_HEADER_STATIC, true, /* immutable */ ! NULL, /* reference_table_func */ ! NULL, /* user_data */ ! NULL, /* destroy */ 0, /* index */ 1000, /* upem */ 0, /* num_glyphs */ --- 26,53 ---- * Google Author(s): Behdad Esfahbod */ #include "hb-private.hh" ! #include "hb-face-private.hh" #include "hb-open-file-private.hh" #include "hb-ot-head-table.hh" #include "hb-ot-maxp-table.hh" /* * hb_face_t */ const hb_face_t _hb_face_nil = { HB_OBJECT_HEADER_STATIC, true, /* immutable */ ! nullptr, /* reference_table_func */ ! nullptr, /* user_data */ ! nullptr, /* destroy */ 0, /* index */ 1000, /* upem */ 0, /* num_glyphs */
*** 59,69 **** #define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_INVALID, #include "hb-shaper-list.hh" #undef HB_SHAPER_IMPLEMENT }, ! NULL, /* shape_plans */ }; /** * hb_face_create_for_tables: --- 55,65 ---- #define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_INVALID, #include "hb-shaper-list.hh" #undef HB_SHAPER_IMPLEMENT }, ! nullptr, /* shape_plans */ }; /** * hb_face_create_for_tables:
*** 111,134 **** { hb_face_for_data_closure_t *closure; closure = (hb_face_for_data_closure_t *) calloc (1, sizeof (hb_face_for_data_closure_t)); if (unlikely (!closure)) ! return NULL; closure->blob = blob; closure->index = index; return closure; } static void ! _hb_face_for_data_closure_destroy (hb_face_for_data_closure_t *closure) { hb_blob_destroy (closure->blob); free (closure); } static hb_blob_t * _hb_face_for_data_reference_table (hb_face_t *face HB_UNUSED, hb_tag_t tag, void *user_data) { hb_face_for_data_closure_t *data = (hb_face_for_data_closure_t *) user_data; --- 107,138 ---- { hb_face_for_data_closure_t *closure; closure = (hb_face_for_data_closure_t *) calloc (1, sizeof (hb_face_for_data_closure_t)); if (unlikely (!closure)) ! return nullptr; closure->blob = blob; closure->index = index; return closure; } + #ifdef __SUNPRO_CC + extern "C" { + #endif static void ! _hb_face_for_data_closure_destroy (void *data) { + hb_face_for_data_closure_t *closure = (hb_face_for_data_closure_t *) data; + hb_blob_destroy (closure->blob); free (closure); } + #ifdef __SUNPRO_CC + } + #endif static hb_blob_t * _hb_face_for_data_reference_table (hb_face_t *face HB_UNUSED, hb_tag_t tag, void *user_data) { hb_face_for_data_closure_t *data = (hb_face_for_data_closure_t *) user_data;
*** 171,183 **** if (unlikely (!closure)) return hb_face_get_empty (); face = hb_face_create_for_tables (_hb_face_for_data_reference_table, closure, ! (hb_destroy_func_t) _hb_face_for_data_closure_destroy); ! hb_face_set_index (face, index); return face; } /** --- 175,187 ---- if (unlikely (!closure)) return hb_face_get_empty (); face = hb_face_create_for_tables (_hb_face_for_data_reference_table, closure, ! _hb_face_for_data_closure_destroy); ! face->index = index; return face; } /**
*** 474,479 **** --- 478,512 ---- const OT::maxp *maxp_table = OT::Sanitizer<OT::maxp>::lock_instance (maxp_blob); num_glyphs = maxp_table->get_num_glyphs (); hb_blob_destroy (maxp_blob); } + /** + * hb_face_get_table_tags: + * @face: a face. + * + * Retrieves table tags for a face, if possible. + * + * Return value: total number of tables, or 0 if not possible to list. + * + * Since: 1.6.0 + **/ + unsigned int + hb_face_get_table_tags (hb_face_t *face, + unsigned int start_offset, + unsigned int *table_count, /* IN/OUT */ + hb_tag_t *table_tags /* OUT */) + { + if (face->destroy != _hb_face_for_data_closure_destroy) + { + if (table_count) + *table_count = 0; + return 0; + } + + hb_face_for_data_closure_t *data = (hb_face_for_data_closure_t *) face->user_data; + const OT::OpenTypeFontFile &ot_file = *OT::Sanitizer<OT::OpenTypeFontFile>::lock_instance (data->blob); + const OT::OpenTypeFontFace &ot_face = ot_file.get_face (data->index); + + return ot_face.get_table_tags (start_offset, table_count, table_tags); + }
< prev index next >