63 unsigned int num_user_features,
65 unsigned int num_coords,
66 const char *
const *shaper_list)
82 features[0].
start = 1;
89 #ifndef HB_NO_OT_SHAPE
97 #define HB_SHAPER_PLAN(shaper) \
99 if (face->data.shaper) \
101 this->shaper_func = _hb_##shaper##_shape; \
102 this->shaper_name = #shaper; \
109 for (; *shaper_list; shaper_list++)
112 #define HB_SHAPER_IMPLEMENT(shaper) \
113 else if (0 == strcmp (*shaper_list, #shaper)) \
114 HB_SHAPER_PLAN (shaper);
116 #undef HB_SHAPER_IMPLEMENT
124 #define HB_SHAPER_IMPLEMENT(shaper) \
125 else if (shapers[i].func == _hb_##shaper##_shape) \
126 HB_SHAPER_PLAN (shaper);
128 #undef HB_SHAPER_IMPLEMENT
130 #undef HB_SHAPER_PLAN
145 this->user_features[
i].value !=
other->user_features[
i].value ||
160 #ifndef HB_NO_OT_SHAPE
191 unsigned int num_user_features,
192 const char *
const *shaper_list)
195 user_features, num_user_features,
222 unsigned int num_user_features,
224 unsigned int num_coords,
225 const char *
const *shaper_list)
228 "face=%p num_features=%d num_coords=%d shaper_list=%p",
240 if (!(shape_plan = hb_object_create<hb_shape_plan_t> ()))
257 #ifndef HB_NO_OT_SHAPE
264 #ifndef HB_NO_OT_SHAPE
302 return hb_object_reference (shape_plan);
318 if (!hb_object_destroy (shape_plan))
return;
320 #ifndef HB_NO_OT_SHAPE
348 return hb_object_set_user_data (shape_plan,
key,
data,
destroy, replace);
367 return hb_object_get_user_data (shape_plan,
key);
392 unsigned int num_features)
395 "num_features=%d shaper_func=%p, shaper_name=%s",
405 buffer->assert_unicode ();
407 if (
unlikely (!hb_object_is_valid (shape_plan)))
413 #define HB_SHAPER_EXECUTE(shaper) \
415 return font->data.shaper && \
416 _hb_##shaper##_shape (shape_plan, font, buffer, features, num_features); \
421 #define HB_SHAPER_IMPLEMENT(shaper) \
422 else if (shape_plan->key.shaper_func == _hb_##shaper##_shape) \
423 HB_SHAPER_EXECUTE (shaper);
425 #undef HB_SHAPER_IMPLEMENT
427 #undef HB_SHAPER_EXECUTE
451 unsigned int num_features)
453 bool ret = _hb_shape_plan_execute_internal (shape_plan,
font,
buffer,
454 features, num_features);
486 unsigned int num_user_features,
487 const char *
const *shaper_list)
490 user_features, num_user_features,
518 unsigned int num_user_features,
520 unsigned int num_coords,
521 const char *
const *shaper_list)
524 "face=%p num_features=%d shaper_list=%p",
532 bool dont_cache = !hb_object_is_valid (
face);
537 if (!
key.init (
false,
548 if (
node->shape_plan->key.equal (&
key))
556 user_features, num_user_features,
567 node->shape_plan = shape_plan;
568 node->next = cached_plan_nodes;
small capitals from c petite p scientific i
[1]
hb_bool_t hb_segment_properties_equal(const hb_segment_properties_t *a, const hb_segment_properties_t *b)
#define DEBUG_MSG_FUNC(WHAT, OBJ,...)
void hb_face_make_immutable(hb_face_t *face)
hb_face_t * hb_face_get_empty()
hb_shape_plan_t * hb_shape_plan_create2(hb_face_t *face, const hb_segment_properties_t *props, const hb_feature_t *user_features, unsigned int num_user_features, const int *coords, unsigned int num_coords, const char *const *shaper_list)
void hb_shape_plan_destroy(hb_shape_plan_t *shape_plan)
hb_shape_plan_t * hb_shape_plan_get_empty()
hb_bool_t hb_shape_plan_set_user_data(hb_shape_plan_t *shape_plan, hb_user_data_key_t *key, void *data, hb_destroy_func_t destroy, hb_bool_t replace)
hb_bool_t hb_shape_plan_execute(hb_shape_plan_t *shape_plan, hb_font_t *font, hb_buffer_t *buffer, const hb_feature_t *features, unsigned int num_features)
hb_shape_plan_t * hb_shape_plan_reference(hb_shape_plan_t *shape_plan)
void * hb_shape_plan_get_user_data(hb_shape_plan_t *shape_plan, hb_user_data_key_t *key)
hb_shape_plan_t * hb_shape_plan_create_cached(hb_face_t *face, const hb_segment_properties_t *props, const hb_feature_t *user_features, unsigned int num_user_features, const char *const *shaper_list)
hb_shape_plan_t * hb_shape_plan_create_cached2(hb_face_t *face, const hb_segment_properties_t *props, const hb_feature_t *user_features, unsigned int num_user_features, const int *coords, unsigned int num_coords, const char *const *shaper_list)
hb_shape_plan_t * hb_shape_plan_create(hb_face_t *face, const hb_segment_properties_t *props, const hb_feature_t *user_features, unsigned int num_user_features, const char *const *shaper_list)
const char * hb_shape_plan_get_shaper(hb_shape_plan_t *shape_plan)
const hb_shaper_entry_t * _hb_shapers_get()
GLsizei const GLubyte GLsizei GLenum const void * coords
GLenum GLuint GLsizei const GLenum * props
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
@ HB_BUFFER_CONTENT_TYPE_GLYPHS
@ HB_BUFFER_CONTENT_TYPE_UNICODE
void(* hb_destroy_func_t)(void *user_data)
HB_BEGIN_DECLS typedef int hb_bool_t
#define HB_FEATURE_GLOBAL_END
#define HB_FEATURE_GLOBAL_START
HB_EXTERN hb_font_get_glyph_func_t void hb_destroy_func_t destroy
void init(hb_face_t *face, const int *coords, unsigned num_coords)
bool equal(const hb_ot_shape_plan_key_t *other)
HB_INTERNAL bool init0(hb_face_t *face, const hb_shape_plan_key_t *key)
hb_ot_shape_plan_key_t ot
const hb_feature_t * user_features
unsigned int num_user_features
HB_INTERNAL bool equal(const hb_shape_plan_key_t *other)
hb_segment_properties_t props
hb_shape_func_t * shaper_func
HB_INTERNAL bool init(bool copy, hb_face_t *face, const hb_segment_properties_t *props, const hb_feature_t *user_features, unsigned int num_user_features, const int *coords, unsigned int num_coords, const char *const *shaper_list)
HB_INTERNAL bool user_features_match(const hb_shape_plan_key_t *other)
XmlOutput::xml_output tag(const QString &name)