/** * SECTION:hb-shape-plan * @title: hb-shape-plan * @short_description: Object representing a shaping plan * @include: hb.h * * Shape plans are an internal mechanism. Each plan contains state * describing how HarfBuzz will shape a particular text segment, based on * the combination of segment properties and the capabilities in the * font face in use. * * Shape plans are not used for shaping directly, but can be queried to * access certain information about how shaping will perform, given a set * of specific input parameters (script, language, direction, features, * etc.). * * Most client programs will not need to deal with shape plans directly.
**/
/** * hb_shape_plan_create: * @face: #hb_face_t to use * @props: The #hb_segment_properties_t of the segment * @user_features: (array length=num_user_features): The list of user-selected features * @num_user_features: The number of user-selected features * @shaper_list: (array zero-terminated=1): List of shapers to try * * Constructs a shaping plan for a combination of @face, @user_features, @props, * and @shaper_list. * * Return value: (transfer full): The shaping plan * * Since: 0.9.7
**/
hb_shape_plan_t *
hb_shape_plan_create (hb_face_t *face, const hb_segment_properties_t *props, const hb_feature_t *user_features, unsignedint num_user_features, constchar * const *shaper_list)
{ return hb_shape_plan_create2 (face, props,
user_features, num_user_features,
nullptr, 0,
shaper_list);
}
/** * hb_shape_plan_create2: * @face: #hb_face_t to use * @props: The #hb_segment_properties_t of the segment * @user_features: (array length=num_user_features): The list of user-selected features * @num_user_features: The number of user-selected features * @coords: (array length=num_coords): The list of variation-space coordinates * @num_coords: The number of variation-space coordinates * @shaper_list: (array zero-terminated=1): List of shapers to try * * The variable-font version of #hb_shape_plan_create. * Constructs a shaping plan for a combination of @face, @user_features, @props, * and @shaper_list, plus the variation-space coordinates @coords. * * Return value: (transfer full): The shaping plan * * Since: 1.4.0
**/
hb_shape_plan_t *
hb_shape_plan_create2 (hb_face_t *face, const hb_segment_properties_t *props, const hb_feature_t *user_features, unsignedint num_user_features, constint *coords, unsignedint num_coords, constchar * const *shaper_list)
{
DEBUG_MSG_FUNC (SHAPE_PLAN, nullptr, "face=%p num_features=%u num_coords=%u shaper_list=%p",
face,
num_user_features,
num_coords,
shaper_list);
if (unlikely (props->direction == HB_DIRECTION_INVALID)) return hb_shape_plan_get_empty ();
hb_shape_plan_t *shape_plan;
if (unlikely (!props)) goto bail; if (!(shape_plan = hb_object_create<hb_shape_plan_t> ())) goto bail;
if (unlikely (!face))
face = hb_face_get_empty ();
hb_face_make_immutable (face);
shape_plan->face_unsafe = face;
/** * hb_shape_plan_reference: (skip) * @shape_plan: A shaping plan * * Increases the reference count on the given shaping plan. * * Return value: (transfer full): @shape_plan * * Since: 0.9.7
**/
hb_shape_plan_t *
hb_shape_plan_reference (hb_shape_plan_t *shape_plan)
{ return hb_object_reference (shape_plan);
}
/** * hb_shape_plan_destroy: (skip) * @shape_plan: A shaping plan * * Decreases the reference count on the given shaping plan. When the * reference count reaches zero, the shaping plan is destroyed, * freeing all memory. * * Since: 0.9.7
**/ void
hb_shape_plan_destroy (hb_shape_plan_t *shape_plan)
{ if (!hb_object_destroy (shape_plan)) return;
hb_free (shape_plan);
}
/** * hb_shape_plan_set_user_data: (skip) * @shape_plan: A shaping plan * @key: The user-data key to set * @data: A pointer to the user data * @destroy: (nullable): A callback to call when @data is not needed anymore * @replace: Whether to replace an existing data with the same key * * Attaches a user-data key/data pair to the given shaping plan. * * Return value: `true` if success, `false` otherwise. * * Since: 0.9.7
**/
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)
{ return hb_object_set_user_data (shape_plan, key, data, destroy, replace);
}
/** * hb_shape_plan_get_user_data: (skip) * @shape_plan: A shaping plan * @key: The user-data key to query * * Fetches the user data associated with the specified key, * attached to the specified shaping plan. * * Return value: (transfer none): A pointer to the user data * * Since: 0.9.7
**/ void *
hb_shape_plan_get_user_data (const hb_shape_plan_t *shape_plan,
hb_user_data_key_t *key)
{ return hb_object_get_user_data (shape_plan, key);
}
/** * hb_shape_plan_get_shaper: * @shape_plan: A shaping plan * * Fetches the shaper from a given shaping plan. * * Return value: (transfer none): The shaper * * Since: 0.9.7
**/ constchar *
hb_shape_plan_get_shaper (hb_shape_plan_t *shape_plan)
{ return shape_plan->key.shaper_name;
}
returnfalse;
} /** * hb_shape_plan_execute: * @shape_plan: A shaping plan * @font: The #hb_font_t to use * @buffer: The #hb_buffer_t to work upon * @features: (array length=num_features): Features to enable * @num_features: The number of features to enable * * Executes the given shaping plan on the specified buffer, using * the given @font and @features. * * Return value: `true` if success, `false` otherwise. * * Since: 0.9.7
**/
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, unsignedint num_features)
{ bool ret = _hb_shape_plan_execute_internal (shape_plan, font, buffer,
features, num_features);
if (ret && buffer->content_type == HB_BUFFER_CONTENT_TYPE_UNICODE)
buffer->content_type = HB_BUFFER_CONTENT_TYPE_GLYPHS;
return ret;
}
/* * Caching
*/
/** * hb_shape_plan_create_cached: * @face: #hb_face_t to use * @props: The #hb_segment_properties_t of the segment * @user_features: (array length=num_user_features): The list of user-selected features * @num_user_features: The number of user-selected features * @shaper_list: (array zero-terminated=1): List of shapers to try * * Creates a cached shaping plan suitable for reuse, for a combination * of @face, @user_features, @props, and @shaper_list. * * Return value: (transfer full): The shaping plan * * Since: 0.9.7
**/
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, unsignedint num_user_features, constchar * const *shaper_list)
{ return hb_shape_plan_create_cached2 (face, props,
user_features, num_user_features,
nullptr, 0,
shaper_list);
}
/** * hb_shape_plan_create_cached2: * @face: #hb_face_t to use * @props: The #hb_segment_properties_t of the segment * @user_features: (array length=num_user_features): The list of user-selected features * @num_user_features: The number of user-selected features * @coords: (array length=num_coords): The list of variation-space coordinates * @num_coords: The number of variation-space coordinates * @shaper_list: (array zero-terminated=1): List of shapers to try * * The variable-font version of #hb_shape_plan_create_cached. * Creates a cached shaping plan suitable for reuse, for a combination * of @face, @user_features, @props, and @shaper_list, plus the * variation-space coordinates @coords. * * Return value: (transfer full): The shaping plan * * Since: 1.4.0
**/
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, unsignedint num_user_features, constint *coords, unsignedint num_coords, constchar * const *shaper_list)
{
DEBUG_MSG_FUNC (SHAPE_PLAN, nullptr, "face=%p num_features=%u shaper_list=%p",
face,
num_user_features,
shaper_list);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.