## hb-font

hb-font

## Synopsis

    void                hb_font_add_glyph_origin_for_direction
                                                            (hb_font_t *font,
                                                             hb_codepoint_t glyph,
                                                             hb_direction_t direction,
                                                             hb_position_t *x,
                                                             hb_position_t *y);
    hb_font_t *         hb_font_create                      (hb_face_t *face);
    hb_font_t *         hb_font_create_sub_font             (hb_font_t *parent);
    void                hb_font_destroy                     (hb_font_t *font);
    hb_font_funcs_t *   hb_font_funcs_create                (void);
    void                hb_font_funcs_destroy               (hb_font_funcs_t *ffuncs);
    hb_font_funcs_t *   hb_font_funcs_get_empty             (void);
    void *              hb_font_funcs_get_user_data         (hb_font_funcs_t *ffuncs,
                                                             hb_user_data_key_t *key);
    hb_bool_t           hb_font_funcs_is_immutable          (hb_font_funcs_t *ffuncs);
    void                hb_font_funcs_make_immutable        (hb_font_funcs_t *ffuncs);
    hb_font_funcs_t *   hb_font_funcs_reference             (hb_font_funcs_t *ffuncs);
    void                hb_font_funcs_set_glyph_contour_point_func
                                                            (hb_font_funcs_t *ffuncs,
                                                             hb_font_get_glyph_contour_point_func_t func,
                                                             void *user_data,
                                                             hb_destroy_func_t destroy);
    void                hb_font_funcs_set_glyph_extents_func
                                                            (hb_font_funcs_t *ffuncs,
                                                             hb_font_get_glyph_extents_func_t func,
                                                             void *user_data,
                                                             hb_destroy_func_t destroy);
    void                hb_font_funcs_set_glyph_from_name_func
                                                            (hb_font_funcs_t *ffuncs,
                                                             hb_font_get_glyph_from_name_func_t func,
                                                             void *user_data,
                                                             hb_destroy_func_t destroy);
    void                hb_font_funcs_set_glyph_func        (hb_font_funcs_t *ffuncs,
                                                             hb_font_get_glyph_func_t func,
                                                             void *user_data,
                                                             hb_destroy_func_t destroy);
    void                hb_font_funcs_set_glyph_h_advance_func
                                                            (hb_font_funcs_t *ffuncs,
                                                             hb_font_get_glyph_h_advance_func_t func,
                                                             void *user_data,
                                                             hb_destroy_func_t destroy);
    void                hb_font_funcs_set_glyph_h_kerning_func
                                                            (hb_font_funcs_t *ffuncs,
                                                             hb_font_get_glyph_h_kerning_func_t func,
                                                             void *user_data,
                                                             hb_destroy_func_t destroy);
    void                hb_font_funcs_set_glyph_h_origin_func
                                                            (hb_font_funcs_t *ffuncs,
                                                             hb_font_get_glyph_h_origin_func_t func,
                                                             void *user_data,
                                                             hb_destroy_func_t destroy);
    void                hb_font_funcs_set_glyph_name_func   (hb_font_funcs_t *ffuncs,
                                                             hb_font_get_glyph_name_func_t func,
                                                             void *user_data,
                                                             hb_destroy_func_t destroy);
    void                hb_font_funcs_set_glyph_v_advance_func
                                                            (hb_font_funcs_t *ffuncs,
                                                             hb_font_get_glyph_v_advance_func_t func,
                                                             void *user_data,
                                                             hb_destroy_func_t destroy);
    void                hb_font_funcs_set_glyph_v_kerning_func
                                                            (hb_font_funcs_t *ffuncs,
                                                             hb_font_get_glyph_v_kerning_func_t func,
                                                             void *user_data,
                                                             hb_destroy_func_t destroy);
    void                hb_font_funcs_set_glyph_v_origin_func
                                                            (hb_font_funcs_t *ffuncs,
                                                             hb_font_get_glyph_v_origin_func_t func,
                                                             void *user_data,
                                                             hb_destroy_func_t destroy);
    hb_bool_t           hb_font_funcs_set_user_data         (hb_font_funcs_t *ffuncs,
                                                             hb_user_data_key_t *key,
                                                             void *data,
                                                             hb_destroy_func_t destroy,
                                                             hb_bool_t replace);
    typedef             hb_font_funcs_t;
    hb_font_t *         hb_font_get_empty                   (void);
    hb_face_t *         hb_font_get_face                    (hb_font_t *font);
    hb_bool_t           hb_font_get_glyph                   (hb_font_t *font,
                                                             hb_codepoint_t unicode,
                                                             hb_codepoint_t variation_selector,
                                                             hb_codepoint_t *glyph);
    void                hb_font_get_glyph_advance_for_direction
                                                            (hb_font_t *font,
                                                             hb_codepoint_t glyph,
                                                             hb_direction_t direction,
                                                             hb_position_t *x,
                                                             hb_position_t *y);
    hb_position_t       (*hb_font_get_glyph_advance_func_t) (hb_font_t *font,
                                                             void *font_data,
                                                             hb_codepoint_t glyph,
                                                             void *user_data);
    hb_bool_t           hb_font_get_glyph_contour_point     (hb_font_t *font,
                                                             hb_codepoint_t glyph,
                                                             unsigned int point_index,
                                                             hb_position_t *x,
                                                             hb_position_t *y);
    hb_bool_t           hb_font_get_glyph_contour_point_for_origin
                                                            (hb_font_t *font,
                                                             hb_codepoint_t glyph,
                                                             unsigned int point_index,
                                                             hb_direction_t direction,
                                                             hb_position_t *x,
                                                             hb_position_t *y);
    hb_bool_t           (*hb_font_get_glyph_contour_point_func_t)
                                                            (hb_font_t *font,
                                                             void *font_data,
                                                             hb_codepoint_t glyph,
                                                             unsigned int point_index,
                                                             hb_position_t *x,
                                                             hb_position_t *y,
                                                             void *user_data);
    hb_bool_t           hb_font_get_glyph_extents           (hb_font_t *font,
                                                             hb_codepoint_t glyph,
                                                             hb_glyph_extents_t *extents);
    hb_bool_t           hb_font_get_glyph_extents_for_origin
                                                            (hb_font_t *font,
                                                             hb_codepoint_t glyph,
                                                             hb_direction_t direction,
                                                             hb_glyph_extents_t *extents);
    hb_bool_t           (*hb_font_get_glyph_extents_func_t) (hb_font_t *font,
                                                             void *font_data,
                                                             hb_codepoint_t glyph,
                                                             hb_glyph_extents_t *extents,
                                                             void *user_data);
    hb_bool_t           hb_font_get_glyph_from_name         (hb_font_t *font,
                                                             const char *name,
                                                             int len,
                                                             hb_codepoint_t *glyph);
    hb_bool_t           (*hb_font_get_glyph_from_name_func_t)
                                                            (hb_font_t *font,
                                                             void *font_data,
                                                             const char *name,
                                                             int len);
    hb_bool_t           (*hb_font_get_glyph_func_t)         (hb_font_t *font,
                                                             void *font_data,
                                                             hb_codepoint_t unicode,
                                                             hb_codepoint_t variation_selector,
                                                             hb_codepoint_t *glyph,
                                                             void *user_data);
    hb_position_t       hb_font_get_glyph_h_advance         (hb_font_t *font,
                                                             hb_codepoint_t glyph);
    typedef             hb_font_get_glyph_h_advance_func_t;
    hb_position_t       hb_font_get_glyph_h_kerning         (hb_font_t *font,
                                                             hb_codepoint_t left_glyph,
                                                             hb_codepoint_t right_glyph);
    typedef             hb_font_get_glyph_h_kerning_func_t;
    hb_bool_t           hb_font_get_glyph_h_origin          (hb_font_t *font,
                                                             hb_codepoint_t glyph,
                                                             hb_position_t *x,
                                                             hb_position_t *y);
    typedef             hb_font_get_glyph_h_origin_func_t;
    void                hb_font_get_glyph_kerning_for_direction
                                                            (hb_font_t *font,
                                                             hb_codepoint_t first_glyph,
                                                             hb_codepoint_t second_glyph,
                                                             hb_direction_t direction,
                                                             hb_position_t *x,
                                                             hb_position_t *y);
    hb_position_t       (*hb_font_get_glyph_kerning_func_t) (hb_font_t *font,
                                                             void *font_data,
                                                             hb_codepoint_t first_glyph,
                                                             hb_codepoint_t second_glyph,
                                                             void *user_data);
    hb_bool_t           hb_font_get_glyph_name              (hb_font_t *font,
                                                             hb_codepoint_t glyph,
                                                             char *name,
                                                             unsigned int size);
    hb_bool_t           (*hb_font_get_glyph_name_func_t)    (hb_font_t *font,
                                                             void *font_data,
                                                             hb_codepoint_t glyph,
                                                             char *name,
                                                             unsigned int size,
                                                             void *user_data);
    void                hb_font_get_glyph_origin_for_direction
                                                            (hb_font_t *font,
                                                             hb_codepoint_t glyph,
                                                             hb_direction_t direction,
                                                             hb_position_t *x,
                                                             hb_position_t *y);
    hb_bool_t           (*hb_font_get_glyph_origin_func_t)  (hb_font_t *font,
                                                             void *font_data,
                                                             hb_codepoint_t glyph,
                                                             hb_position_t *x,
                                                             hb_position_t *y,
                                                             void *user_data);
    hb_position_t       hb_font_get_glyph_v_advance         (hb_font_t *font,
                                                             hb_codepoint_t glyph);
    typedef             hb_font_get_glyph_v_advance_func_t;
    hb_position_t       hb_font_get_glyph_v_kerning         (hb_font_t *font,
                                                             hb_codepoint_t top_glyph,
                                                             hb_codepoint_t bottom_glyph);
    typedef             hb_font_get_glyph_v_kerning_func_t;
    hb_bool_t           hb_font_get_glyph_v_origin          (hb_font_t *font,
                                                             hb_codepoint_t glyph,
                                                             hb_position_t *x,
                                                             hb_position_t *y);
    typedef             hb_font_get_glyph_v_origin_func_t;
    hb_font_t *         hb_font_get_parent                  (hb_font_t *font);
    void                hb_font_get_ppem                    (hb_font_t *font,
                                                             unsigned int *x_ppem,
                                                             unsigned int *y_ppem);
    void                hb_font_get_scale                   (hb_font_t *font,
                                                             int *x_scale,
                                                             int *y_scale);
    void *              hb_font_get_user_data               (hb_font_t *font,
                                                             hb_user_data_key_t *key);
    hb_bool_t           hb_font_glyph_from_string           (hb_font_t *font,
                                                             const char *s,
                                                             int len,
                                                             hb_codepoint_t *glyph);
    void                hb_font_glyph_to_string             (hb_font_t *font,
                                                             hb_codepoint_t glyph,
                                                             char *s,
                                                             unsigned int size);
    hb_bool_t           hb_font_is_immutable                (hb_font_t *font);
    void                hb_font_make_immutable              (hb_font_t *font);
    hb_font_t *         hb_font_reference                   (hb_font_t *font);
    void                hb_font_set_funcs                   (hb_font_t *font,
                                                             hb_font_funcs_t *klass,
                                                             void *font_data,
                                                             hb_destroy_func_t destroy);
    void                hb_font_set_funcs_data              (hb_font_t *font,
                                                             void *font_data,
                                                             hb_destroy_func_t destroy);
    void                hb_font_set_ppem                    (hb_font_t *font,
                                                             unsigned int x_ppem,
                                                             unsigned int y_ppem);
    void                hb_font_set_scale                   (hb_font_t *font,
                                                             int x_scale,
                                                             int y_scale);
    hb_bool_t           hb_font_set_user_data               (hb_font_t *font,
                                                             hb_user_data_key_t *key,
                                                             void *data,
                                                             hb_destroy_func_t destroy,
                                                             hb_bool_t replace);
    void                hb_font_subtract_glyph_origin_for_direction
                                                            (hb_font_t *font,
                                                             hb_codepoint_t glyph,
                                                             hb_direction_t direction,
                                                             hb_position_t *x,
                                                             hb_position_t *y);
    typedef             hb_font_t;
    hb_blob_t *         (*hb_reference_table_func_t)        (hb_face_t *face,
                                                             hb_tag_t tag,
                                                             void *user_data);

## Description

## Details

### hb_font_add_glyph_origin_for_direction ()

    void                hb_font_add_glyph_origin_for_direction
                                                            (hb_font_t *font,
                                                             hb_codepoint_t glyph,
                                                             hb_direction_t direction,
                                                             hb_position_t *x,
                                                             hb_position_t *y);

`font` : | a font.
`x` : | . [out]
`y` : | . [out]

Since 1.0

### hb_font_create ()

    hb_font_t *         hb_font_create                      (hb_face_t *face);

### hb_font_create_sub_font ()

    hb_font_t *         hb_font_create_sub_font             (hb_font_t *parent);

`parent` : | parent font.
Returns : | . [transfer full]

Since 1.0

### hb_font_destroy ()

    void                hb_font_destroy                     (hb_font_t *font);

`font` : | a font.

Since 1.0

### hb_font_funcs_create ()

    hb_font_funcs_t *   hb_font_funcs_create                (void);

### hb_font_funcs_destroy ()

    void                hb_font_funcs_destroy               (hb_font_funcs_t *ffuncs);

`ffuncs` : | font functions.

Since 1.0

### hb_font_funcs_get_empty ()

    hb_font_funcs_t *   hb_font_funcs_get_empty             (void);

Returns : | . [transfer full]

Since 1.0

### hb_font_funcs_get_user_data ()

    void *              hb_font_funcs_get_user_data         (hb_font_funcs_t *ffuncs,
                                                             hb_user_data_key_t *key);

`ffuncs` : | font functions.
Returns : | . [transfer none]

Since 1.0

### hb_font_funcs_is_immutable ()

    hb_bool_t           hb_font_funcs_is_immutable          (hb_font_funcs_t *ffuncs);

`ffuncs` : | font functions.

Since 1.0

### hb_font_funcs_make_immutable ()

    void                hb_font_funcs_make_immutable        (hb_font_funcs_t *ffuncs);

`ffuncs` : | font functions.

Since 1.0

### hb_font_funcs_reference ()

    hb_font_funcs_t *   hb_font_funcs_reference             (hb_font_funcs_t *ffuncs);

`ffuncs` : | font functions.

Since 1.0

### hb_font_funcs_set_glyph_contour_point_func ()

    void                hb_font_funcs_set_glyph_contour_point_func
                                                            (hb_font_funcs_t *ffuncs,
                                                             hb_font_get_glyph_contour_point_func_t func,
                                                             void *user_data,
                                                             hb_destroy_func_t destroy);

`ffuncs` : | font functions.
`func` : | . [closure user_data][destroy destroy][scope notified]

Since 1.0

### hb_font_funcs_set_glyph_extents_func ()

    void                hb_font_funcs_set_glyph_extents_func
                                                            (hb_font_funcs_t *ffuncs,
                                                             hb_font_get_glyph_extents_func_t func,
                                                             void *user_data,
                                                             hb_destroy_func_t destroy);

`ffuncs` : | font functions.
`func` : | . [closure user_data][destroy destroy][scope notified]

Since 1.0

### hb_font_funcs_set_glyph_from_name_func ()

    void                hb_font_funcs_set_glyph_from_name_func
                                                            (hb_font_funcs_t *ffuncs,
                                                             hb_font_get_glyph_from_name_func_t func,
                                                             void *user_data,
                                                             hb_destroy_func_t destroy);

`ffuncs` : | font functions.

Since 1.0

### hb_font_funcs_set_glyph_func ()

    void                hb_font_funcs_set_glyph_func        (hb_font_funcs_t *ffuncs,
                                                             hb_font_get_glyph_func_t func,
                                                             void *user_data,
                                                             hb_destroy_func_t destroy);

`ffuncs` : | font functions.

Since 1.0

### hb_font_funcs_set_glyph_h_advance_func ()

    void                hb_font_funcs_set_glyph_h_advance_func
                                                            (hb_font_funcs_t *ffuncs,
                                                             hb_font_get_glyph_h_advance_func_t func,
                                                             void *user_data,
                                                             hb_destroy_func_t destroy);

`ffuncs` : | font functions.
`func` : | . [closure user_data][destroy destroy][scope notified]

Since 1.0

### hb_font_funcs_set_glyph_h_kerning_func ()

    void                hb_font_funcs_set_glyph_h_kerning_func
                                                            (hb_font_funcs_t *ffuncs,
                                                             hb_font_get_glyph_h_kerning_func_t func,
                                                             void *user_data,
                                                             hb_destroy_func_t destroy);

`ffuncs` : | font functions.
`func` : | . [closure user_data][destroy destroy][scope notified]

Since 1.0

### hb_font_funcs_set_glyph_h_origin_func ()

    void                hb_font_funcs_set_glyph_h_origin_func
                                                            (hb_font_funcs_t *ffuncs,
                                                             hb_font_get_glyph_h_origin_func_t func,
                                                             void *user_data,
                                                             hb_destroy_func_t destroy);

`ffuncs` : | font functions.
`func` : | . [closure user_data][destroy destroy][scope notified]

Since 1.0

### hb_font_funcs_set_glyph_name_func ()

    void                hb_font_funcs_set_glyph_name_func   (hb_font_funcs_t *ffuncs,
                                                             hb_font_get_glyph_name_func_t func,
                                                             void *user_data,
                                                             hb_destroy_func_t destroy);

`ffuncs` : | font functions.

Since 1.0

### hb_font_funcs_set_glyph_v_advance_func ()

    void                hb_font_funcs_set_glyph_v_advance_func
                                                            (hb_font_funcs_t *ffuncs,
                                                             hb_font_get_glyph_v_advance_func_t func,
                                                             void *user_data,
                                                             hb_destroy_func_t destroy);

`ffuncs` : | font functions.
`func` : | . [closure user_data][destroy destroy][scope notified]

Since 1.0

### hb_font_funcs_set_glyph_v_kerning_func ()

    void                hb_font_funcs_set_glyph_v_kerning_func
                                                            (hb_font_funcs_t *ffuncs,
                                                             hb_font_get_glyph_v_kerning_func_t func,
                                                             void *user_data,
                                                             hb_destroy_func_t destroy);

`ffuncs` : | font functions.
`func` : | . [closure user_data][destroy destroy][scope notified]

Since 1.0

### hb_font_funcs_set_glyph_v_origin_func ()

    void                hb_font_funcs_set_glyph_v_origin_func
                                                            (hb_font_funcs_t *ffuncs,
                                                             hb_font_get_glyph_v_origin_func_t func,
                                                             void *user_data,
                                                             hb_destroy_func_t destroy);

`ffuncs` : | font functions.
`func` : | . [closure user_data][destroy destroy][scope notified]

Since 1.0

### hb_font_funcs_set_user_data ()

    hb_bool_t           hb_font_funcs_set_user_data         (hb_font_funcs_t *ffuncs,
                                                             hb_user_data_key_t *key,
                                                             void *data,
                                                             hb_destroy_func_t destroy,
                                                             hb_bool_t replace);

`ffuncs` : | font functions.

Since 1.0

### hb_font_funcs_t

    typedef struct hb_font_funcs_t hb_font_funcs_t;

### hb_font_get_empty ()

    hb_font_t *         hb_font_get_empty                   (void);

Returns : | (transfer full)

Since 1.0

### hb_font_get_face ()

    hb_face_t *         hb_font_get_face                    (hb_font_t *font);

`font` : | a font.
Returns : | . [transfer none]

Since 1.0

### hb_font_get_glyph ()

    hb_bool_t           hb_font_get_glyph                   (hb_font_t *font,
                                                             hb_codepoint_t unicode,
                                                             hb_codepoint_t variation_selector,
                                                             hb_codepoint_t *glyph);

`font` : | a font.
`glyph` : | . [out]

Since 1.0

### hb_font_get_glyph_advance_for_direction ()

    void                hb_font_get_glyph_advance_for_direction
                                                            (hb_font_t *font,
                                                             hb_codepoint_t glyph,
                                                             hb_direction_t direction,
                                                             hb_position_t *x,
                                                             hb_position_t *y);

`font` : | a font.
`x` : | . [out]
`y` : | . [out]

Since 1.0

### hb_font_get_glyph_advance_func_t ()

    hb_position_t       (*hb_font_get_glyph_advance_func_t) (hb_font_t *font,
                                                             void *font_data,
                                                             hb_codepoint_t glyph,
                                                             void *user_data);

### hb_font_get_glyph_contour_point ()

    hb_bool_t           hb_font_get_glyph_contour_point     (hb_font_t *font,
                                                             hb_codepoint_t glyph,
                                                             unsigned int point_index,
                                                             hb_position_t *x,
                                                             hb_position_t *y);

`font` : | a font.
`x` : | . [out]
`y` : | . [out]

Since 1.0

### hb_font_get_glyph_contour_point_for_origin ()

    hb_bool_t           hb_font_get_glyph_contour_point_for_origin
                                                            (hb_font_t *font,
                                                             hb_codepoint_t glyph,
                                                             unsigned int point_index,
                                                             hb_direction_t direction,
                                                             hb_position_t *x,
                                                             hb_position_t *y);

`font` : | a font.
`x` : | . [out]
`y` : | . [out]

Since 1.0

### hb_font_get_glyph_contour_point_func_t ()

    hb_bool_t           (*hb_font_get_glyph_contour_point_func_t)
                                                            (hb_font_t *font,
                                                             void *font_data,
                                                             hb_codepoint_t glyph,
                                                             unsigned int point_index,
                                                             hb_position_t *x,
                                                             hb_position_t *y,
                                                             void *user_data);

### hb_font_get_glyph_extents ()

    hb_bool_t           hb_font_get_glyph_extents           (hb_font_t *font,
                                                             hb_codepoint_t glyph,
                                                             hb_glyph_extents_t *extents);

`font` : | a font.
`extents` : | . [out]

Since 1.0

### hb_font_get_glyph_extents_for_origin ()

    hb_bool_t           hb_font_get_glyph_extents_for_origin
                                                            (hb_font_t *font,
                                                             hb_codepoint_t glyph,
                                                             hb_direction_t direction,
                                                             hb_glyph_extents_t *extents);

`font` : | a font.
`extents` : | . [out]

Since 1.0

### hb_font_get_glyph_extents_func_t ()

    hb_bool_t           (*hb_font_get_glyph_extents_func_t) (hb_font_t *font,
                                                             void *font_data,
                                                             hb_codepoint_t glyph,
                                                             hb_glyph_extents_t *extents,
                                                             void *user_data);

### hb_font_get_glyph_from_name ()

    hb_bool_t           hb_font_get_glyph_from_name         (hb_font_t *font,
                                                             const char *name,
                                                             int len,
                                                             hb_codepoint_t *glyph);

`font` : | a font.
`name` : | . [array length=len]
`glyph` : | . [out]

Since 1.0

### hb_font_get_glyph_from_name_func_t ()

    hb_bool_t           (*hb_font_get_glyph_from_name_func_t)
                                                            (hb_font_t *font,
                                                             void *font_data,
                                                             const char *name,
                                                             int len);

### hb_font_get_glyph_func_t ()

    hb_bool_t           (*hb_font_get_glyph_func_t)         (hb_font_t *font,
                                                             void *font_data,
                                                             hb_codepoint_t unicode,
                                                             hb_codepoint_t variation_selector,
                                                             hb_codepoint_t *glyph,
                                                             void *user_data);

### hb_font_get_glyph_h_advance ()

    hb_position_t       hb_font_get_glyph_h_advance         (hb_font_t *font,
                                                             hb_codepoint_t glyph);

`font` : | a font.

Since 1.0

### hb_font_get_glyph_h_advance_func_t

    typedef hb_font_get_glyph_advance_func_t hb_font_get_glyph_h_advance_func_t;

### hb_font_get_glyph_h_kerning ()

    hb_position_t       hb_font_get_glyph_h_kerning         (hb_font_t *font,
                                                             hb_codepoint_t left_glyph,
                                                             hb_codepoint_t right_glyph);

`font` : | a font.

Since 1.0

### hb_font_get_glyph_h_kerning_func_t

    typedef hb_font_get_glyph_kerning_func_t hb_font_get_glyph_h_kerning_func_t;

### hb_font_get_glyph_h_origin ()

    hb_bool_t           hb_font_get_glyph_h_origin          (hb_font_t *font,
                                                             hb_codepoint_t glyph,
                                                             hb_position_t *x,
                                                             hb_position_t *y);

`font` : | a font.
`x` : | . [out]
`y` : | . [out]

Since 1.0

### hb_font_get_glyph_h_origin_func_t

    typedef hb_font_get_glyph_origin_func_t hb_font_get_glyph_h_origin_func_t;

### hb_font_get_glyph_kerning_for_direction ()

    void                hb_font_get_glyph_kerning_for_direction
                                                            (hb_font_t *font,
                                                             hb_codepoint_t first_glyph,
                                                             hb_codepoint_t second_glyph,
                                                             hb_direction_t direction,
                                                             hb_position_t *x,
                                                             hb_position_t *y);

`font` : | a font.
`x` : | . [out]
`y` : | . [out]

Since 1.0

### hb_font_get_glyph_kerning_func_t ()

    hb_position_t       (*hb_font_get_glyph_kerning_func_t) (hb_font_t *font,
                                                             void *font_data,
                                                             hb_codepoint_t first_glyph,
                                                             hb_codepoint_t second_glyph,
                                                             void *user_data);

### hb_font_get_glyph_name ()

    hb_bool_t           hb_font_get_glyph_name              (hb_font_t *font,
                                                             hb_codepoint_t glyph,
                                                             char *name,
                                                             unsigned int size);

`font` : | a font.
`name` : | . [array length=size]

Since 1.0

### hb_font_get_glyph_name_func_t ()

    hb_bool_t           (*hb_font_get_glyph_name_func_t)    (hb_font_t *font,
                                                             void *font_data,
                                                             hb_codepoint_t glyph,
                                                             char *name,
                                                             unsigned int size,
                                                             void *user_data);

### hb_font_get_glyph_origin_for_direction ()

    void                hb_font_get_glyph_origin_for_direction
                                                            (hb_font_t *font,
                                                             hb_codepoint_t glyph,
                                                             hb_direction_t direction,
                                                             hb_position_t *x,
                                                             hb_position_t *y);

`font` : | a font.
`x` : | . [out]
`y` : | . [out]

Since 1.0

### hb_font_get_glyph_origin_func_t ()

    hb_bool_t           (*hb_font_get_glyph_origin_func_t)  (hb_font_t *font,
                                                             void *font_data,
                                                             hb_codepoint_t glyph,
                                                             hb_position_t *x,
                                                             hb_position_t *y,
                                                             void *user_data);

### hb_font_get_glyph_v_advance ()

    hb_position_t       hb_font_get_glyph_v_advance         (hb_font_t *font,
                                                             hb_codepoint_t glyph);

`font` : | a font.

Since 1.0

### hb_font_get_glyph_v_advance_func_t

    typedef hb_font_get_glyph_advance_func_t hb_font_get_glyph_v_advance_func_t;

### hb_font_get_glyph_v_kerning ()

    hb_position_t       hb_font_get_glyph_v_kerning         (hb_font_t *font,
                                                             hb_codepoint_t top_glyph,
                                                             hb_codepoint_t bottom_glyph);

`font` : | a font.

Since 1.0

### hb_font_get_glyph_v_kerning_func_t

    typedef hb_font_get_glyph_kerning_func_t hb_font_get_glyph_v_kerning_func_t;

### hb_font_get_glyph_v_origin ()

    hb_bool_t           hb_font_get_glyph_v_origin          (hb_font_t *font,
                                                             hb_codepoint_t glyph,
                                                             hb_position_t *x,
                                                             hb_position_t *y);

`font` : | a font.
`x` : | . [out]
`y` : | . [out]

Since 1.0

### hb_font_get_glyph_v_origin_func_t

    typedef hb_font_get_glyph_origin_func_t hb_font_get_glyph_v_origin_func_t;

### hb_font_get_parent ()

    hb_font_t *         hb_font_get_parent                  (hb_font_t *font);

`font` : | a font.
Returns : | . [transfer none]

Since 1.0

### hb_font_get_ppem ()

    void                hb_font_get_ppem                    (hb_font_t *font,
                                                             unsigned int *x_ppem,
                                                             unsigned int *y_ppem);

`font` : | a font.
`x_ppem` : | . [out]
`y_ppem` : | . [out]

Since 1.0

### hb_font_get_scale ()

    void                hb_font_get_scale                   (hb_font_t *font,
                                                             int *x_scale,
                                                             int *y_scale);

`font` : | a font.
`x_scale` : | . [out]
`y_scale` : | . [out]

Since 1.0

### hb_font_get_user_data ()

    void *              hb_font_get_user_data               (hb_font_t *font,
                                                             hb_user_data_key_t *key);

`font` : | a font.
Returns : | . [transfer none]

Since 1.0

### hb_font_glyph_from_string ()

    hb_bool_t           hb_font_glyph_from_string           (hb_font_t *font,
                                                             const char *s,
                                                             int len,
                                                             hb_codepoint_t *glyph);

`font` : | a font.
`s` : | . [array length=len]
`glyph` : | . [out]

Since 1.0

### hb_font_glyph_to_string ()

    void                hb_font_glyph_to_string             (hb_font_t *font,
                                                             hb_codepoint_t glyph,
                                                             char *s,
                                                             unsigned int size);

`font` : | a font.
`s` : | . [array length=size]

Since 1.0

### hb_font_is_immutable ()

    hb_bool_t           hb_font_is_immutable                (hb_font_t *font);

`font` : | a font.

Since 1.0

### hb_font_make_immutable ()

    void                hb_font_make_immutable              (hb_font_t *font);

`font` : | a font.

Since 1.0

### hb_font_reference ()

    hb_font_t *         hb_font_reference                   (hb_font_t *font);

`font` : | a font.
Returns : | . [transfer full]

Since 1.0

### hb_font_set_funcs ()

    void                hb_font_set_funcs                   (hb_font_t *font,
                                                             hb_font_funcs_t *klass,
                                                             void *font_data,
                                                             hb_destroy_func_t destroy);

`font` : | a font.
`klass` : | . [closure font_data][destroy destroy][scope notified]

Since 1.0

### hb_font_set_funcs_data ()

    void                hb_font_set_funcs_data              (hb_font_t *font,
                                                             void *font_data,
                                                             hb_destroy_func_t destroy);

`font` : | a font.
`font_data` : | . [destroy destroy][scope notified]

Since 1.0

### hb_font_set_ppem ()

    void                hb_font_set_ppem                    (hb_font_t *font,
                                                             unsigned int x_ppem,
                                                             unsigned int y_ppem);

`font` : | a font.

Since 1.0

### hb_font_set_scale ()

    void                hb_font_set_scale                   (hb_font_t *font,
                                                             int x_scale,
                                                             int y_scale);

`font` : | a font.

Since 1.0

### hb_font_set_user_data ()

    hb_bool_t           hb_font_set_user_data               (hb_font_t *font,
                                                             hb_user_data_key_t *key,
                                                             void *data,
                                                             hb_destroy_func_t destroy,
                                                             hb_bool_t replace);

`font` : | a font.

Since 1.0

### hb_font_subtract_glyph_origin_for_direction ()

    void                hb_font_subtract_glyph_origin_for_direction
                                                            (hb_font_t *font,
                                                             hb_codepoint_t glyph,
                                                             hb_direction_t direction,
                                                             hb_position_t *x,
                                                             hb_position_t *y);

`font` : | a font.
`x` : | . [out]
`y` : | . [out]

Since 1.0

### hb_font_t

    typedef struct hb_font_t hb_font_t;

### hb_reference_table_func_t ()

    hb_blob_t *         (*hb_reference_table_func_t)        (hb_face_t *face,
                                                             hb_tag_t tag,
                                                             void *user_data);