< 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 >