<?xml version="1.0"?>
<!-- This file was automatically generated from C sources - DO NOT EDIT!
To affect the contents of this file, edit the original C definitions,
and/or use gtk-doc annotations.  -->
<repository version="1.2"
            xmlns="http://www.gtk.org/introspection/core/1.0"
            xmlns:c="http://www.gtk.org/introspection/c/1.0"
            xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
  <include name="GObject" version="2.0"/>
  <namespace name="HarfBuzz"
             version="0.0"
             shared-library="libharfbuzz.so.0,libharfbuzz-gobject.so.0"
             c:identifier-prefixes="hb_"
             c:symbol-prefixes="hb_">
    <alias name="bool_t" c:type="hb_bool_t">
      <type name="gint" c:type="int"/>
    </alias>
    <alias name="codepoint_t" c:type="hb_codepoint_t">
      <type name="guint32" c:type="uint32_t"/>
    </alias>
    <alias name="font_get_glyph_h_advance_func_t"
           c:type="hb_font_get_glyph_h_advance_func_t">
      <type name="font_get_glyph_advance_func_t"
            c:type="hb_font_get_glyph_advance_func_t"/>
    </alias>
    <alias name="font_get_glyph_h_kerning_func_t"
           c:type="hb_font_get_glyph_h_kerning_func_t">
      <type name="font_get_glyph_kerning_func_t"
            c:type="hb_font_get_glyph_kerning_func_t"/>
    </alias>
    <alias name="font_get_glyph_h_origin_func_t"
           c:type="hb_font_get_glyph_h_origin_func_t">
      <type name="font_get_glyph_origin_func_t"
            c:type="hb_font_get_glyph_origin_func_t"/>
    </alias>
    <alias name="font_get_glyph_v_advance_func_t"
           c:type="hb_font_get_glyph_v_advance_func_t">
      <type name="font_get_glyph_advance_func_t"
            c:type="hb_font_get_glyph_advance_func_t"/>
    </alias>
    <alias name="font_get_glyph_v_kerning_func_t"
           c:type="hb_font_get_glyph_v_kerning_func_t">
      <type name="font_get_glyph_kerning_func_t"
            c:type="hb_font_get_glyph_kerning_func_t"/>
    </alias>
    <alias name="font_get_glyph_v_origin_func_t"
           c:type="hb_font_get_glyph_v_origin_func_t">
      <type name="font_get_glyph_origin_func_t"
            c:type="hb_font_get_glyph_origin_func_t"/>
    </alias>
    <alias name="mask_t" c:type="hb_mask_t">
      <type name="guint32" c:type="uint32_t"/>
    </alias>
    <alias name="position_t" c:type="hb_position_t">
      <type name="gint32" c:type="int32_t"/>
    </alias>
    <alias name="tag_t" c:type="hb_tag_t">
      <type name="guint32" c:type="uint32_t"/>
    </alias>
    <constant name="BUFFER_REPLACEMENT_CODEPOINT_DEFAULT"
              value="65533"
              c:type="HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="OT_LAYOUT_DEFAULT_LANGUAGE_INDEX"
              value="65535"
              c:type="HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="OT_LAYOUT_NO_FEATURE_INDEX"
              value="65535"
              c:type="HB_OT_LAYOUT_NO_FEATURE_INDEX">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="OT_LAYOUT_NO_SCRIPT_INDEX"
              value="65535"
              c:type="HB_OT_LAYOUT_NO_SCRIPT_INDEX">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="SET_VALUE_INVALID"
              value="4294967295"
              c:type="HB_SET_VALUE_INVALID">
      <type name="codepoint_t" c:type="hb_codepoint_t"/>
    </constant>
    <constant name="UNICODE_MAX_DECOMPOSITION_LEN"
              value="19"
              c:type="HB_UNICODE_MAX_DECOMPOSITION_LEN">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="VERSION_MAJOR" value="1" c:type="HB_VERSION_MAJOR">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="VERSION_MICRO" value="2" c:type="HB_VERSION_MICRO">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="VERSION_MINOR" value="1" c:type="HB_VERSION_MINOR">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="VERSION_STRING" value="1.1.2" c:type="HB_VERSION_STRING">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <function name="blob_create"
              c:identifier="hb_blob_create"
              version="0.9.2"
              introspectable="0">
      <doc xml:space="preserve">Creates a new "blob" object wrapping @data.  The @mode parameter is used
to negotiate ownership and lifecycle of @data.</doc>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve">New blob, or the empty blob if something failed or if @length is
zero.  Destroy with hb_blob_destroy().</doc>
        <type name="blob_t" c:type="hb_blob_t*"/>
      </return-value>
      <parameters>
        <parameter name="data" transfer-ownership="none">
          <doc xml:space="preserve">Pointer to blob data.</doc>
          <type name="utf8" c:type="const char*"/>
        </parameter>
        <parameter name="length" transfer-ownership="none">
          <doc xml:space="preserve">Length of @data in bytes.</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="mode" transfer-ownership="none">
          <doc xml:space="preserve">Memory mode for @data.</doc>
          <type name="memory_mode_t" c:type="hb_memory_mode_t"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none">
          <doc xml:space="preserve">Data parameter to pass to @destroy.</doc>
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none">
          <doc xml:space="preserve">Callback to call when @data is not needed anymore.</doc>
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="blob_create_sub_blob"
              c:identifier="hb_blob_create_sub_blob"
              version="0.9.2">
      <doc xml:space="preserve">Returns a blob that represents a range of bytes in @parent.  The new
blob is always created with %HB_MEMORY_MODE_READONLY, meaning that it
will never modify data in the parent blob.  The parent data is not
expected to be modified, and will result in undefined behavior if it
is.

Makes @parent immutable.</doc>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve">New blob, or the empty blob if something failed or if
@length is zero or @offset is beyond the end of @parent's data.  Destroy
with hb_blob_destroy().</doc>
        <type name="blob_t" c:type="hb_blob_t*"/>
      </return-value>
      <parameters>
        <parameter name="parent" transfer-ownership="none">
          <doc xml:space="preserve">Parent blob.</doc>
          <type name="blob_t" c:type="hb_blob_t*"/>
        </parameter>
        <parameter name="offset" transfer-ownership="none">
          <doc xml:space="preserve">Start offset of sub-blob within @parent, in bytes.</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="length" transfer-ownership="none">
          <doc xml:space="preserve">Length of sub-blob.</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
      </parameters>
    </function>
    <function name="blob_destroy"
              c:identifier="hb_blob_destroy"
              version="0.9.2"
              introspectable="0">
      <doc xml:space="preserve">Descreases the reference count on @blob, and if it reaches zero, destroys
@blob, freeing all memory, possibly calling the destroy-callback the blob
was created for if it has not been called already.

See TODO:link object types for more information.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="blob" transfer-ownership="none">
          <doc xml:space="preserve">a blob.</doc>
          <type name="blob_t" c:type="hb_blob_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="blob_get_data"
              c:identifier="hb_blob_get_data"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <array length="1" zero-terminated="0" c:type="char*">
          <type name="utf8" c:type="char"/>
        </array>
      </return-value>
      <parameters>
        <parameter name="blob" transfer-ownership="none">
          <doc xml:space="preserve">a blob.</doc>
          <type name="blob_t" c:type="hb_blob_t*"/>
        </parameter>
        <parameter name="length"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
      </parameters>
    </function>
    <function name="blob_get_data_writable"
              c:identifier="hb_blob_get_data_writable"
              version="0.9.2">
      <doc xml:space="preserve">Tries to make blob data writable (possibly copying it) and
return pointer to data.

Fails if blob has been made immutable, or if memory allocation
fails.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">Writable blob data,
or %NULL if failed.</doc>
        <array length="1" zero-terminated="0" c:type="char*">
          <type name="utf8" c:type="char"/>
        </array>
      </return-value>
      <parameters>
        <parameter name="blob" transfer-ownership="none">
          <doc xml:space="preserve">a blob.</doc>
          <type name="blob_t" c:type="hb_blob_t*"/>
        </parameter>
        <parameter name="length"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve">output length of the writable data.</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
      </parameters>
    </function>
    <function name="blob_get_empty"
              c:identifier="hb_blob_get_empty"
              version="0.9.2">
      <doc xml:space="preserve">Returns the singleton empty blob.

See TODO:link object types for more information.</doc>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve">the empty blob.</doc>
        <type name="blob_t" c:type="hb_blob_t*"/>
      </return-value>
    </function>
    <function name="blob_get_length"
              c:identifier="hb_blob_get_length"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">the length of blob data in bytes.</doc>
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="blob" transfer-ownership="none">
          <doc xml:space="preserve">a blob.</doc>
          <type name="blob_t" c:type="hb_blob_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="blob_get_user_data"
              c:identifier="hb_blob_get_user_data"
              version="0.9.2"
              introspectable="0">
      <return-value transfer-ownership="none">
        <type name="gpointer" c:type="void*"/>
      </return-value>
      <parameters>
        <parameter name="blob" transfer-ownership="none">
          <doc xml:space="preserve">a blob.</doc>
          <type name="blob_t" c:type="hb_blob_t*"/>
        </parameter>
        <parameter name="key" transfer-ownership="none">
          <doc xml:space="preserve">key for data to get.</doc>
          <type name="user_data_key_t" c:type="hb_user_data_key_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="blob_is_immutable"
              c:identifier="hb_blob_is_immutable"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">TODO</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="blob" transfer-ownership="none">
          <doc xml:space="preserve">a blob.</doc>
          <type name="blob_t" c:type="hb_blob_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="blob_make_immutable"
              c:identifier="hb_blob_make_immutable"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="blob" transfer-ownership="none">
          <doc xml:space="preserve">a blob.</doc>
          <type name="blob_t" c:type="hb_blob_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="blob_reference"
              c:identifier="hb_blob_reference"
              version="0.9.2"
              introspectable="0">
      <doc xml:space="preserve">Increases the reference count on @blob.

See TODO:link object types for more information.</doc>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve">@blob.</doc>
        <type name="blob_t" c:type="hb_blob_t*"/>
      </return-value>
      <parameters>
        <parameter name="blob" transfer-ownership="none">
          <doc xml:space="preserve">a blob.</doc>
          <type name="blob_t" c:type="hb_blob_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="blob_set_user_data"
              c:identifier="hb_blob_set_user_data"
              version="0.9.2"
              introspectable="0">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="blob" transfer-ownership="none">
          <doc xml:space="preserve">a blob.</doc>
          <type name="blob_t" c:type="hb_blob_t*"/>
        </parameter>
        <parameter name="key" transfer-ownership="none">
          <doc xml:space="preserve">key for data to set.</doc>
          <type name="user_data_key_t" c:type="hb_user_data_key_t*"/>
        </parameter>
        <parameter name="data" transfer-ownership="none">
          <doc xml:space="preserve">data to set.</doc>
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none">
          <doc xml:space="preserve">callback to call when @data is not needed anymore.</doc>
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
        <parameter name="replace" transfer-ownership="none">
          <doc xml:space="preserve">whether to replace an existing data with the same key.</doc>
          <type name="bool_t" c:type="hb_bool_t"/>
        </parameter>
      </parameters>
    </function>
    <record name="blob_t"
            c:type="hb_blob_t"
            glib:type-name="hb_blob_t"
            glib:get-type="hb_gobject_blob_get_type"
            c:symbol-prefix="gobject_blob">
    </record>
    <function name="buffer_add" c:identifier="hb_buffer_add" version="0.9.7">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="codepoint" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="cluster" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_add_codepoints"
              c:identifier="hb_buffer_add_codepoints"
              version="0.9.31">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="text" transfer-ownership="none">
          <array length="2" zero-terminated="0" c:type="hb_codepoint_t*">
            <type name="codepoint_t" c:type="hb_codepoint_t"/>
          </array>
        </parameter>
        <parameter name="text_length" transfer-ownership="none">
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="item_offset" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="item_length" transfer-ownership="none">
          <type name="gint" c:type="int"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_add_latin1"
              c:identifier="hb_buffer_add_latin1"
              version="0.9.39">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="text" transfer-ownership="none">
          <array length="2" zero-terminated="0" c:type="uint8_t*">
            <type name="guint8"/>
          </array>
        </parameter>
        <parameter name="text_length" transfer-ownership="none">
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="item_offset" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="item_length" transfer-ownership="none">
          <type name="gint" c:type="int"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_add_utf16"
              c:identifier="hb_buffer_add_utf16"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="text" transfer-ownership="none">
          <array length="2" zero-terminated="0" c:type="uint16_t*">
            <type name="guint16" c:type="uint16_t"/>
          </array>
        </parameter>
        <parameter name="text_length" transfer-ownership="none">
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="item_offset" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="item_length" transfer-ownership="none">
          <type name="gint" c:type="int"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_add_utf32"
              c:identifier="hb_buffer_add_utf32"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="text" transfer-ownership="none">
          <array length="2" zero-terminated="0" c:type="uint32_t*">
            <type name="guint32" c:type="uint32_t"/>
          </array>
        </parameter>
        <parameter name="text_length" transfer-ownership="none">
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="item_offset" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="item_length" transfer-ownership="none">
          <type name="gint" c:type="int"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_add_utf8"
              c:identifier="hb_buffer_add_utf8"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="text" transfer-ownership="none">
          <array length="2" zero-terminated="0" c:type="char*">
            <type name="guint8"/>
          </array>
        </parameter>
        <parameter name="text_length" transfer-ownership="none">
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="item_offset" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="item_length" transfer-ownership="none">
          <type name="gint" c:type="int"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_allocation_successful"
              c:identifier="hb_buffer_allocation_successful"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_clear_contents"
              c:identifier="hb_buffer_clear_contents"
              version="0.9.11">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
      </parameters>
    </function>
    <enumeration name="buffer_cluster_level_t"
                 glib:type-name="hb_buffer_cluster_level_t"
                 glib:get-type="hb_gobject_buffer_cluster_level_get_type"
                 c:type="hb_buffer_cluster_level_t">
      <member name="monotone_graphemes"
              value="0"
              c:identifier="HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES"
              glib:nick="monotone-graphemes">
      </member>
      <member name="monotone_characters"
              value="1"
              c:identifier="HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS"
              glib:nick="monotone-characters">
      </member>
      <member name="characters"
              value="2"
              c:identifier="HB_BUFFER_CLUSTER_LEVEL_CHARACTERS"
              glib:nick="characters">
      </member>
      <member name="default"
              value="0"
              c:identifier="HB_BUFFER_CLUSTER_LEVEL_DEFAULT"
              glib:nick="default">
      </member>
    </enumeration>
    <enumeration name="buffer_content_type_t"
                 glib:type-name="hb_buffer_content_type_t"
                 glib:get-type="hb_gobject_buffer_content_type_get_type"
                 c:type="hb_buffer_content_type_t">
      <member name="invalid"
              value="0"
              c:identifier="HB_BUFFER_CONTENT_TYPE_INVALID"
              glib:nick="invalid">
      </member>
      <member name="unicode"
              value="1"
              c:identifier="HB_BUFFER_CONTENT_TYPE_UNICODE"
              glib:nick="unicode">
      </member>
      <member name="glyphs"
              value="2"
              c:identifier="HB_BUFFER_CONTENT_TYPE_GLYPHS"
              glib:nick="glyphs">
      </member>
    </enumeration>
    <function name="buffer_create"
              c:identifier="hb_buffer_create"
              version="0.9.2">
      <return-value transfer-ownership="full">
        <type name="buffer_t" c:type="hb_buffer_t*"/>
      </return-value>
    </function>
    <function name="buffer_deserialize_glyphs"
              c:identifier="hb_buffer_deserialize_glyphs"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="buf" transfer-ownership="none">
          <array length="2" zero-terminated="0" c:type="char*">
            <type name="utf8" c:type="char"/>
          </array>
        </parameter>
        <parameter name="buf_len" transfer-ownership="none">
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="end_ptr"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="utf8" c:type="const char**"/>
        </parameter>
        <parameter name="font" transfer-ownership="none">
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="format" transfer-ownership="none">
          <type name="buffer_serialize_format_t"
                c:type="hb_buffer_serialize_format_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_destroy"
              c:identifier="hb_buffer_destroy"
              version="0.9.2"
              introspectable="0">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
      </parameters>
    </function>
    <bitfield name="buffer_flags_t"
              glib:type-name="hb_buffer_flags_t"
              glib:get-type="hb_gobject_buffer_flags_get_type"
              c:type="hb_buffer_flags_t">
      <member name="default"
              value="0"
              c:identifier="HB_BUFFER_FLAG_DEFAULT"
              glib:nick="default">
      </member>
      <member name="bot"
              value="1"
              c:identifier="HB_BUFFER_FLAG_BOT"
              glib:nick="bot">
      </member>
      <member name="eot"
              value="2"
              c:identifier="HB_BUFFER_FLAG_EOT"
              glib:nick="eot">
      </member>
      <member name="preserve_default_ignorables"
              value="4"
              c:identifier="HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES"
              glib:nick="preserve-default-ignorables">
      </member>
    </bitfield>
    <function name="buffer_get_cluster_level"
              c:identifier="hb_buffer_get_cluster_level"
              version="0.9.42">
      <return-value transfer-ownership="none">
        <type name="buffer_cluster_level_t"
              c:type="hb_buffer_cluster_level_t"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_get_content_type"
              c:identifier="hb_buffer_get_content_type"
              version="0.9.5">
      <return-value transfer-ownership="none">
        <type name="buffer_content_type_t" c:type="hb_buffer_content_type_t"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_get_direction"
              c:identifier="hb_buffer_get_direction"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="direction_t" c:type="hb_direction_t"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_get_empty"
              c:identifier="hb_buffer_get_empty"
              version="0.9.2">
      <return-value transfer-ownership="full">
        <type name="buffer_t" c:type="hb_buffer_t*"/>
      </return-value>
    </function>
    <function name="buffer_get_flags"
              c:identifier="hb_buffer_get_flags"
              version="0.9.7">
      <return-value transfer-ownership="none">
        <type name="buffer_flags_t" c:type="hb_buffer_flags_t"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_get_glyph_infos"
              c:identifier="hb_buffer_get_glyph_infos"
              version="0.9.2">
      <doc xml:space="preserve">Returns buffer glyph information array.  Returned pointer
is valid as long as buffer contents are not modified.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">buffer glyph information array.</doc>
        <array length="1" zero-terminated="0" c:type="hb_glyph_info_t*">
          <type name="glyph_info_t" c:type="hb_glyph_info_t"/>
        </array>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="length"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve">output array length.</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_get_glyph_positions"
              c:identifier="hb_buffer_get_glyph_positions"
              version="0.9.2">
      <doc xml:space="preserve">Returns buffer glyph position array.  Returned pointer
is valid as long as buffer contents are not modified.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">buffer glyph position array.</doc>
        <array length="1" zero-terminated="0" c:type="hb_glyph_position_t*">
          <type name="glyph_position_t" c:type="hb_glyph_position_t"/>
        </array>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="length"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve">output length.</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_get_language"
              c:identifier="hb_buffer_get_language"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="language_t" c:type="hb_language_t"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_get_length"
              c:identifier="hb_buffer_get_length"
              version="0.9.2">
      <doc xml:space="preserve">Returns the number of items in the buffer.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">buffer length.</doc>
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_get_replacement_codepoint"
              c:identifier="hb_buffer_get_replacement_codepoint"
              version="0.9.31">
      <return-value transfer-ownership="none">
        <type name="codepoint_t" c:type="hb_codepoint_t"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_get_script"
              c:identifier="hb_buffer_get_script"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="script_t" c:type="hb_script_t"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_get_segment_properties"
              c:identifier="hb_buffer_get_segment_properties"
              version="0.9.7">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="props"
                   direction="out"
                   caller-allocates="1"
                   transfer-ownership="none">
          <type name="segment_properties_t" c:type="hb_segment_properties_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_get_unicode_funcs"
              c:identifier="hb_buffer_get_unicode_funcs"
              version="0.9.2">
      <return-value transfer-ownership="full">
        <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_get_user_data"
              c:identifier="hb_buffer_get_user_data"
              version="0.9.2"
              introspectable="0">
      <return-value>
        <type name="gpointer" c:type="void*"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="key" transfer-ownership="none">
          <type name="user_data_key_t" c:type="hb_user_data_key_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_guess_segment_properties"
              c:identifier="hb_buffer_guess_segment_properties"
              version="0.9.7">
      <doc xml:space="preserve">Sets unset buffer segment properties based on buffer Unicode
contents.  If buffer is not empty, it must have content type
%HB_BUFFER_CONTENT_TYPE_UNICODE.

If buffer script is not set (ie. is %HB_SCRIPT_INVALID), it
will be set to the Unicode script of the first character in
the buffer that has a script other than %HB_SCRIPT_COMMON,
%HB_SCRIPT_INHERITED, and %HB_SCRIPT_UNKNOWN.

Next, if buffer direction is not set (ie. is %HB_DIRECTION_INVALID),
it will be set to the natural horizontal direction of the
buffer script as returned by hb_script_get_horizontal_direction().

Finally, if buffer language is not set (ie. is %HB_LANGUAGE_INVALID),
it will be set to the process's default language as returned by
hb_language_get_default().  This may change in the future by
taking buffer script into consideration when choosing a language.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_normalize_glyphs"
              c:identifier="hb_buffer_normalize_glyphs"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_pre_allocate"
              c:identifier="hb_buffer_pre_allocate"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="size" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_reference"
              c:identifier="hb_buffer_reference"
              version="0.9.2"
              introspectable="0">
      <return-value transfer-ownership="full">
        <type name="buffer_t" c:type="hb_buffer_t*"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_reset"
              c:identifier="hb_buffer_reset"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_reverse"
              c:identifier="hb_buffer_reverse"
              version="0.9.2">
      <doc xml:space="preserve">Reverses buffer contents.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_reverse_clusters"
              c:identifier="hb_buffer_reverse_clusters"
              version="0.9.2">
      <doc xml:space="preserve">Reverses buffer clusters.  That is, the buffer contents are
reversed, then each cluster (consecutive items having the
same cluster number) are reversed again.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_reverse_range"
              c:identifier="hb_buffer_reverse_range"
              version="0.9.41">
      <doc xml:space="preserve">Reverses buffer contents between start to end.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="start" transfer-ownership="none">
          <doc xml:space="preserve">start index.</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="end" transfer-ownership="none">
          <doc xml:space="preserve">end index.</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
      </parameters>
    </function>
    <bitfield name="buffer_serialize_flags_t"
              glib:type-name="hb_buffer_serialize_flags_t"
              glib:get-type="hb_gobject_buffer_serialize_flags_get_type"
              c:type="hb_buffer_serialize_flags_t">
      <member name="default"
              value="0"
              c:identifier="HB_BUFFER_SERIALIZE_FLAG_DEFAULT"
              glib:nick="default">
      </member>
      <member name="no_clusters"
              value="1"
              c:identifier="HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS"
              glib:nick="no-clusters">
      </member>
      <member name="no_positions"
              value="2"
              c:identifier="HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS"
              glib:nick="no-positions">
      </member>
      <member name="no_glyph_names"
              value="4"
              c:identifier="HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES"
              glib:nick="no-glyph-names">
      </member>
      <member name="glyph_extents"
              value="8"
              c:identifier="HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS"
              glib:nick="glyph-extents">
      </member>
    </bitfield>
    <function name="buffer_serialize_format_from_string"
              c:identifier="hb_buffer_serialize_format_from_string"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="buffer_serialize_format_t"
              c:type="hb_buffer_serialize_format_t"/>
      </return-value>
      <parameters>
        <parameter name="str" transfer-ownership="none">
          <type name="utf8" c:type="const char*"/>
        </parameter>
        <parameter name="len" transfer-ownership="none">
          <type name="gint" c:type="int"/>
        </parameter>
      </parameters>
    </function>
    <enumeration name="buffer_serialize_format_t"
                 glib:type-name="hb_buffer_serialize_format_t"
                 glib:get-type="hb_gobject_buffer_serialize_format_get_type"
                 c:type="hb_buffer_serialize_format_t">
      <member name="text"
              value="1413830740"
              c:identifier="HB_BUFFER_SERIALIZE_FORMAT_TEXT"
              glib:nick="text">
      </member>
      <member name="json"
              value="1246973774"
              c:identifier="HB_BUFFER_SERIALIZE_FORMAT_JSON"
              glib:nick="json">
      </member>
      <member name="invalid"
              value="0"
              c:identifier="HB_BUFFER_SERIALIZE_FORMAT_INVALID"
              glib:nick="invalid">
      </member>
    </enumeration>
    <function name="buffer_serialize_format_to_string"
              c:identifier="hb_buffer_serialize_format_to_string"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="utf8" c:type="const char*"/>
      </return-value>
      <parameters>
        <parameter name="format" transfer-ownership="none">
          <type name="buffer_serialize_format_t"
                c:type="hb_buffer_serialize_format_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_serialize_glyphs"
              c:identifier="hb_buffer_serialize_glyphs"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="start" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="end" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="buf" transfer-ownership="none">
          <array length="4" zero-terminated="0" c:type="char*">
            <type name="utf8" c:type="char"/>
          </array>
        </parameter>
        <parameter name="buf_size" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="buf_consumed"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="font" transfer-ownership="none">
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="format" transfer-ownership="none">
          <type name="buffer_serialize_format_t"
                c:type="hb_buffer_serialize_format_t"/>
        </parameter>
        <parameter name="flags" transfer-ownership="none">
          <type name="buffer_serialize_flags_t"
                c:type="hb_buffer_serialize_flags_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_serialize_list_formats"
              c:identifier="hb_buffer_serialize_list_formats"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <array c:type="const char**">
          <type name="utf8"/>
        </array>
      </return-value>
    </function>
    <function name="buffer_set_cluster_level"
              c:identifier="hb_buffer_set_cluster_level"
              version="0.9.42">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="cluster_level" transfer-ownership="none">
          <type name="buffer_cluster_level_t"
                c:type="hb_buffer_cluster_level_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_set_content_type"
              c:identifier="hb_buffer_set_content_type"
              version="0.9.5">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="content_type" transfer-ownership="none">
          <type name="buffer_content_type_t"
                c:type="hb_buffer_content_type_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_set_direction"
              c:identifier="hb_buffer_set_direction"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="direction" transfer-ownership="none">
          <type name="direction_t" c:type="hb_direction_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_set_flags"
              c:identifier="hb_buffer_set_flags"
              version="0.9.7">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="flags" transfer-ownership="none">
          <type name="buffer_flags_t" c:type="hb_buffer_flags_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_set_language"
              c:identifier="hb_buffer_set_language"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="language" transfer-ownership="none">
          <type name="language_t" c:type="hb_language_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_set_length"
              c:identifier="hb_buffer_set_length"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="length" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_set_replacement_codepoint"
              c:identifier="hb_buffer_set_replacement_codepoint"
              version="0.9.31">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="replacement" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_set_script"
              c:identifier="hb_buffer_set_script"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="script" transfer-ownership="none">
          <type name="script_t" c:type="hb_script_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_set_segment_properties"
              c:identifier="hb_buffer_set_segment_properties"
              version="0.9.7">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="props" transfer-ownership="none">
          <type name="segment_properties_t"
                c:type="const hb_segment_properties_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_set_unicode_funcs"
              c:identifier="hb_buffer_set_unicode_funcs"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="unicode_funcs" transfer-ownership="none">
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_set_user_data"
              c:identifier="hb_buffer_set_user_data"
              version="0.9.2"
              introspectable="0">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="key" transfer-ownership="none">
          <type name="user_data_key_t" c:type="hb_user_data_key_t*"/>
        </parameter>
        <parameter name="data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none">
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
        <parameter name="replace" transfer-ownership="none">
          <type name="bool_t" c:type="hb_bool_t"/>
        </parameter>
      </parameters>
    </function>
    <record name="buffer_t"
            c:type="hb_buffer_t"
            glib:type-name="hb_buffer_t"
            glib:get-type="hb_gobject_buffer_get_type"
            c:symbol-prefix="gobject_buffer">
    </record>
    <callback name="destroy_func_t" c:type="hb_destroy_func_t">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="user_data" transfer-ownership="none" closure="0">
          <type name="gpointer" c:type="void*"/>
        </parameter>
      </parameters>
    </callback>
    <function name="direction_from_string"
              c:identifier="hb_direction_from_string"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="direction_t" c:type="hb_direction_t"/>
      </return-value>
      <parameters>
        <parameter name="str" transfer-ownership="none">
          <array length="1" zero-terminated="0" c:type="char*">
            <type name="guint8"/>
          </array>
        </parameter>
        <parameter name="len" transfer-ownership="none">
          <type name="gint" c:type="int"/>
        </parameter>
      </parameters>
    </function>
    <enumeration name="direction_t"
                 glib:type-name="hb_direction_t"
                 glib:get-type="hb_gobject_direction_get_type"
                 c:type="hb_direction_t">
      <member name="invalid"
              value="0"
              c:identifier="HB_DIRECTION_INVALID"
              glib:nick="invalid">
      </member>
      <member name="ltr"
              value="4"
              c:identifier="HB_DIRECTION_LTR"
              glib:nick="ltr">
      </member>
      <member name="rtl"
              value="5"
              c:identifier="HB_DIRECTION_RTL"
              glib:nick="rtl">
      </member>
      <member name="ttb"
              value="6"
              c:identifier="HB_DIRECTION_TTB"
              glib:nick="ttb">
      </member>
      <member name="btt"
              value="7"
              c:identifier="HB_DIRECTION_BTT"
              glib:nick="btt">
      </member>
    </enumeration>
    <function name="direction_to_string"
              c:identifier="hb_direction_to_string"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="utf8" c:type="const char*"/>
      </return-value>
      <parameters>
        <parameter name="direction" transfer-ownership="none">
          <type name="direction_t" c:type="hb_direction_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="face_create" c:identifier="hb_face_create" version="0.9.2">
      <return-value transfer-ownership="full">
        <type name="face_t" c:type="hb_face_t*"/>
      </return-value>
      <parameters>
        <parameter name="blob" transfer-ownership="none">
          <type name="blob_t" c:type="hb_blob_t*"/>
        </parameter>
        <parameter name="index" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
      </parameters>
    </function>
    <function name="face_create_for_tables"
              c:identifier="hb_face_create_for_tables"
              version="0.9.2">
      <return-value transfer-ownership="full">
        <type name="face_t" c:type="hb_face_t*"/>
      </return-value>
      <parameters>
        <parameter name="reference_table_func"
                   transfer-ownership="none"
                   scope="notified"
                   closure="1"
                   destroy="2">
          <type name="reference_table_func_t"
                c:type="hb_reference_table_func_t"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none" scope="notified">
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="face_destroy"
              c:identifier="hb_face_destroy"
              version="0.9.2"
              introspectable="0">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve">a face.</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="face_get_empty"
              c:identifier="hb_face_get_empty"
              version="0.9.2">
      <return-value transfer-ownership="full">
        <type name="face_t" c:type="hb_face_t*"/>
      </return-value>
    </function>
    <function name="face_get_glyph_count"
              c:identifier="hb_face_get_glyph_count"
              version="0.9.7">
      <return-value transfer-ownership="none">
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve">a face.</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="face_get_index"
              c:identifier="hb_face_get_index"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve">a face.</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="face_get_upem"
              c:identifier="hb_face_get_upem"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve">a face.</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="face_get_user_data"
              c:identifier="hb_face_get_user_data"
              version="0.9.2"
              introspectable="0">
      <return-value transfer-ownership="none">
        <type name="gpointer" c:type="void*"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve">a face.</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="key" transfer-ownership="none">
          <type name="user_data_key_t" c:type="hb_user_data_key_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="face_is_immutable"
              c:identifier="hb_face_is_immutable"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve">a face.</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="face_make_immutable"
              c:identifier="hb_face_make_immutable"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve">a face.</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="face_reference"
              c:identifier="hb_face_reference"
              version="0.9.2"
              introspectable="0">
      <return-value transfer-ownership="full">
        <type name="face_t" c:type="hb_face_t*"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve">a face.</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="face_reference_blob"
              c:identifier="hb_face_reference_blob"
              version="0.9.2">
      <return-value transfer-ownership="full">
        <type name="blob_t" c:type="hb_blob_t*"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve">a face.</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="face_reference_table"
              c:identifier="hb_face_reference_table"
              version="0.9.2">
      <return-value transfer-ownership="full">
        <type name="blob_t" c:type="hb_blob_t*"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve">a face.</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="tag" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="face_set_glyph_count"
              c:identifier="hb_face_set_glyph_count"
              version="0.9.7">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve">a face.</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="glyph_count" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
      </parameters>
    </function>
    <function name="face_set_index"
              c:identifier="hb_face_set_index"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve">a face.</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="index" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
      </parameters>
    </function>
    <function name="face_set_upem"
              c:identifier="hb_face_set_upem"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve">a face.</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="upem" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
      </parameters>
    </function>
    <function name="face_set_user_data"
              c:identifier="hb_face_set_user_data"
              version="0.9.2"
              introspectable="0">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve">a face.</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="key" transfer-ownership="none">
          <type name="user_data_key_t" c:type="hb_user_data_key_t*"/>
        </parameter>
        <parameter name="data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none">
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
        <parameter name="replace" transfer-ownership="none">
          <type name="bool_t" c:type="hb_bool_t"/>
        </parameter>
      </parameters>
    </function>
    <record name="face_t"
            c:type="hb_face_t"
            glib:type-name="hb_face_t"
            glib:get-type="hb_gobject_face_get_type"
            c:symbol-prefix="gobject_face">
    </record>
    <function name="feature_from_string"
              c:identifier="hb_feature_from_string"
              version="0.9.5">
      <doc xml:space="preserve">Parses a string into a #hb_feature_t. If @len is -1 then @str is
%NULL-terminated.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">%TRUE if @str is successfully parsed, %FALSE otherwise</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="str" transfer-ownership="none">
          <doc xml:space="preserve">a string to parse</doc>
          <array length="1" zero-terminated="0" c:type="char*">
            <type name="guint8"/>
          </array>
        </parameter>
        <parameter name="len" transfer-ownership="none">
          <doc xml:space="preserve">length of @str, or -1 if string is nul-terminated</doc>
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="feature"
                   direction="out"
                   caller-allocates="1"
                   transfer-ownership="none">
          <doc xml:space="preserve">the #hb_feature_t to initialize with the parsed values</doc>
          <type name="feature_t" c:type="hb_feature_t*"/>
        </parameter>
      </parameters>
    </function>
    <record name="feature_t"
            c:type="hb_feature_t"
            glib:type-name="hb_feature_t"
            glib:get-type="hb_gobject_feature_get_type"
            c:symbol-prefix="gobject_feature">
      <field name="tag" writable="1">
        <type name="tag_t" c:type="hb_tag_t"/>
      </field>
      <field name="value" writable="1">
        <type name="guint32" c:type="uint32_t"/>
      </field>
      <field name="start" writable="1">
        <type name="guint" c:type="unsigned"/>
      </field>
      <field name="end" writable="1">
        <type name="guint" c:type="unsigned"/>
      </field>
      <method name="_string"
              c:identifier="hb_feature_to_string"
              moved-to="feature_to_string"
              version="0.9.5">
        <doc xml:space="preserve">Converts a #hb_feature_t into a %NULL-terminated string in the format
understood by hb_feature_from_string(). The client in responsible for
allocating big enough size for @buf, 128 bytes is more than enough.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="feature" transfer-ownership="none">
            <doc xml:space="preserve">an #hb_feature_t to convert</doc>
            <type name="feature_t" c:type="hb_feature_t*"/>
          </instance-parameter>
          <parameter name="buf"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve">output string</doc>
            <array length="1" zero-terminated="0" c:type="char*">
              <type name="utf8" c:type="char"/>
            </array>
          </parameter>
          <parameter name="size"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve">the allocated size of @buf</doc>
            <type name="guint" c:type="unsigned int"/>
          </parameter>
        </parameters>
      </method>
    </record>
    <function name="feature_to_string"
              c:identifier="hb_feature_to_string"
              version="0.9.5">
      <doc xml:space="preserve">Converts a #hb_feature_t into a %NULL-terminated string in the format
understood by hb_feature_from_string(). The client in responsible for
allocating big enough size for @buf, 128 bytes is more than enough.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="feature" transfer-ownership="none">
          <doc xml:space="preserve">an #hb_feature_t to convert</doc>
          <type name="feature_t" c:type="hb_feature_t*"/>
        </parameter>
        <parameter name="buf"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve">output string</doc>
          <array length="2" zero-terminated="0" c:type="char*">
            <type name="utf8" c:type="char"/>
          </array>
        </parameter>
        <parameter name="size"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve">the allocated size of @buf</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_add_glyph_origin_for_direction"
              c:identifier="hb_font_add_glyph_origin_for_direction"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="direction" transfer-ownership="none">
          <type name="direction_t" c:type="hb_direction_t"/>
        </parameter>
        <parameter name="x"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="position_t" c:type="hb_position_t*"/>
        </parameter>
        <parameter name="y"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="position_t" c:type="hb_position_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_create" c:identifier="hb_font_create" version="0.9.2">
      <return-value transfer-ownership="full">
        <type name="font_t" c:type="hb_font_t*"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve">a face.</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_create_sub_font"
              c:identifier="hb_font_create_sub_font"
              version="0.9.2">
      <return-value transfer-ownership="full">
        <type name="font_t" c:type="hb_font_t*"/>
      </return-value>
      <parameters>
        <parameter name="parent" transfer-ownership="none">
          <doc xml:space="preserve">parent font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_destroy"
              c:identifier="hb_font_destroy"
              version="0.9.2"
              introspectable="0">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_funcs_create"
              c:identifier="hb_font_funcs_create"
              version="0.9.2">
      <return-value transfer-ownership="full">
        <type name="font_funcs_t" c:type="hb_font_funcs_t*"/>
      </return-value>
    </function>
    <function name="font_funcs_destroy"
              c:identifier="hb_font_funcs_destroy"
              version="0.9.2"
              introspectable="0">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve">font functions.</doc>
          <type name="font_funcs_t" c:type="hb_font_funcs_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_funcs_get_empty"
              c:identifier="hb_font_funcs_get_empty"
              version="0.9.2">
      <return-value transfer-ownership="full">
        <type name="font_funcs_t" c:type="hb_font_funcs_t*"/>
      </return-value>
    </function>
    <function name="font_funcs_get_user_data"
              c:identifier="hb_font_funcs_get_user_data"
              version="0.9.2"
              introspectable="0">
      <return-value transfer-ownership="none">
        <type name="gpointer" c:type="void*"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve">font functions.</doc>
          <type name="font_funcs_t" c:type="hb_font_funcs_t*"/>
        </parameter>
        <parameter name="key" transfer-ownership="none">
          <type name="user_data_key_t" c:type="hb_user_data_key_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_funcs_is_immutable"
              c:identifier="hb_font_funcs_is_immutable"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve">font functions.</doc>
          <type name="font_funcs_t" c:type="hb_font_funcs_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_funcs_make_immutable"
              c:identifier="hb_font_funcs_make_immutable"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve">font functions.</doc>
          <type name="font_funcs_t" c:type="hb_font_funcs_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_funcs_reference"
              c:identifier="hb_font_funcs_reference"
              version="0.9.2"
              introspectable="0">
      <return-value transfer-ownership="full">
        <type name="font_funcs_t" c:type="hb_font_funcs_t*"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve">font functions.</doc>
          <type name="font_funcs_t" c:type="hb_font_funcs_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_funcs_set_glyph_contour_point_func"
              c:identifier="hb_font_funcs_set_glyph_contour_point_func"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve">font functions.</doc>
          <type name="font_funcs_t" c:type="hb_font_funcs_t*"/>
        </parameter>
        <parameter name="func"
                   transfer-ownership="none"
                   scope="notified"
                   closure="2"
                   destroy="3">
          <type name="font_get_glyph_contour_point_func_t"
                c:type="hb_font_get_glyph_contour_point_func_t"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none" scope="notified">
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_funcs_set_glyph_extents_func"
              c:identifier="hb_font_funcs_set_glyph_extents_func"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve">font functions.</doc>
          <type name="font_funcs_t" c:type="hb_font_funcs_t*"/>
        </parameter>
        <parameter name="func"
                   transfer-ownership="none"
                   scope="notified"
                   closure="2"
                   destroy="3">
          <type name="font_get_glyph_extents_func_t"
                c:type="hb_font_get_glyph_extents_func_t"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none" scope="notified">
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_funcs_set_glyph_from_name_func"
              c:identifier="hb_font_funcs_set_glyph_from_name_func"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve">font functions.</doc>
          <type name="font_funcs_t" c:type="hb_font_funcs_t*"/>
        </parameter>
        <parameter name="func"
                   transfer-ownership="none"
                   scope="notified"
                   closure="2"
                   destroy="3">
          <type name="font_get_glyph_from_name_func_t"
                c:type="hb_font_get_glyph_from_name_func_t"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none" scope="notified">
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_funcs_set_glyph_func"
              c:identifier="hb_font_funcs_set_glyph_func"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve">font functions.</doc>
          <type name="font_funcs_t" c:type="hb_font_funcs_t*"/>
        </parameter>
        <parameter name="func"
                   transfer-ownership="none"
                   scope="notified"
                   closure="2"
                   destroy="3">
          <type name="font_get_glyph_func_t"
                c:type="hb_font_get_glyph_func_t"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none" scope="notified">
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_funcs_set_glyph_h_advance_func"
              c:identifier="hb_font_funcs_set_glyph_h_advance_func"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve">font functions.</doc>
          <type name="font_funcs_t" c:type="hb_font_funcs_t*"/>
        </parameter>
        <parameter name="func"
                   transfer-ownership="none"
                   scope="notified"
                   closure="2"
                   destroy="3">
          <type name="font_get_glyph_h_advance_func_t"
                c:type="hb_font_get_glyph_h_advance_func_t"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none" scope="notified">
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_funcs_set_glyph_h_kerning_func"
              c:identifier="hb_font_funcs_set_glyph_h_kerning_func"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve">font functions.</doc>
          <type name="font_funcs_t" c:type="hb_font_funcs_t*"/>
        </parameter>
        <parameter name="func"
                   transfer-ownership="none"
                   scope="notified"
                   closure="2"
                   destroy="3">
          <type name="font_get_glyph_h_kerning_func_t"
                c:type="hb_font_get_glyph_h_kerning_func_t"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none" scope="notified">
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_funcs_set_glyph_h_origin_func"
              c:identifier="hb_font_funcs_set_glyph_h_origin_func"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve">font functions.</doc>
          <type name="font_funcs_t" c:type="hb_font_funcs_t*"/>
        </parameter>
        <parameter name="func"
                   transfer-ownership="none"
                   scope="notified"
                   closure="2"
                   destroy="3">
          <type name="font_get_glyph_h_origin_func_t"
                c:type="hb_font_get_glyph_h_origin_func_t"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none" scope="notified">
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_funcs_set_glyph_name_func"
              c:identifier="hb_font_funcs_set_glyph_name_func"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve">font functions.</doc>
          <type name="font_funcs_t" c:type="hb_font_funcs_t*"/>
        </parameter>
        <parameter name="func"
                   transfer-ownership="none"
                   scope="notified"
                   closure="2"
                   destroy="3">
          <type name="font_get_glyph_name_func_t"
                c:type="hb_font_get_glyph_name_func_t"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none" scope="notified">
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_funcs_set_glyph_v_advance_func"
              c:identifier="hb_font_funcs_set_glyph_v_advance_func"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve">font functions.</doc>
          <type name="font_funcs_t" c:type="hb_font_funcs_t*"/>
        </parameter>
        <parameter name="func"
                   transfer-ownership="none"
                   scope="notified"
                   closure="2"
                   destroy="3">
          <type name="font_get_glyph_v_advance_func_t"
                c:type="hb_font_get_glyph_v_advance_func_t"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none" scope="notified">
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_funcs_set_glyph_v_kerning_func"
              c:identifier="hb_font_funcs_set_glyph_v_kerning_func"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve">font functions.</doc>
          <type name="font_funcs_t" c:type="hb_font_funcs_t*"/>
        </parameter>
        <parameter name="func"
                   transfer-ownership="none"
                   scope="notified"
                   closure="2"
                   destroy="3">
          <type name="font_get_glyph_v_kerning_func_t"
                c:type="hb_font_get_glyph_v_kerning_func_t"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none" scope="notified">
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_funcs_set_glyph_v_origin_func"
              c:identifier="hb_font_funcs_set_glyph_v_origin_func"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve">font functions.</doc>
          <type name="font_funcs_t" c:type="hb_font_funcs_t*"/>
        </parameter>
        <parameter name="func"
                   transfer-ownership="none"
                   scope="notified"
                   closure="2"
                   destroy="3">
          <type name="font_get_glyph_v_origin_func_t"
                c:type="hb_font_get_glyph_v_origin_func_t"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none" scope="notified">
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_funcs_set_user_data"
              c:identifier="hb_font_funcs_set_user_data"
              version="0.9.2"
              introspectable="0">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve">font functions.</doc>
          <type name="font_funcs_t" c:type="hb_font_funcs_t*"/>
        </parameter>
        <parameter name="key" transfer-ownership="none">
          <type name="user_data_key_t" c:type="hb_user_data_key_t*"/>
        </parameter>
        <parameter name="data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none">
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
        <parameter name="replace" transfer-ownership="none">
          <type name="bool_t" c:type="hb_bool_t"/>
        </parameter>
      </parameters>
    </function>
    <record name="font_funcs_t"
            c:type="hb_font_funcs_t"
            glib:type-name="hb_font_funcs_t"
            glib:get-type="hb_gobject_font_funcs_get_type"
            c:symbol-prefix="gobject_font_funcs">
    </record>
    <function name="font_get_empty"
              c:identifier="hb_font_get_empty"
              version="0.9.2">
      <return-value transfer-ownership="full">
        <type name="font_t" c:type="hb_font_t*"/>
      </return-value>
    </function>
    <function name="font_get_face"
              c:identifier="hb_font_get_face"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="face_t" c:type="hb_face_t*"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_get_glyph"
              c:identifier="hb_font_get_glyph"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="unicode" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="variation_selector" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="glyph"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="codepoint_t" c:type="hb_codepoint_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_get_glyph_advance_for_direction"
              c:identifier="hb_font_get_glyph_advance_for_direction"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="direction" transfer-ownership="none">
          <type name="direction_t" c:type="hb_direction_t"/>
        </parameter>
        <parameter name="x"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="position_t" c:type="hb_position_t*"/>
        </parameter>
        <parameter name="y"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="position_t" c:type="hb_position_t*"/>
        </parameter>
      </parameters>
    </function>
    <callback name="font_get_glyph_advance_func_t"
              c:type="hb_font_get_glyph_advance_func_t">
      <return-value transfer-ownership="none">
        <type name="position_t" c:type="hb_position_t"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="font_data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="3">
          <type name="gpointer" c:type="void*"/>
        </parameter>
      </parameters>
    </callback>
    <function name="font_get_glyph_contour_point"
              c:identifier="hb_font_get_glyph_contour_point"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="point_index" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="x"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="position_t" c:type="hb_position_t*"/>
        </parameter>
        <parameter name="y"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="position_t" c:type="hb_position_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_get_glyph_contour_point_for_origin"
              c:identifier="hb_font_get_glyph_contour_point_for_origin"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="point_index" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="direction" transfer-ownership="none">
          <type name="direction_t" c:type="hb_direction_t"/>
        </parameter>
        <parameter name="x"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="position_t" c:type="hb_position_t*"/>
        </parameter>
        <parameter name="y"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="position_t" c:type="hb_position_t*"/>
        </parameter>
      </parameters>
    </function>
    <callback name="font_get_glyph_contour_point_func_t"
              c:type="hb_font_get_glyph_contour_point_func_t">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="font_data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="point_index" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="x" transfer-ownership="none">
          <type name="position_t" c:type="hb_position_t*"/>
        </parameter>
        <parameter name="y" transfer-ownership="none">
          <type name="position_t" c:type="hb_position_t*"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="6">
          <type name="gpointer" c:type="void*"/>
        </parameter>
      </parameters>
    </callback>
    <function name="font_get_glyph_extents"
              c:identifier="hb_font_get_glyph_extents"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="extents"
                   direction="out"
                   caller-allocates="1"
                   transfer-ownership="none">
          <type name="glyph_extents_t" c:type="hb_glyph_extents_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_get_glyph_extents_for_origin"
              c:identifier="hb_font_get_glyph_extents_for_origin"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="direction" transfer-ownership="none">
          <type name="direction_t" c:type="hb_direction_t"/>
        </parameter>
        <parameter name="extents"
                   direction="out"
                   caller-allocates="1"
                   transfer-ownership="none">
          <type name="glyph_extents_t" c:type="hb_glyph_extents_t*"/>
        </parameter>
      </parameters>
    </function>
    <callback name="font_get_glyph_extents_func_t"
              c:type="hb_font_get_glyph_extents_func_t">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="font_data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="extents" transfer-ownership="none">
          <type name="glyph_extents_t" c:type="hb_glyph_extents_t*"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="4">
          <type name="gpointer" c:type="void*"/>
        </parameter>
      </parameters>
    </callback>
    <function name="font_get_glyph_from_name"
              c:identifier="hb_font_get_glyph_from_name"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="name" transfer-ownership="none">
          <array length="2" zero-terminated="0" c:type="char*">
            <type name="utf8" c:type="char"/>
          </array>
        </parameter>
        <parameter name="len" transfer-ownership="none">
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="glyph"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="codepoint_t" c:type="hb_codepoint_t*"/>
        </parameter>
      </parameters>
    </function>
    <callback name="font_get_glyph_from_name_func_t"
              c:type="hb_font_get_glyph_from_name_func_t">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="font_data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="name" transfer-ownership="none">
          <type name="utf8" c:type="const char*"/>
        </parameter>
        <parameter name="len" transfer-ownership="none">
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t*"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="5">
          <type name="gpointer" c:type="void*"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="font_get_glyph_func_t" c:type="hb_font_get_glyph_func_t">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="font_data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="unicode" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="variation_selector" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t*"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="5">
          <type name="gpointer" c:type="void*"/>
        </parameter>
      </parameters>
    </callback>
    <function name="font_get_glyph_h_advance"
              c:identifier="hb_font_get_glyph_h_advance"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="position_t" c:type="hb_position_t"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_get_glyph_h_kerning"
              c:identifier="hb_font_get_glyph_h_kerning"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="position_t" c:type="hb_position_t"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="left_glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="right_glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_get_glyph_h_origin"
              c:identifier="hb_font_get_glyph_h_origin"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="x"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="position_t" c:type="hb_position_t*"/>
        </parameter>
        <parameter name="y"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="position_t" c:type="hb_position_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_get_glyph_kerning_for_direction"
              c:identifier="hb_font_get_glyph_kerning_for_direction"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="first_glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="second_glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="direction" transfer-ownership="none">
          <type name="direction_t" c:type="hb_direction_t"/>
        </parameter>
        <parameter name="x"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="position_t" c:type="hb_position_t*"/>
        </parameter>
        <parameter name="y"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="position_t" c:type="hb_position_t*"/>
        </parameter>
      </parameters>
    </function>
    <callback name="font_get_glyph_kerning_func_t"
              c:type="hb_font_get_glyph_kerning_func_t">
      <return-value transfer-ownership="none">
        <type name="position_t" c:type="hb_position_t"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="font_data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="first_glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="second_glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="4">
          <type name="gpointer" c:type="void*"/>
        </parameter>
      </parameters>
    </callback>
    <function name="font_get_glyph_name"
              c:identifier="hb_font_get_glyph_name"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="name" transfer-ownership="none">
          <array length="3" zero-terminated="0" c:type="char*">
            <type name="utf8" c:type="char"/>
          </array>
        </parameter>
        <parameter name="size" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
      </parameters>
    </function>
    <callback name="font_get_glyph_name_func_t"
              c:type="hb_font_get_glyph_name_func_t">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="font_data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="name" transfer-ownership="none">
          <type name="utf8" c:type="char*"/>
        </parameter>
        <parameter name="size" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="5">
          <type name="gpointer" c:type="void*"/>
        </parameter>
      </parameters>
    </callback>
    <function name="font_get_glyph_origin_for_direction"
              c:identifier="hb_font_get_glyph_origin_for_direction"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="direction" transfer-ownership="none">
          <type name="direction_t" c:type="hb_direction_t"/>
        </parameter>
        <parameter name="x"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="position_t" c:type="hb_position_t*"/>
        </parameter>
        <parameter name="y"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="position_t" c:type="hb_position_t*"/>
        </parameter>
      </parameters>
    </function>
    <callback name="font_get_glyph_origin_func_t"
              c:type="hb_font_get_glyph_origin_func_t">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="font_data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="x" transfer-ownership="none">
          <type name="position_t" c:type="hb_position_t*"/>
        </parameter>
        <parameter name="y" transfer-ownership="none">
          <type name="position_t" c:type="hb_position_t*"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="5">
          <type name="gpointer" c:type="void*"/>
        </parameter>
      </parameters>
    </callback>
    <function name="font_get_glyph_v_advance"
              c:identifier="hb_font_get_glyph_v_advance"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="position_t" c:type="hb_position_t"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_get_glyph_v_kerning"
              c:identifier="hb_font_get_glyph_v_kerning"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="position_t" c:type="hb_position_t"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="top_glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="bottom_glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_get_glyph_v_origin"
              c:identifier="hb_font_get_glyph_v_origin"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="x"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="position_t" c:type="hb_position_t*"/>
        </parameter>
        <parameter name="y"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="position_t" c:type="hb_position_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_get_parent"
              c:identifier="hb_font_get_parent"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="font_t" c:type="hb_font_t*"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_get_ppem"
              c:identifier="hb_font_get_ppem"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="x_ppem"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="y_ppem"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_get_scale"
              c:identifier="hb_font_get_scale"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="x_scale"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="gint" c:type="int*"/>
        </parameter>
        <parameter name="y_scale"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="gint" c:type="int*"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_get_user_data"
              c:identifier="hb_font_get_user_data"
              version="0.9.2"
              introspectable="0">
      <return-value transfer-ownership="none">
        <type name="gpointer" c:type="void*"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="key" transfer-ownership="none">
          <type name="user_data_key_t" c:type="hb_user_data_key_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_glyph_from_string"
              c:identifier="hb_font_glyph_from_string"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="s" transfer-ownership="none">
          <array length="2" zero-terminated="0" c:type="char*">
            <type name="guint8"/>
          </array>
        </parameter>
        <parameter name="len" transfer-ownership="none">
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="glyph"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="codepoint_t" c:type="hb_codepoint_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_glyph_to_string"
              c:identifier="hb_font_glyph_to_string"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="s" transfer-ownership="none">
          <array length="3" zero-terminated="0" c:type="char*">
            <type name="utf8" c:type="char"/>
          </array>
        </parameter>
        <parameter name="size" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_is_immutable"
              c:identifier="hb_font_is_immutable"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_make_immutable"
              c:identifier="hb_font_make_immutable"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_reference"
              c:identifier="hb_font_reference"
              version="0.9.2"
              introspectable="0">
      <return-value transfer-ownership="full">
        <type name="font_t" c:type="hb_font_t*"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_set_funcs"
              c:identifier="hb_font_set_funcs"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="klass"
                   transfer-ownership="none"
                   scope="notified"
                   closure="2"
                   destroy="3">
          <type name="font_funcs_t" c:type="hb_font_funcs_t*"/>
        </parameter>
        <parameter name="font_data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none" scope="notified">
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_set_funcs_data"
              c:identifier="hb_font_set_funcs_data"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="font_data"
                   transfer-ownership="none"
                   scope="notified"
                   destroy="2">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none" scope="notified">
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_set_parent"
              c:identifier="hb_font_set_parent"
              version="1.0.5">
      <doc xml:space="preserve">Sets parent font of @font.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="parent" transfer-ownership="none">
          <doc xml:space="preserve">new parent.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_set_ppem"
              c:identifier="hb_font_set_ppem"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="x_ppem" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="y_ppem" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_set_scale"
              c:identifier="hb_font_set_scale"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="x_scale" transfer-ownership="none">
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="y_scale" transfer-ownership="none">
          <type name="gint" c:type="int"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_set_user_data"
              c:identifier="hb_font_set_user_data"
              version="0.9.2"
              introspectable="0">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="key" transfer-ownership="none">
          <type name="user_data_key_t" c:type="hb_user_data_key_t*"/>
        </parameter>
        <parameter name="data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none">
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
        <parameter name="replace" transfer-ownership="none">
          <type name="bool_t" c:type="hb_bool_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_subtract_glyph_origin_for_direction"
              c:identifier="hb_font_subtract_glyph_origin_for_direction"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="direction" transfer-ownership="none">
          <type name="direction_t" c:type="hb_direction_t"/>
        </parameter>
        <parameter name="x"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="position_t" c:type="hb_position_t*"/>
        </parameter>
        <parameter name="y"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="position_t" c:type="hb_position_t*"/>
        </parameter>
      </parameters>
    </function>
    <record name="font_t"
            c:type="hb_font_t"
            glib:type-name="hb_font_t"
            glib:get-type="hb_gobject_font_get_type"
            c:symbol-prefix="gobject_font">
    </record>
    <function name="ft_face_create"
              c:identifier="hb_ft_face_create"
              version="0.9.2"
              introspectable="0">
      <return-value transfer-ownership="full">
        <type name="face_t" c:type="hb_face_t*"/>
      </return-value>
      <parameters>
        <parameter name="ft_face"
                   transfer-ownership="none"
                   scope="notified"
                   destroy="1">
          <type c:type="FT_Face"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none" scope="notified">
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="ft_face_create_cached"
              c:identifier="hb_ft_face_create_cached"
              version="0.9.2"
              introspectable="0">
      <return-value transfer-ownership="full">
        <type name="face_t" c:type="hb_face_t*"/>
      </return-value>
      <parameters>
        <parameter name="ft_face" transfer-ownership="none">
          <type c:type="FT_Face"/>
        </parameter>
      </parameters>
    </function>
    <function name="ft_face_create_referenced"
              c:identifier="hb_ft_face_create_referenced"
              version="0.9.38"
              introspectable="0">
      <return-value transfer-ownership="full">
        <type name="face_t" c:type="hb_face_t*"/>
      </return-value>
      <parameters>
        <parameter name="ft_face" transfer-ownership="none">
          <type c:type="FT_Face"/>
        </parameter>
      </parameters>
    </function>
    <function name="ft_font_create"
              c:identifier="hb_ft_font_create"
              version="0.9.2"
              introspectable="0">
      <return-value transfer-ownership="full">
        <type name="font_t" c:type="hb_font_t*"/>
      </return-value>
      <parameters>
        <parameter name="ft_face"
                   transfer-ownership="none"
                   scope="notified"
                   destroy="1">
          <type c:type="FT_Face"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none" scope="notified">
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="ft_font_create_referenced"
              c:identifier="hb_ft_font_create_referenced"
              version="0.9.38"
              introspectable="0">
      <return-value transfer-ownership="full">
        <type name="font_t" c:type="hb_font_t*"/>
      </return-value>
      <parameters>
        <parameter name="ft_face" transfer-ownership="none">
          <type c:type="FT_Face"/>
        </parameter>
      </parameters>
    </function>
    <function name="ft_font_get_face"
              c:identifier="hb_ft_font_get_face"
              introspectable="0">
      <return-value>
        <type c:type="FT_Face"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ft_font_get_load_flags"
              c:identifier="hb_ft_font_get_load_flags"
              version="1.0.5">
      <return-value transfer-ownership="none">
        <type name="gint" c:type="int"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ft_font_set_funcs" c:identifier="hb_ft_font_set_funcs">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ft_font_set_load_flags"
              c:identifier="hb_ft_font_set_load_flags"
              version="1.0.5">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="load_flags" transfer-ownership="none">
          <type name="gint" c:type="int"/>
        </parameter>
      </parameters>
    </function>
    <function name="glib_blob_create"
              c:identifier="hb_glib_blob_create"
              version="0.9.38">
      <return-value transfer-ownership="full">
        <type name="blob_t" c:type="hb_blob_t*"/>
      </return-value>
      <parameters>
        <parameter name="gbytes" transfer-ownership="none">
          <type name="GLib.Bytes" c:type="GBytes*"/>
        </parameter>
      </parameters>
    </function>
    <function name="glib_get_unicode_funcs"
              c:identifier="hb_glib_get_unicode_funcs">
      <return-value transfer-ownership="full">
        <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
      </return-value>
    </function>
    <function name="glib_script_from_script"
              c:identifier="hb_glib_script_from_script">
      <return-value transfer-ownership="none">
        <type name="GLib.UnicodeScript" c:type="GUnicodeScript"/>
      </return-value>
      <parameters>
        <parameter name="script" transfer-ownership="none">
          <type name="script_t" c:type="hb_script_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="glib_script_to_script"
              c:identifier="hb_glib_script_to_script">
      <return-value transfer-ownership="none">
        <type name="script_t" c:type="hb_script_t"/>
      </return-value>
      <parameters>
        <parameter name="script" transfer-ownership="none">
          <type name="GLib.UnicodeScript" c:type="GUnicodeScript"/>
        </parameter>
      </parameters>
    </function>
    <record name="glyph_extents_t" c:type="hb_glyph_extents_t">
      <field name="x_bearing" writable="1">
        <type name="position_t" c:type="hb_position_t"/>
      </field>
      <field name="y_bearing" writable="1">
        <type name="position_t" c:type="hb_position_t"/>
      </field>
      <field name="width" writable="1">
        <type name="position_t" c:type="hb_position_t"/>
      </field>
      <field name="height" writable="1">
        <type name="position_t" c:type="hb_position_t"/>
      </field>
    </record>
    <record name="glyph_info_t"
            c:type="hb_glyph_info_t"
            glib:type-name="hb_glyph_info_t"
            glib:get-type="hb_gobject_glyph_info_get_type"
            c:symbol-prefix="gobject_glyph_info">
      <field name="codepoint" writable="1">
        <type name="codepoint_t" c:type="hb_codepoint_t"/>
      </field>
      <field name="mask" writable="1">
        <type name="mask_t" c:type="hb_mask_t"/>
      </field>
      <field name="cluster" writable="1">
        <type name="guint32" c:type="uint32_t"/>
      </field>
      <field name="var1" readable="0" private="1">
        <type name="var_int_t" c:type="hb_var_int_t"/>
      </field>
      <field name="var2" readable="0" private="1">
        <type name="var_int_t" c:type="hb_var_int_t"/>
      </field>
    </record>
    <record name="glyph_position_t"
            c:type="hb_glyph_position_t"
            glib:type-name="hb_glyph_position_t"
            glib:get-type="hb_gobject_glyph_position_get_type"
            c:symbol-prefix="gobject_glyph_position">
      <field name="x_advance" writable="1">
        <type name="position_t" c:type="hb_position_t"/>
      </field>
      <field name="y_advance" writable="1">
        <type name="position_t" c:type="hb_position_t"/>
      </field>
      <field name="x_offset" writable="1">
        <type name="position_t" c:type="hb_position_t"/>
      </field>
      <field name="y_offset" writable="1">
        <type name="position_t" c:type="hb_position_t"/>
      </field>
      <field name="var" readable="0" private="1">
        <type name="var_int_t" c:type="hb_var_int_t"/>
      </field>
    </record>
    <function name="graphite2_face_get_gr_face"
              c:identifier="hb_graphite2_face_get_gr_face"
              introspectable="0">
      <return-value>
        <type c:type="gr_face*"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="graphite2_font_get_gr_font"
              c:identifier="hb_graphite2_font_get_gr_font"
              introspectable="0">
      <return-value>
        <type c:type="gr_font*"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="language_from_string"
              c:identifier="hb_language_from_string"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="language_t" c:type="hb_language_t"/>
      </return-value>
      <parameters>
        <parameter name="str" transfer-ownership="none">
          <array length="1" zero-terminated="0" c:type="char*">
            <type name="guint8"/>
          </array>
        </parameter>
        <parameter name="len" transfer-ownership="none">
          <type name="gint" c:type="int"/>
        </parameter>
      </parameters>
    </function>
    <function name="language_get_default"
              c:identifier="hb_language_get_default"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="language_t" c:type="hb_language_t"/>
      </return-value>
    </function>
    <record name="language_t" c:type="hb_language_t" disguised="1">
      <method name="_string"
              c:identifier="hb_language_to_string"
              moved-to="language_to_string"
              version="0.9.2">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="const char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="language" transfer-ownership="none">
            <type name="language_t" c:type="hb_language_t"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <function name="language_to_string"
              c:identifier="hb_language_to_string"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="utf8" c:type="const char*"/>
      </return-value>
      <parameters>
        <parameter name="language" transfer-ownership="none">
          <type name="language_t" c:type="hb_language_t"/>
        </parameter>
      </parameters>
    </function>
    <enumeration name="memory_mode_t"
                 glib:type-name="hb_memory_mode_t"
                 glib:get-type="hb_gobject_memory_mode_get_type"
                 c:type="hb_memory_mode_t">
      <member name="duplicate"
              value="0"
              c:identifier="HB_MEMORY_MODE_DUPLICATE"
              glib:nick="duplicate">
      </member>
      <member name="readonly"
              value="1"
              c:identifier="HB_MEMORY_MODE_READONLY"
              glib:nick="readonly">
      </member>
      <member name="writable"
              value="2"
              c:identifier="HB_MEMORY_MODE_WRITABLE"
              glib:nick="writable">
      </member>
      <member name="readonly_may_make_writable"
              value="3"
              c:identifier="HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE"
              glib:nick="readonly-may-make-writable">
      </member>
    </enumeration>
    <function name="ot_font_set_funcs"
              c:identifier="hb_ot_font_set_funcs"
              version="0.9.28">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_collect_lookups"
              c:identifier="hb_ot_layout_collect_lookups">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="scripts" transfer-ownership="none">
          <type name="tag_t" c:type="const hb_tag_t*"/>
        </parameter>
        <parameter name="languages" transfer-ownership="none">
          <type name="tag_t" c:type="const hb_tag_t*"/>
        </parameter>
        <parameter name="features" transfer-ownership="none">
          <type name="tag_t" c:type="const hb_tag_t*"/>
        </parameter>
        <parameter name="lookup_indexes" transfer-ownership="none">
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_feature_get_lookups"
              c:identifier="hb_ot_layout_feature_get_lookups">
      <return-value transfer-ownership="none">
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="feature_index" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="start_offset" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="lookup_count" transfer-ownership="none">
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="lookup_indexes" transfer-ownership="none">
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_get_attach_points"
              c:identifier="hb_ot_layout_get_attach_points">
      <return-value transfer-ownership="none">
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="start_offset" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="point_count" transfer-ownership="none">
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="point_array" transfer-ownership="none">
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_get_glyph_class"
              c:identifier="hb_ot_layout_get_glyph_class"
              version="0.9.7">
      <return-value transfer-ownership="none">
        <type name="ot_layout_glyph_class_t"
              c:type="hb_ot_layout_glyph_class_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_get_glyphs_in_class"
              c:identifier="hb_ot_layout_get_glyphs_in_class"
              version="0.9.7">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="klass" transfer-ownership="none">
          <type name="ot_layout_glyph_class_t"
                c:type="hb_ot_layout_glyph_class_t"/>
        </parameter>
        <parameter name="glyphs" transfer-ownership="none">
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_get_ligature_carets"
              c:identifier="hb_ot_layout_get_ligature_carets">
      <return-value transfer-ownership="none">
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="direction" transfer-ownership="none">
          <type name="direction_t" c:type="hb_direction_t"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="start_offset" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="caret_count" transfer-ownership="none">
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="caret_array" transfer-ownership="none">
          <type name="position_t" c:type="hb_position_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_get_size_params"
              c:identifier="hb_ot_layout_get_size_params">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="design_size" transfer-ownership="none">
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="subfamily_id" transfer-ownership="none">
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="subfamily_name_id" transfer-ownership="none">
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="range_start" transfer-ownership="none">
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="range_end" transfer-ownership="none">
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
      </parameters>
    </function>
    <enumeration name="ot_layout_glyph_class_t"
                 glib:type-name="hb_ot_layout_glyph_class_t"
                 glib:get-type="hb_gobject_ot_layout_glyph_class_get_type"
                 c:type="hb_ot_layout_glyph_class_t">
      <member name="unclassified"
              value="0"
              c:identifier="HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED"
              glib:nick="unclassified">
      </member>
      <member name="base_glyph"
              value="1"
              c:identifier="HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH"
              glib:nick="base-glyph">
      </member>
      <member name="ligature"
              value="2"
              c:identifier="HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE"
              glib:nick="ligature">
      </member>
      <member name="mark"
              value="3"
              c:identifier="HB_OT_LAYOUT_GLYPH_CLASS_MARK"
              glib:nick="mark">
      </member>
      <member name="component"
              value="4"
              c:identifier="HB_OT_LAYOUT_GLYPH_CLASS_COMPONENT"
              glib:nick="component">
      </member>
    </enumeration>
    <function name="ot_layout_has_glyph_classes"
              c:identifier="hb_ot_layout_has_glyph_classes">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_has_positioning"
              c:identifier="hb_ot_layout_has_positioning">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_has_substitution"
              c:identifier="hb_ot_layout_has_substitution">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_language_find_feature"
              c:identifier="hb_ot_layout_language_find_feature">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="script_index" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="language_index" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="feature_tag" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="feature_index" transfer-ownership="none">
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_language_get_feature_indexes"
              c:identifier="hb_ot_layout_language_get_feature_indexes">
      <return-value transfer-ownership="none">
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="script_index" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="language_index" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="start_offset" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="feature_count" transfer-ownership="none">
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="feature_indexes" transfer-ownership="none">
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_language_get_feature_tags"
              c:identifier="hb_ot_layout_language_get_feature_tags">
      <return-value transfer-ownership="none">
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="script_index" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="language_index" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="start_offset" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="feature_count" transfer-ownership="none">
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="feature_tags" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_language_get_required_feature"
              c:identifier="hb_ot_layout_language_get_required_feature"
              version="0.9.30">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="script_index" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="language_index" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="feature_index" transfer-ownership="none">
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="feature_tag" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_language_get_required_feature_index"
              c:identifier="hb_ot_layout_language_get_required_feature_index">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="script_index" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="language_index" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="feature_index" transfer-ownership="none">
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_lookup_collect_glyphs"
              c:identifier="hb_ot_layout_lookup_collect_glyphs">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="lookup_index" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="glyphs_before" transfer-ownership="none">
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
        <parameter name="glyphs_input" transfer-ownership="none">
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
        <parameter name="glyphs_after" transfer-ownership="none">
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
        <parameter name="glyphs_output" transfer-ownership="none">
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_lookup_substitute_closure"
              c:identifier="hb_ot_layout_lookup_substitute_closure">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="lookup_index" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="glyphs" transfer-ownership="none">
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_lookup_would_substitute"
              c:identifier="hb_ot_layout_lookup_would_substitute">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="lookup_index" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="glyphs" transfer-ownership="none">
          <type name="codepoint_t" c:type="const hb_codepoint_t*"/>
        </parameter>
        <parameter name="glyphs_length" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="zero_context" transfer-ownership="none">
          <type name="bool_t" c:type="hb_bool_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_script_find_language"
              c:identifier="hb_ot_layout_script_find_language">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="script_index" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="language_tag" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="language_index" transfer-ownership="none">
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_script_get_language_tags"
              c:identifier="hb_ot_layout_script_get_language_tags">
      <return-value transfer-ownership="none">
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="script_index" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="start_offset" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="language_count" transfer-ownership="none">
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="language_tags" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_table_choose_script"
              c:identifier="hb_ot_layout_table_choose_script">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="script_tags" transfer-ownership="none">
          <type name="tag_t" c:type="const hb_tag_t*"/>
        </parameter>
        <parameter name="script_index" transfer-ownership="none">
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="chosen_script" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_table_find_script"
              c:identifier="hb_ot_layout_table_find_script">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="script_tag" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="script_index" transfer-ownership="none">
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_table_get_feature_tags"
              c:identifier="hb_ot_layout_table_get_feature_tags">
      <return-value transfer-ownership="none">
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="start_offset" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="feature_count" transfer-ownership="none">
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="feature_tags" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_table_get_lookup_count"
              c:identifier="hb_ot_layout_table_get_lookup_count">
      <return-value transfer-ownership="none">
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_table_get_script_tags"
              c:identifier="hb_ot_layout_table_get_script_tags">
      <return-value transfer-ownership="none">
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="start_offset" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="script_count" transfer-ownership="none">
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="script_tags" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_shape_glyphs_closure"
              c:identifier="hb_ot_shape_glyphs_closure"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="buffer" transfer-ownership="none">
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="features" transfer-ownership="none">
          <type name="feature_t" c:type="const hb_feature_t*"/>
        </parameter>
        <parameter name="num_features" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="glyphs" transfer-ownership="none">
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_shape_plan_collect_lookups"
              c:identifier="hb_ot_shape_plan_collect_lookups"
              version="0.9.7">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="shape_plan" transfer-ownership="none">
          <type name="shape_plan_t" c:type="hb_shape_plan_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="lookup_indexes" transfer-ownership="none">
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_tag_from_language"
              c:identifier="hb_ot_tag_from_language">
      <return-value transfer-ownership="none">
        <type name="tag_t" c:type="hb_tag_t"/>
      </return-value>
      <parameters>
        <parameter name="language" transfer-ownership="none">
          <type name="language_t" c:type="hb_language_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_tag_to_language"
              c:identifier="hb_ot_tag_to_language"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="language_t" c:type="hb_language_t"/>
      </return-value>
      <parameters>
        <parameter name="tag" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_tag_to_script" c:identifier="hb_ot_tag_to_script">
      <return-value transfer-ownership="none">
        <type name="script_t" c:type="hb_script_t"/>
      </return-value>
      <parameters>
        <parameter name="tag" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_tags_from_script" c:identifier="hb_ot_tags_from_script">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="script" transfer-ownership="none">
          <type name="script_t" c:type="hb_script_t"/>
        </parameter>
        <parameter name="script_tag_1" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t*"/>
        </parameter>
        <parameter name="script_tag_2" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t*"/>
        </parameter>
      </parameters>
    </function>
    <callback name="reference_table_func_t" c:type="hb_reference_table_func_t">
      <return-value transfer-ownership="full">
        <type name="blob_t" c:type="hb_blob_t*"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="tag" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="2">
          <type name="gpointer" c:type="void*"/>
        </parameter>
      </parameters>
    </callback>
    <function name="script_from_iso15924_tag"
              c:identifier="hb_script_from_iso15924_tag"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="script_t" c:type="hb_script_t"/>
      </return-value>
      <parameters>
        <parameter name="tag" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="script_from_string"
              c:identifier="hb_script_from_string"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="script_t" c:type="hb_script_t"/>
      </return-value>
      <parameters>
        <parameter name="s" transfer-ownership="none">
          <array length="1" zero-terminated="0" c:type="char*">
            <type name="guint8"/>
          </array>
        </parameter>
        <parameter name="len" transfer-ownership="none">
          <type name="gint" c:type="int"/>
        </parameter>
      </parameters>
    </function>
    <function name="script_get_horizontal_direction"
              c:identifier="hb_script_get_horizontal_direction"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="direction_t" c:type="hb_direction_t"/>
      </return-value>
      <parameters>
        <parameter name="script" transfer-ownership="none">
          <type name="script_t" c:type="hb_script_t"/>
        </parameter>
      </parameters>
    </function>
    <enumeration name="script_t"
                 glib:type-name="hb_script_t"
                 glib:get-type="hb_gobject_script_get_type"
                 c:type="hb_script_t">
      <member name="common"
              value="1517910393"
              c:identifier="HB_SCRIPT_COMMON"
              glib:nick="common">
      </member>
      <member name="inherited"
              value="1516858984"
              c:identifier="HB_SCRIPT_INHERITED"
              glib:nick="inherited">
      </member>
      <member name="unknown"
              value="1517976186"
              c:identifier="HB_SCRIPT_UNKNOWN"
              glib:nick="unknown">
      </member>
      <member name="arabic"
              value="1098015074"
              c:identifier="HB_SCRIPT_ARABIC"
              glib:nick="arabic">
      </member>
      <member name="armenian"
              value="1098018158"
              c:identifier="HB_SCRIPT_ARMENIAN"
              glib:nick="armenian">
      </member>
      <member name="bengali"
              value="1113943655"
              c:identifier="HB_SCRIPT_BENGALI"
              glib:nick="bengali">
      </member>
      <member name="cyrillic"
              value="1132032620"
              c:identifier="HB_SCRIPT_CYRILLIC"
              glib:nick="cyrillic">
      </member>
      <member name="devanagari"
              value="1147500129"
              c:identifier="HB_SCRIPT_DEVANAGARI"
              glib:nick="devanagari">
      </member>
      <member name="georgian"
              value="1197830002"
              c:identifier="HB_SCRIPT_GEORGIAN"
              glib:nick="georgian">
      </member>
      <member name="greek"
              value="1198679403"
              c:identifier="HB_SCRIPT_GREEK"
              glib:nick="greek">
      </member>
      <member name="gujarati"
              value="1198877298"
              c:identifier="HB_SCRIPT_GUJARATI"
              glib:nick="gujarati">
      </member>
      <member name="gurmukhi"
              value="1198879349"
              c:identifier="HB_SCRIPT_GURMUKHI"
              glib:nick="gurmukhi">
      </member>
      <member name="hangul"
              value="1214344807"
              c:identifier="HB_SCRIPT_HANGUL"
              glib:nick="hangul">
      </member>
      <member name="han"
              value="1214344809"
              c:identifier="HB_SCRIPT_HAN"
              glib:nick="han">
      </member>
      <member name="hebrew"
              value="1214603890"
              c:identifier="HB_SCRIPT_HEBREW"
              glib:nick="hebrew">
      </member>
      <member name="hiragana"
              value="1214870113"
              c:identifier="HB_SCRIPT_HIRAGANA"
              glib:nick="hiragana">
      </member>
      <member name="kannada"
              value="1265525857"
              c:identifier="HB_SCRIPT_KANNADA"
              glib:nick="kannada">
      </member>
      <member name="katakana"
              value="1264676449"
              c:identifier="HB_SCRIPT_KATAKANA"
              glib:nick="katakana">
      </member>
      <member name="lao"
              value="1281453935"
              c:identifier="HB_SCRIPT_LAO"
              glib:nick="lao">
      </member>
      <member name="latin"
              value="1281455214"
              c:identifier="HB_SCRIPT_LATIN"
              glib:nick="latin">
      </member>
      <member name="malayalam"
              value="1298954605"
              c:identifier="HB_SCRIPT_MALAYALAM"
              glib:nick="malayalam">
      </member>
      <member name="oriya"
              value="1332902241"
              c:identifier="HB_SCRIPT_ORIYA"
              glib:nick="oriya">
      </member>
      <member name="tamil"
              value="1415671148"
              c:identifier="HB_SCRIPT_TAMIL"
              glib:nick="tamil">
      </member>
      <member name="telugu"
              value="1415933045"
              c:identifier="HB_SCRIPT_TELUGU"
              glib:nick="telugu">
      </member>
      <member name="thai"
              value="1416126825"
              c:identifier="HB_SCRIPT_THAI"
              glib:nick="thai">
      </member>
      <member name="tibetan"
              value="1416192628"
              c:identifier="HB_SCRIPT_TIBETAN"
              glib:nick="tibetan">
      </member>
      <member name="bopomofo"
              value="1114599535"
              c:identifier="HB_SCRIPT_BOPOMOFO"
              glib:nick="bopomofo">
      </member>
      <member name="braille"
              value="1114792297"
              c:identifier="HB_SCRIPT_BRAILLE"
              glib:nick="braille">
      </member>
      <member name="canadian_syllabics"
              value="1130458739"
              c:identifier="HB_SCRIPT_CANADIAN_SYLLABICS"
              glib:nick="canadian-syllabics">
      </member>
      <member name="cherokee"
              value="1130915186"
              c:identifier="HB_SCRIPT_CHEROKEE"
              glib:nick="cherokee">
      </member>
      <member name="ethiopic"
              value="1165256809"
              c:identifier="HB_SCRIPT_ETHIOPIC"
              glib:nick="ethiopic">
      </member>
      <member name="khmer"
              value="1265134962"
              c:identifier="HB_SCRIPT_KHMER"
              glib:nick="khmer">
      </member>
      <member name="mongolian"
              value="1299148391"
              c:identifier="HB_SCRIPT_MONGOLIAN"
              glib:nick="mongolian">
      </member>
      <member name="myanmar"
              value="1299803506"
              c:identifier="HB_SCRIPT_MYANMAR"
              glib:nick="myanmar">
      </member>
      <member name="ogham"
              value="1332175213"
              c:identifier="HB_SCRIPT_OGHAM"
              glib:nick="ogham">
      </member>
      <member name="runic"
              value="1383427698"
              c:identifier="HB_SCRIPT_RUNIC"
              glib:nick="runic">
      </member>
      <member name="sinhala"
              value="1399418472"
              c:identifier="HB_SCRIPT_SINHALA"
              glib:nick="sinhala">
      </member>
      <member name="syriac"
              value="1400468067"
              c:identifier="HB_SCRIPT_SYRIAC"
              glib:nick="syriac">
      </member>
      <member name="thaana"
              value="1416126817"
              c:identifier="HB_SCRIPT_THAANA"
              glib:nick="thaana">
      </member>
      <member name="yi"
              value="1500080489"
              c:identifier="HB_SCRIPT_YI"
              glib:nick="yi">
      </member>
      <member name="deseret"
              value="1148416628"
              c:identifier="HB_SCRIPT_DESERET"
              glib:nick="deseret">
      </member>
      <member name="gothic"
              value="1198486632"
              c:identifier="HB_SCRIPT_GOTHIC"
              glib:nick="gothic">
      </member>
      <member name="old_italic"
              value="1232363884"
              c:identifier="HB_SCRIPT_OLD_ITALIC"
              glib:nick="old-italic">
      </member>
      <member name="buhid"
              value="1114990692"
              c:identifier="HB_SCRIPT_BUHID"
              glib:nick="buhid">
      </member>
      <member name="hanunoo"
              value="1214344815"
              c:identifier="HB_SCRIPT_HANUNOO"
              glib:nick="hanunoo">
      </member>
      <member name="tagalog"
              value="1416064103"
              c:identifier="HB_SCRIPT_TAGALOG"
              glib:nick="tagalog">
      </member>
      <member name="tagbanwa"
              value="1415669602"
              c:identifier="HB_SCRIPT_TAGBANWA"
              glib:nick="tagbanwa">
      </member>
      <member name="cypriot"
              value="1131442804"
              c:identifier="HB_SCRIPT_CYPRIOT"
              glib:nick="cypriot">
      </member>
      <member name="limbu"
              value="1281977698"
              c:identifier="HB_SCRIPT_LIMBU"
              glib:nick="limbu">
      </member>
      <member name="linear_b"
              value="1281977954"
              c:identifier="HB_SCRIPT_LINEAR_B"
              glib:nick="linear-b">
      </member>
      <member name="osmanya"
              value="1332964705"
              c:identifier="HB_SCRIPT_OSMANYA"
              glib:nick="osmanya">
      </member>
      <member name="shavian"
              value="1399349623"
              c:identifier="HB_SCRIPT_SHAVIAN"
              glib:nick="shavian">
      </member>
      <member name="tai_le"
              value="1415670885"
              c:identifier="HB_SCRIPT_TAI_LE"
              glib:nick="tai-le">
      </member>
      <member name="ugaritic"
              value="1432838514"
              c:identifier="HB_SCRIPT_UGARITIC"
              glib:nick="ugaritic">
      </member>
      <member name="buginese"
              value="1114990441"
              c:identifier="HB_SCRIPT_BUGINESE"
              glib:nick="buginese">
      </member>
      <member name="coptic"
              value="1131376756"
              c:identifier="HB_SCRIPT_COPTIC"
              glib:nick="coptic">
      </member>
      <member name="glagolitic"
              value="1198285159"
              c:identifier="HB_SCRIPT_GLAGOLITIC"
              glib:nick="glagolitic">
      </member>
      <member name="kharoshthi"
              value="1265131890"
              c:identifier="HB_SCRIPT_KHAROSHTHI"
              glib:nick="kharoshthi">
      </member>
      <member name="new_tai_lue"
              value="1415670901"
              c:identifier="HB_SCRIPT_NEW_TAI_LUE"
              glib:nick="new-tai-lue">
      </member>
      <member name="old_persian"
              value="1483761007"
              c:identifier="HB_SCRIPT_OLD_PERSIAN"
              glib:nick="old-persian">
      </member>
      <member name="syloti_nagri"
              value="1400466543"
              c:identifier="HB_SCRIPT_SYLOTI_NAGRI"
              glib:nick="syloti-nagri">
      </member>
      <member name="tifinagh"
              value="1415999079"
              c:identifier="HB_SCRIPT_TIFINAGH"
              glib:nick="tifinagh">
      </member>
      <member name="balinese"
              value="1113681001"
              c:identifier="HB_SCRIPT_BALINESE"
              glib:nick="balinese">
      </member>
      <member name="cuneiform"
              value="1483961720"
              c:identifier="HB_SCRIPT_CUNEIFORM"
              glib:nick="cuneiform">
      </member>
      <member name="nko"
              value="1315663727"
              c:identifier="HB_SCRIPT_NKO"
              glib:nick="nko">
      </member>
      <member name="phags_pa"
              value="1349017959"
              c:identifier="HB_SCRIPT_PHAGS_PA"
              glib:nick="phags-pa">
      </member>
      <member name="phoenician"
              value="1349021304"
              c:identifier="HB_SCRIPT_PHOENICIAN"
              glib:nick="phoenician">
      </member>
      <member name="carian"
              value="1130459753"
              c:identifier="HB_SCRIPT_CARIAN"
              glib:nick="carian">
      </member>
      <member name="cham"
              value="1130914157"
              c:identifier="HB_SCRIPT_CHAM"
              glib:nick="cham">
      </member>
      <member name="kayah_li"
              value="1264675945"
              c:identifier="HB_SCRIPT_KAYAH_LI"
              glib:nick="kayah-li">
      </member>
      <member name="lepcha"
              value="1281716323"
              c:identifier="HB_SCRIPT_LEPCHA"
              glib:nick="lepcha">
      </member>
      <member name="lycian"
              value="1283023721"
              c:identifier="HB_SCRIPT_LYCIAN"
              glib:nick="lycian">
      </member>
      <member name="lydian"
              value="1283023977"
              c:identifier="HB_SCRIPT_LYDIAN"
              glib:nick="lydian">
      </member>
      <member name="ol_chiki"
              value="1332503403"
              c:identifier="HB_SCRIPT_OL_CHIKI"
              glib:nick="ol-chiki">
      </member>
      <member name="rejang"
              value="1382706791"
              c:identifier="HB_SCRIPT_REJANG"
              glib:nick="rejang">
      </member>
      <member name="saurashtra"
              value="1398895986"
              c:identifier="HB_SCRIPT_SAURASHTRA"
              glib:nick="saurashtra">
      </member>
      <member name="sundanese"
              value="1400204900"
              c:identifier="HB_SCRIPT_SUNDANESE"
              glib:nick="sundanese">
      </member>
      <member name="vai"
              value="1449224553"
              c:identifier="HB_SCRIPT_VAI"
              glib:nick="vai">
      </member>
      <member name="avestan"
              value="1098281844"
              c:identifier="HB_SCRIPT_AVESTAN"
              glib:nick="avestan">
      </member>
      <member name="bamum"
              value="1113681269"
              c:identifier="HB_SCRIPT_BAMUM"
              glib:nick="bamum">
      </member>
      <member name="egyptian_hieroglyphs"
              value="1164409200"
              c:identifier="HB_SCRIPT_EGYPTIAN_HIEROGLYPHS"
              glib:nick="egyptian-hieroglyphs">
      </member>
      <member name="imperial_aramaic"
              value="1098018153"
              c:identifier="HB_SCRIPT_IMPERIAL_ARAMAIC"
              glib:nick="imperial-aramaic">
      </member>
      <member name="inscriptional_pahlavi"
              value="1349020777"
              c:identifier="HB_SCRIPT_INSCRIPTIONAL_PAHLAVI"
              glib:nick="inscriptional-pahlavi">
      </member>
      <member name="inscriptional_parthian"
              value="1349678185"
              c:identifier="HB_SCRIPT_INSCRIPTIONAL_PARTHIAN"
              glib:nick="inscriptional-parthian">
      </member>
      <member name="javanese"
              value="1247901281"
              c:identifier="HB_SCRIPT_JAVANESE"
              glib:nick="javanese">
      </member>
      <member name="kaithi"
              value="1265920105"
              c:identifier="HB_SCRIPT_KAITHI"
              glib:nick="kaithi">
      </member>
      <member name="lisu"
              value="1281979253"
              c:identifier="HB_SCRIPT_LISU"
              glib:nick="lisu">
      </member>
      <member name="meetei_mayek"
              value="1299473769"
              c:identifier="HB_SCRIPT_MEETEI_MAYEK"
              glib:nick="meetei-mayek">
      </member>
      <member name="old_south_arabian"
              value="1398895202"
              c:identifier="HB_SCRIPT_OLD_SOUTH_ARABIAN"
              glib:nick="old-south-arabian">
      </member>
      <member name="old_turkic"
              value="1332898664"
              c:identifier="HB_SCRIPT_OLD_TURKIC"
              glib:nick="old-turkic">
      </member>
      <member name="samaritan"
              value="1398893938"
              c:identifier="HB_SCRIPT_SAMARITAN"
              glib:nick="samaritan">
      </member>
      <member name="tai_tham"
              value="1281453665"
              c:identifier="HB_SCRIPT_TAI_THAM"
              glib:nick="tai-tham">
      </member>
      <member name="tai_viet"
              value="1415673460"
              c:identifier="HB_SCRIPT_TAI_VIET"
              glib:nick="tai-viet">
      </member>
      <member name="batak"
              value="1113683051"
              c:identifier="HB_SCRIPT_BATAK"
              glib:nick="batak">
      </member>
      <member name="brahmi"
              value="1114792296"
              c:identifier="HB_SCRIPT_BRAHMI"
              glib:nick="brahmi">
      </member>
      <member name="mandaic"
              value="1298230884"
              c:identifier="HB_SCRIPT_MANDAIC"
              glib:nick="mandaic">
      </member>
      <member name="chakma"
              value="1130457965"
              c:identifier="HB_SCRIPT_CHAKMA"
              glib:nick="chakma">
      </member>
      <member name="meroitic_cursive"
              value="1298494051"
              c:identifier="HB_SCRIPT_MEROITIC_CURSIVE"
              glib:nick="meroitic-cursive">
      </member>
      <member name="meroitic_hieroglyphs"
              value="1298494063"
              c:identifier="HB_SCRIPT_MEROITIC_HIEROGLYPHS"
              glib:nick="meroitic-hieroglyphs">
      </member>
      <member name="miao"
              value="1349284452"
              c:identifier="HB_SCRIPT_MIAO"
              glib:nick="miao">
      </member>
      <member name="sharada"
              value="1399353956"
              c:identifier="HB_SCRIPT_SHARADA"
              glib:nick="sharada">
      </member>
      <member name="sora_sompeng"
              value="1399812705"
              c:identifier="HB_SCRIPT_SORA_SOMPENG"
              glib:nick="sora-sompeng">
      </member>
      <member name="takri"
              value="1415670642"
              c:identifier="HB_SCRIPT_TAKRI"
              glib:nick="takri">
      </member>
      <member name="bassa_vah"
              value="1113682803"
              c:identifier="HB_SCRIPT_BASSA_VAH"
              glib:nick="bassa-vah">
      </member>
      <member name="caucasian_albanian"
              value="1097295970"
              c:identifier="HB_SCRIPT_CAUCASIAN_ALBANIAN"
              glib:nick="caucasian-albanian">
      </member>
      <member name="duployan"
              value="1148547180"
              c:identifier="HB_SCRIPT_DUPLOYAN"
              glib:nick="duployan">
      </member>
      <member name="elbasan"
              value="1164730977"
              c:identifier="HB_SCRIPT_ELBASAN"
              glib:nick="elbasan">
      </member>
      <member name="grantha"
              value="1198678382"
              c:identifier="HB_SCRIPT_GRANTHA"
              glib:nick="grantha">
      </member>
      <member name="khojki"
              value="1265135466"
              c:identifier="HB_SCRIPT_KHOJKI"
              glib:nick="khojki">
      </member>
      <member name="khudawadi"
              value="1399418468"
              c:identifier="HB_SCRIPT_KHUDAWADI"
              glib:nick="khudawadi">
      </member>
      <member name="linear_a"
              value="1281977953"
              c:identifier="HB_SCRIPT_LINEAR_A"
              glib:nick="linear-a">
      </member>
      <member name="mahajani"
              value="1298229354"
              c:identifier="HB_SCRIPT_MAHAJANI"
              glib:nick="mahajani">
      </member>
      <member name="manichaean"
              value="1298230889"
              c:identifier="HB_SCRIPT_MANICHAEAN"
              glib:nick="manichaean">
      </member>
      <member name="mende_kikakui"
              value="1298493028"
              c:identifier="HB_SCRIPT_MENDE_KIKAKUI"
              glib:nick="mende-kikakui">
      </member>
      <member name="modi"
              value="1299145833"
              c:identifier="HB_SCRIPT_MODI"
              glib:nick="modi">
      </member>
      <member name="mro"
              value="1299345263"
              c:identifier="HB_SCRIPT_MRO"
              glib:nick="mro">
      </member>
      <member name="nabataean"
              value="1315070324"
              c:identifier="HB_SCRIPT_NABATAEAN"
              glib:nick="nabataean">
      </member>
      <member name="old_north_arabian"
              value="1315009122"
              c:identifier="HB_SCRIPT_OLD_NORTH_ARABIAN"
              glib:nick="old-north-arabian">
      </member>
      <member name="old_permic"
              value="1348825709"
              c:identifier="HB_SCRIPT_OLD_PERMIC"
              glib:nick="old-permic">
      </member>
      <member name="pahawh_hmong"
              value="1215131239"
              c:identifier="HB_SCRIPT_PAHAWH_HMONG"
              glib:nick="pahawh-hmong">
      </member>
      <member name="palmyrene"
              value="1348562029"
              c:identifier="HB_SCRIPT_PALMYRENE"
              glib:nick="palmyrene">
      </member>
      <member name="pau_cin_hau"
              value="1348564323"
              c:identifier="HB_SCRIPT_PAU_CIN_HAU"
              glib:nick="pau-cin-hau">
      </member>
      <member name="psalter_pahlavi"
              value="1349020784"
              c:identifier="HB_SCRIPT_PSALTER_PAHLAVI"
              glib:nick="psalter-pahlavi">
      </member>
      <member name="siddham"
              value="1399415908"
              c:identifier="HB_SCRIPT_SIDDHAM"
              glib:nick="siddham">
      </member>
      <member name="tirhuta"
              value="1416196712"
              c:identifier="HB_SCRIPT_TIRHUTA"
              glib:nick="tirhuta">
      </member>
      <member name="warang_citi"
              value="1466004065"
              c:identifier="HB_SCRIPT_WARANG_CITI"
              glib:nick="warang-citi">
      </member>
      <member name="ahom"
              value="1097363309"
              c:identifier="HB_SCRIPT_AHOM"
              glib:nick="ahom">
      </member>
      <member name="anatolian_hieroglyphs"
              value="1215067511"
              c:identifier="HB_SCRIPT_ANATOLIAN_HIEROGLYPHS"
              glib:nick="anatolian-hieroglyphs">
      </member>
      <member name="hatran"
              value="1214346354"
              c:identifier="HB_SCRIPT_HATRAN"
              glib:nick="hatran">
      </member>
      <member name="multani"
              value="1299541108"
              c:identifier="HB_SCRIPT_MULTANI"
              glib:nick="multani">
      </member>
      <member name="old_hungarian"
              value="1215655527"
              c:identifier="HB_SCRIPT_OLD_HUNGARIAN"
              glib:nick="old-hungarian">
      </member>
      <member name="signwriting"
              value="1399287415"
              c:identifier="HB_SCRIPT_SIGNWRITING"
              glib:nick="signwriting">
      </member>
      <member name="invalid"
              value="0"
              c:identifier="HB_SCRIPT_INVALID"
              glib:nick="invalid">
      </member>
    </enumeration>
    <function name="script_to_iso15924_tag"
              c:identifier="hb_script_to_iso15924_tag"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="tag_t" c:type="hb_tag_t"/>
      </return-value>
      <parameters>
        <parameter name="script" transfer-ownership="none">
          <type name="script_t" c:type="hb_script_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="segment_properties_equal"
              c:identifier="hb_segment_properties_equal"
              version="0.9.7">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="a" transfer-ownership="none">
          <type name="segment_properties_t"
                c:type="const hb_segment_properties_t*"/>
        </parameter>
        <parameter name="b" transfer-ownership="none">
          <type name="segment_properties_t"
                c:type="const hb_segment_properties_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="segment_properties_hash"
              c:identifier="hb_segment_properties_hash"
              version="0.9.7">
      <return-value transfer-ownership="none">
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="p" transfer-ownership="none">
          <type name="segment_properties_t"
                c:type="const hb_segment_properties_t*"/>
        </parameter>
      </parameters>
    </function>
    <record name="segment_properties_t"
            c:type="hb_segment_properties_t"
            glib:type-name="hb_segment_properties_t"
            glib:get-type="hb_gobject_segment_properties_get_type"
            c:symbol-prefix="gobject_segment_properties">
      <field name="direction" writable="1">
        <type name="direction_t" c:type="hb_direction_t"/>
      </field>
      <field name="script" writable="1">
        <type name="script_t" c:type="hb_script_t"/>
      </field>
      <field name="language" writable="1">
        <type name="language_t" c:type="hb_language_t"/>
      </field>
      <field name="reserved1" readable="0" private="1">
        <type name="gpointer" c:type="void*"/>
      </field>
      <field name="reserved2" readable="0" private="1">
        <type name="gpointer" c:type="void*"/>
      </field>
    </record>
    <function name="set_add" c:identifier="hb_set_add" version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve">a set.</doc>
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
        <parameter name="codepoint" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="set_add_range"
              c:identifier="hb_set_add_range"
              version="0.9.7">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve">a set.</doc>
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
        <parameter name="first" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="last" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="set_allocation_successful"
              c:identifier="hb_set_allocation_successful"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve">a set.</doc>
          <type name="set_t" c:type="const hb_set_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="set_clear" c:identifier="hb_set_clear" version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve">a set.</doc>
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="set_create" c:identifier="hb_set_create" version="0.9.2">
      <return-value transfer-ownership="full">
        <type name="set_t" c:type="hb_set_t*"/>
      </return-value>
    </function>
    <function name="set_del" c:identifier="hb_set_del" version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve">a set.</doc>
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
        <parameter name="codepoint" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="set_del_range"
              c:identifier="hb_set_del_range"
              version="0.9.7">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve">a set.</doc>
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
        <parameter name="first" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="last" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="set_destroy"
              c:identifier="hb_set_destroy"
              version="0.9.2"
              introspectable="0">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve">a set.</doc>
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="set_get_empty"
              c:identifier="hb_set_get_empty"
              version="0.9.2">
      <return-value transfer-ownership="full">
        <type name="set_t" c:type="hb_set_t*"/>
      </return-value>
    </function>
    <function name="set_get_max" c:identifier="hb_set_get_max" version="0.9.7">
      <doc xml:space="preserve">Finds the maximum number in the set.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">minimum of the set, or %HB_SET_VALUE_INVALID if set is empty.</doc>
        <type name="codepoint_t" c:type="hb_codepoint_t"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve">a set.</doc>
          <type name="set_t" c:type="const hb_set_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="set_get_min" c:identifier="hb_set_get_min" version="0.9.7">
      <doc xml:space="preserve">Finds the minimum number in the set.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">minimum of the set, or %HB_SET_VALUE_INVALID if set is empty.</doc>
        <type name="codepoint_t" c:type="hb_codepoint_t"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve">a set.</doc>
          <type name="set_t" c:type="const hb_set_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="set_get_population"
              c:identifier="hb_set_get_population"
              version="0.9.7">
      <doc xml:space="preserve">Returns the number of numbers in the set.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">set population.</doc>
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve">a set.</doc>
          <type name="set_t" c:type="const hb_set_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="set_get_user_data"
              c:identifier="hb_set_get_user_data"
              version="0.9.2"
              introspectable="0">
      <return-value transfer-ownership="none">
        <type name="gpointer" c:type="void*"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve">a set.</doc>
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
        <parameter name="key" transfer-ownership="none">
          <type name="user_data_key_t" c:type="hb_user_data_key_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="set_has" c:identifier="hb_set_has" version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve">a set.</doc>
          <type name="set_t" c:type="const hb_set_t*"/>
        </parameter>
        <parameter name="codepoint" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="set_intersect"
              c:identifier="hb_set_intersect"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve">a set.</doc>
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
        <parameter name="other" transfer-ownership="none">
          <type name="set_t" c:type="const hb_set_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="set_invert" c:identifier="hb_set_invert" version="0.9.10">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve">a set.</doc>
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="set_is_empty"
              c:identifier="hb_set_is_empty"
              version="0.9.7">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve">a set.</doc>
          <type name="set_t" c:type="const hb_set_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="set_is_equal"
              c:identifier="hb_set_is_equal"
              version="0.9.7">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve">a set.</doc>
          <type name="set_t" c:type="const hb_set_t*"/>
        </parameter>
        <parameter name="other" transfer-ownership="none">
          <type name="set_t" c:type="const hb_set_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="set_next" c:identifier="hb_set_next" version="0.9.2">
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">whether there was a next value.</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve">a set.</doc>
          <type name="set_t" c:type="const hb_set_t*"/>
        </parameter>
        <parameter name="codepoint"
                   direction="inout"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="codepoint_t" c:type="hb_codepoint_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="set_next_range"
              c:identifier="hb_set_next_range"
              version="0.9.7">
      <doc xml:space="preserve">Gets the next consecutive range of numbers in @set that
are greater than current value of @last.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">whether there was a next range.</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve">a set.</doc>
          <type name="set_t" c:type="const hb_set_t*"/>
        </parameter>
        <parameter name="first"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve">output first codepoint in the range.</doc>
          <type name="codepoint_t" c:type="hb_codepoint_t*"/>
        </parameter>
        <parameter name="last"
                   direction="inout"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve">input current last and output last codepoint in the range.</doc>
          <type name="codepoint_t" c:type="hb_codepoint_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="set_reference"
              c:identifier="hb_set_reference"
              version="0.9.2"
              introspectable="0">
      <return-value transfer-ownership="full">
        <type name="set_t" c:type="hb_set_t*"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve">a set.</doc>
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="set_set" c:identifier="hb_set_set" version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve">a set.</doc>
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
        <parameter name="other" transfer-ownership="none">
          <type name="set_t" c:type="const hb_set_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="set_set_user_data"
              c:identifier="hb_set_set_user_data"
              version="0.9.2"
              introspectable="0">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve">a set.</doc>
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
        <parameter name="key" transfer-ownership="none">
          <type name="user_data_key_t" c:type="hb_user_data_key_t*"/>
        </parameter>
        <parameter name="data" transfer-ownership="none">
          <doc xml:space="preserve">@destroy (closure data):</doc>
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none">
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
        <parameter name="replace" transfer-ownership="none">
          <type name="bool_t" c:type="hb_bool_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="set_subtract"
              c:identifier="hb_set_subtract"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve">a set.</doc>
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
        <parameter name="other" transfer-ownership="none">
          <type name="set_t" c:type="const hb_set_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="set_symmetric_difference"
              c:identifier="hb_set_symmetric_difference"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve">a set.</doc>
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
        <parameter name="other" transfer-ownership="none">
          <type name="set_t" c:type="const hb_set_t*"/>
        </parameter>
      </parameters>
    </function>
    <record name="set_t"
            c:type="hb_set_t"
            glib:type-name="hb_set_t"
            glib:get-type="hb_gobject_set_get_type"
            c:symbol-prefix="gobject_set">
    </record>
    <function name="set_union" c:identifier="hb_set_union" version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve">a set.</doc>
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
        <parameter name="other" transfer-ownership="none">
          <type name="set_t" c:type="const hb_set_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="shape" c:identifier="hb_shape" version="0.9.2">
      <doc xml:space="preserve">Shapes @buffer using @font turning its Unicode characters content to
positioned glyphs. If @features is not %NULL, it will be used to control the
features applied during shaping.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">%FALSE if all shapers failed, %TRUE otherwise</doc>
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">an #hb_font_t to use for shaping</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">an #hb_buffer_t to shape</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="features"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve">an array of user
   specified #hb_feature_t or %NULL</doc>
          <array length="3" zero-terminated="0" c:type="hb_feature_t*">
            <type name="feature_t" c:type="hb_feature_t"/>
          </array>
        </parameter>
        <parameter name="num_features" transfer-ownership="none">
          <doc xml:space="preserve">the length of @features array</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
      </parameters>
    </function>
    <function name="shape_full" c:identifier="hb_shape_full" version="0.9.2">
      <doc xml:space="preserve">See hb_shape() for details. If @shaper_list is not %NULL, the specified
shapers will be used in the given order, otherwise the default shapers list
will be used.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">%FALSE if all shapers failed, %TRUE otherwise</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">an #hb_font_t to use for shaping</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">an #hb_buffer_t to shape</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="features"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve">an array of user
   specified #hb_feature_t or %NULL</doc>
          <array length="3" zero-terminated="0" c:type="hb_feature_t*">
            <type name="feature_t" c:type="hb_feature_t"/>
          </array>
        </parameter>
        <parameter name="num_features" transfer-ownership="none">
          <doc xml:space="preserve">the length of @features array</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="shaper_list"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve">a %NULL-terminated
   array of shapers to use or %NULL</doc>
          <array c:type="char**">
            <type name="utf8" c:type="char*"/>
          </array>
        </parameter>
      </parameters>
    </function>
    <function name="shape_list_shapers"
              c:identifier="hb_shape_list_shapers"
              version="0.9.2">
      <doc xml:space="preserve">Retrieves the list of shapers supported by HarfBuzz.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">an array of
   constant strings</doc>
        <array c:type="char**">
          <type name="utf8"/>
        </array>
      </return-value>
    </function>
    <function name="shape_plan_create"
              c:identifier="hb_shape_plan_create"
              version="0.9.7">
      <return-value transfer-ownership="full">
        <type name="shape_plan_t" c:type="hb_shape_plan_t*"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="props" transfer-ownership="none">
          <type name="segment_properties_t"
                c:type="const hb_segment_properties_t*"/>
        </parameter>
        <parameter name="user_features" transfer-ownership="none">
          <array length="3" zero-terminated="0" c:type="hb_feature_t*">
            <type name="feature_t" c:type="hb_feature_t"/>
          </array>
        </parameter>
        <parameter name="num_user_features" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="shaper_list" transfer-ownership="none">
          <array c:type="char**">
            <type name="utf8" c:type="char*"/>
          </array>
        </parameter>
      </parameters>
    </function>
    <function name="shape_plan_create_cached"
              c:identifier="hb_shape_plan_create_cached"
              version="0.9.7">
      <return-value transfer-ownership="full">
        <type name="shape_plan_t" c:type="hb_shape_plan_t*"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="props" transfer-ownership="none">
          <type name="segment_properties_t"
                c:type="const hb_segment_properties_t*"/>
        </parameter>
        <parameter name="user_features" transfer-ownership="none">
          <array length="3" zero-terminated="0" c:type="hb_feature_t*">
            <type name="feature_t" c:type="hb_feature_t"/>
          </array>
        </parameter>
        <parameter name="num_user_features" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="shaper_list" transfer-ownership="none">
          <array c:type="char**">
            <type name="utf8" c:type="char*"/>
          </array>
        </parameter>
      </parameters>
    </function>
    <function name="shape_plan_destroy"
              c:identifier="hb_shape_plan_destroy"
              version="0.9.7"
              introspectable="0">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="shape_plan" transfer-ownership="none">
          <doc xml:space="preserve">a shape plan.</doc>
          <type name="shape_plan_t" c:type="hb_shape_plan_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="shape_plan_execute"
              c:identifier="hb_shape_plan_execute"
              version="0.9.7">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="shape_plan" transfer-ownership="none">
          <doc xml:space="preserve">a shape plan.</doc>
          <type name="shape_plan_t" c:type="hb_shape_plan_t*"/>
        </parameter>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="features" transfer-ownership="none">
          <array length="4" zero-terminated="0" c:type="hb_feature_t*">
            <type name="feature_t" c:type="hb_feature_t"/>
          </array>
        </parameter>
        <parameter name="num_features" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
      </parameters>
    </function>
    <function name="shape_plan_get_empty"
              c:identifier="hb_shape_plan_get_empty"
              version="0.9.7">
      <return-value transfer-ownership="full">
        <type name="shape_plan_t" c:type="hb_shape_plan_t*"/>
      </return-value>
    </function>
    <function name="shape_plan_get_shaper"
              c:identifier="hb_shape_plan_get_shaper"
              version="0.9.7">
      <return-value transfer-ownership="none">
        <type name="utf8" c:type="const char*"/>
      </return-value>
      <parameters>
        <parameter name="shape_plan" transfer-ownership="none">
          <doc xml:space="preserve">a shape plan.</doc>
          <type name="shape_plan_t" c:type="hb_shape_plan_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="shape_plan_get_user_data"
              c:identifier="hb_shape_plan_get_user_data"
              version="0.9.7"
              introspectable="0">
      <return-value transfer-ownership="none">
        <type name="gpointer" c:type="void*"/>
      </return-value>
      <parameters>
        <parameter name="shape_plan" transfer-ownership="none">
          <doc xml:space="preserve">a shape plan.</doc>
          <type name="shape_plan_t" c:type="hb_shape_plan_t*"/>
        </parameter>
        <parameter name="key" transfer-ownership="none">
          <type name="user_data_key_t" c:type="hb_user_data_key_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="shape_plan_reference"
              c:identifier="hb_shape_plan_reference"
              version="0.9.7"
              introspectable="0">
      <return-value transfer-ownership="full">
        <type name="shape_plan_t" c:type="hb_shape_plan_t*"/>
      </return-value>
      <parameters>
        <parameter name="shape_plan" transfer-ownership="none">
          <doc xml:space="preserve">a shape plan.</doc>
          <type name="shape_plan_t" c:type="hb_shape_plan_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="shape_plan_set_user_data"
              c:identifier="hb_shape_plan_set_user_data"
              version="0.9.7"
              introspectable="0">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="shape_plan" transfer-ownership="none">
          <doc xml:space="preserve">a shape plan.</doc>
          <type name="shape_plan_t" c:type="hb_shape_plan_t*"/>
        </parameter>
        <parameter name="key" transfer-ownership="none">
          <type name="user_data_key_t" c:type="hb_user_data_key_t*"/>
        </parameter>
        <parameter name="data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none">
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
        <parameter name="replace" transfer-ownership="none">
          <type name="bool_t" c:type="hb_bool_t"/>
        </parameter>
      </parameters>
    </function>
    <record name="shape_plan_t"
            c:type="hb_shape_plan_t"
            glib:type-name="hb_shape_plan_t"
            glib:get-type="hb_gobject_shape_plan_get_type"
            c:symbol-prefix="gobject_shape_plan">
    </record>
    <function name="tag_from_string"
              c:identifier="hb_tag_from_string"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="tag_t" c:type="hb_tag_t"/>
      </return-value>
      <parameters>
        <parameter name="str" transfer-ownership="none">
          <array length="1" zero-terminated="0" c:type="char*">
            <type name="guint8"/>
          </array>
        </parameter>
        <parameter name="len" transfer-ownership="none">
          <type name="gint" c:type="int"/>
        </parameter>
      </parameters>
    </function>
    <function name="tag_to_string"
              c:identifier="hb_tag_to_string"
              version="0.9.5">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="tag" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="buf" transfer-ownership="none">
          <array zero-terminated="0" c:type="char*" fixed-size="4">
            <type name="utf8" c:type="char"/>
          </array>
        </parameter>
      </parameters>
    </function>
    <function name="unicode_combining_class"
              c:identifier="hb_unicode_combining_class">
      <return-value transfer-ownership="none">
        <type name="unicode_combining_class_t"
              c:type="hb_unicode_combining_class_t"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
        <parameter name="unicode" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
      </parameters>
    </function>
    <callback name="unicode_combining_class_func_t"
              c:type="hb_unicode_combining_class_func_t">
      <return-value transfer-ownership="none">
        <type name="unicode_combining_class_t"
              c:type="hb_unicode_combining_class_t"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
        <parameter name="unicode" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="2">
          <type name="gpointer" c:type="void*"/>
        </parameter>
      </parameters>
    </callback>
    <enumeration name="unicode_combining_class_t"
                 glib:type-name="hb_unicode_combining_class_t"
                 glib:get-type="hb_gobject_unicode_combining_class_get_type"
                 c:type="hb_unicode_combining_class_t">
      <member name="not_reordered"
              value="0"
              c:identifier="HB_UNICODE_COMBINING_CLASS_NOT_REORDERED"
              glib:nick="not-reordered">
      </member>
      <member name="overlay"
              value="1"
              c:identifier="HB_UNICODE_COMBINING_CLASS_OVERLAY"
              glib:nick="overlay">
      </member>
      <member name="nukta"
              value="7"
              c:identifier="HB_UNICODE_COMBINING_CLASS_NUKTA"
              glib:nick="nukta">
      </member>
      <member name="kana_voicing"
              value="8"
              c:identifier="HB_UNICODE_COMBINING_CLASS_KANA_VOICING"
              glib:nick="kana-voicing">
      </member>
      <member name="virama"
              value="9"
              c:identifier="HB_UNICODE_COMBINING_CLASS_VIRAMA"
              glib:nick="virama">
      </member>
      <member name="ccc10"
              value="10"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC10"
              glib:nick="ccc10">
      </member>
      <member name="ccc11"
              value="11"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC11"
              glib:nick="ccc11">
      </member>
      <member name="ccc12"
              value="12"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC12"
              glib:nick="ccc12">
      </member>
      <member name="ccc13"
              value="13"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC13"
              glib:nick="ccc13">
      </member>
      <member name="ccc14"
              value="14"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC14"
              glib:nick="ccc14">
      </member>
      <member name="ccc15"
              value="15"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC15"
              glib:nick="ccc15">
      </member>
      <member name="ccc16"
              value="16"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC16"
              glib:nick="ccc16">
      </member>
      <member name="ccc17"
              value="17"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC17"
              glib:nick="ccc17">
      </member>
      <member name="ccc18"
              value="18"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC18"
              glib:nick="ccc18">
      </member>
      <member name="ccc19"
              value="19"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC19"
              glib:nick="ccc19">
      </member>
      <member name="ccc20"
              value="20"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC20"
              glib:nick="ccc20">
      </member>
      <member name="ccc21"
              value="21"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC21"
              glib:nick="ccc21">
      </member>
      <member name="ccc22"
              value="22"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC22"
              glib:nick="ccc22">
      </member>
      <member name="ccc23"
              value="23"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC23"
              glib:nick="ccc23">
      </member>
      <member name="ccc24"
              value="24"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC24"
              glib:nick="ccc24">
      </member>
      <member name="ccc25"
              value="25"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC25"
              glib:nick="ccc25">
      </member>
      <member name="ccc26"
              value="26"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC26"
              glib:nick="ccc26">
      </member>
      <member name="ccc27"
              value="27"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC27"
              glib:nick="ccc27">
      </member>
      <member name="ccc28"
              value="28"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC28"
              glib:nick="ccc28">
      </member>
      <member name="ccc29"
              value="29"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC29"
              glib:nick="ccc29">
      </member>
      <member name="ccc30"
              value="30"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC30"
              glib:nick="ccc30">
      </member>
      <member name="ccc31"
              value="31"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC31"
              glib:nick="ccc31">
      </member>
      <member name="ccc32"
              value="32"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC32"
              glib:nick="ccc32">
      </member>
      <member name="ccc33"
              value="33"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC33"
              glib:nick="ccc33">
      </member>
      <member name="ccc34"
              value="34"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC34"
              glib:nick="ccc34">
      </member>
      <member name="ccc35"
              value="35"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC35"
              glib:nick="ccc35">
      </member>
      <member name="ccc36"
              value="36"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC36"
              glib:nick="ccc36">
      </member>
      <member name="ccc84"
              value="84"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC84"
              glib:nick="ccc84">
      </member>
      <member name="ccc91"
              value="91"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC91"
              glib:nick="ccc91">
      </member>
      <member name="ccc103"
              value="103"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC103"
              glib:nick="ccc103">
      </member>
      <member name="ccc107"
              value="107"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC107"
              glib:nick="ccc107">
      </member>
      <member name="ccc118"
              value="118"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC118"
              glib:nick="ccc118">
      </member>
      <member name="ccc122"
              value="122"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC122"
              glib:nick="ccc122">
      </member>
      <member name="ccc129"
              value="129"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC129"
              glib:nick="ccc129">
      </member>
      <member name="ccc130"
              value="130"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC130"
              glib:nick="ccc130">
      </member>
      <member name="ccc133"
              value="132"
              c:identifier="HB_UNICODE_COMBINING_CLASS_CCC133"
              glib:nick="ccc133">
      </member>
      <member name="attached_below_left"
              value="200"
              c:identifier="HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW_LEFT"
              glib:nick="attached-below-left">
      </member>
      <member name="attached_below"
              value="202"
              c:identifier="HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW"
              glib:nick="attached-below">
      </member>
      <member name="attached_above"
              value="214"
              c:identifier="HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE"
              glib:nick="attached-above">
      </member>
      <member name="attached_above_right"
              value="216"
              c:identifier="HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE_RIGHT"
              glib:nick="attached-above-right">
      </member>
      <member name="below_left"
              value="218"
              c:identifier="HB_UNICODE_COMBINING_CLASS_BELOW_LEFT"
              glib:nick="below-left">
      </member>
      <member name="below"
              value="220"
              c:identifier="HB_UNICODE_COMBINING_CLASS_BELOW"
              glib:nick="below">
      </member>
      <member name="below_right"
              value="222"
              c:identifier="HB_UNICODE_COMBINING_CLASS_BELOW_RIGHT"
              glib:nick="below-right">
      </member>
      <member name="left"
              value="224"
              c:identifier="HB_UNICODE_COMBINING_CLASS_LEFT"
              glib:nick="left">
      </member>
      <member name="right"
              value="226"
              c:identifier="HB_UNICODE_COMBINING_CLASS_RIGHT"
              glib:nick="right">
      </member>
      <member name="above_left"
              value="228"
              c:identifier="HB_UNICODE_COMBINING_CLASS_ABOVE_LEFT"
              glib:nick="above-left">
      </member>
      <member name="above"
              value="230"
              c:identifier="HB_UNICODE_COMBINING_CLASS_ABOVE"
              glib:nick="above">
      </member>
      <member name="above_right"
              value="232"
              c:identifier="HB_UNICODE_COMBINING_CLASS_ABOVE_RIGHT"
              glib:nick="above-right">
      </member>
      <member name="double_below"
              value="233"
              c:identifier="HB_UNICODE_COMBINING_CLASS_DOUBLE_BELOW"
              glib:nick="double-below">
      </member>
      <member name="double_above"
              value="234"
              c:identifier="HB_UNICODE_COMBINING_CLASS_DOUBLE_ABOVE"
              glib:nick="double-above">
      </member>
      <member name="iota_subscript"
              value="240"
              c:identifier="HB_UNICODE_COMBINING_CLASS_IOTA_SUBSCRIPT"
              glib:nick="iota-subscript">
      </member>
      <member name="invalid"
              value="255"
              c:identifier="HB_UNICODE_COMBINING_CLASS_INVALID"
              glib:nick="invalid">
      </member>
    </enumeration>
    <function name="unicode_compose"
              c:identifier="hb_unicode_compose"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <doc xml:space="preserve">Unicode functions.</doc>
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
        <parameter name="a" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="b" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="ab"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="codepoint_t" c:type="hb_codepoint_t*"/>
        </parameter>
      </parameters>
    </function>
    <callback name="unicode_compose_func_t" c:type="hb_unicode_compose_func_t">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
        <parameter name="a" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="b" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="ab" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t*"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="4">
          <type name="gpointer" c:type="void*"/>
        </parameter>
      </parameters>
    </callback>
    <function name="unicode_decompose"
              c:identifier="hb_unicode_decompose"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <doc xml:space="preserve">Unicode functions.</doc>
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
        <parameter name="ab" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="a"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="codepoint_t" c:type="hb_codepoint_t*"/>
        </parameter>
        <parameter name="b"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="codepoint_t" c:type="hb_codepoint_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="unicode_decompose_compatibility"
              c:identifier="hb_unicode_decompose_compatibility"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <doc xml:space="preserve">Unicode functions.</doc>
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
        <parameter name="u" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="decomposed"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <type name="codepoint_t" c:type="hb_codepoint_t*"/>
        </parameter>
      </parameters>
    </function>
    <callback name="unicode_decompose_compatibility_func_t"
              c:type="hb_unicode_decompose_compatibility_func_t">
      <doc xml:space="preserve">Fully decompose @u to its Unicode compatibility decomposition. The codepoints of the decomposition will be written to @decomposed.
The complete length of the decomposition will be returned.

If @u has no compatibility decomposition, zero should be returned.

The Unicode standard guarantees that a buffer of length %HB_UNICODE_MAX_DECOMPOSITION_LEN codepoints will always be sufficient for any
compatibility decomposition plus an terminating value of 0.  Consequently, @decompose must be allocated by the caller to be at least this length.  Implementations
of this function type must ensure that they do not write past the provided array.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">number of codepoints in the full compatibility decomposition of @u, or 0 if no decomposition available.</doc>
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <doc xml:space="preserve">a Unicode function structure</doc>
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
        <parameter name="u" transfer-ownership="none">
          <doc xml:space="preserve">codepoint to decompose</doc>
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="decomposed" transfer-ownership="none">
          <doc xml:space="preserve">address of codepoint array (of length %HB_UNICODE_MAX_DECOMPOSITION_LEN) to write decomposition into</doc>
          <type name="codepoint_t" c:type="hb_codepoint_t*"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="3">
          <doc xml:space="preserve">user data pointer as passed to hb_unicode_funcs_set_decompose_compatibility_func()</doc>
          <type name="gpointer" c:type="void*"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="unicode_decompose_func_t"
              c:type="hb_unicode_decompose_func_t">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
        <parameter name="ab" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="a" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t*"/>
        </parameter>
        <parameter name="b" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t*"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="4">
          <type name="gpointer" c:type="void*"/>
        </parameter>
      </parameters>
    </callback>
    <function name="unicode_eastasian_width"
              c:identifier="hb_unicode_eastasian_width">
      <return-value transfer-ownership="none">
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
        <parameter name="unicode" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
      </parameters>
    </function>
    <callback name="unicode_eastasian_width_func_t"
              c:type="hb_unicode_eastasian_width_func_t">
      <return-value transfer-ownership="none">
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
        <parameter name="unicode" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="2">
          <type name="gpointer" c:type="void*"/>
        </parameter>
      </parameters>
    </callback>
    <function name="unicode_funcs_create"
              c:identifier="hb_unicode_funcs_create"
              version="0.9.2">
      <return-value transfer-ownership="full">
        <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
      </return-value>
      <parameters>
        <parameter name="parent"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="unicode_funcs_destroy"
              c:identifier="hb_unicode_funcs_destroy"
              version="0.9.2"
              introspectable="0">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <doc xml:space="preserve">Unicode functions.</doc>
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="unicode_funcs_get_default"
              c:identifier="hb_unicode_funcs_get_default">
      <return-value transfer-ownership="full">
        <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
      </return-value>
    </function>
    <function name="unicode_funcs_get_empty"
              c:identifier="hb_unicode_funcs_get_empty"
              version="0.9.2">
      <return-value transfer-ownership="full">
        <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
      </return-value>
    </function>
    <function name="unicode_funcs_get_parent"
              c:identifier="hb_unicode_funcs_get_parent"
              version="0.9.2">
      <return-value transfer-ownership="full">
        <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <doc xml:space="preserve">Unicode functions.</doc>
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="unicode_funcs_get_user_data"
              c:identifier="hb_unicode_funcs_get_user_data"
              version="0.9.2"
              introspectable="0">
      <return-value transfer-ownership="none">
        <type name="gpointer" c:type="void*"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <doc xml:space="preserve">Unicode functions.</doc>
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
        <parameter name="key" transfer-ownership="none">
          <type name="user_data_key_t" c:type="hb_user_data_key_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="unicode_funcs_is_immutable"
              c:identifier="hb_unicode_funcs_is_immutable"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <doc xml:space="preserve">Unicode functions.</doc>
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="unicode_funcs_make_immutable"
              c:identifier="hb_unicode_funcs_make_immutable"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <doc xml:space="preserve">Unicode functions.</doc>
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="unicode_funcs_reference"
              c:identifier="hb_unicode_funcs_reference"
              version="0.9.2"
              introspectable="0">
      <return-value transfer-ownership="full">
        <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <doc xml:space="preserve">Unicode functions.</doc>
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="unicode_funcs_set_combining_class_func"
              c:identifier="hb_unicode_funcs_set_combining_class_func"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <doc xml:space="preserve">a Unicode function structure</doc>
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
        <parameter name="func"
                   transfer-ownership="none"
                   scope="notified"
                   closure="2"
                   destroy="3">
          <type name="unicode_combining_class_func_t"
                c:type="hb_unicode_combining_class_func_t"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none" scope="notified">
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="unicode_funcs_set_compose_func"
              c:identifier="hb_unicode_funcs_set_compose_func"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <doc xml:space="preserve">a Unicode function structure</doc>
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
        <parameter name="func"
                   transfer-ownership="none"
                   scope="notified"
                   closure="2"
                   destroy="3">
          <type name="unicode_compose_func_t"
                c:type="hb_unicode_compose_func_t"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none" scope="notified">
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="unicode_funcs_set_decompose_compatibility_func"
              c:identifier="hb_unicode_funcs_set_decompose_compatibility_func"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <doc xml:space="preserve">a Unicode function structure</doc>
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
        <parameter name="func"
                   transfer-ownership="none"
                   scope="notified"
                   closure="2"
                   destroy="3">
          <type name="unicode_decompose_compatibility_func_t"
                c:type="hb_unicode_decompose_compatibility_func_t"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none" scope="notified">
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="unicode_funcs_set_decompose_func"
              c:identifier="hb_unicode_funcs_set_decompose_func"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <doc xml:space="preserve">a Unicode function structure</doc>
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
        <parameter name="func"
                   transfer-ownership="none"
                   scope="notified"
                   closure="2"
                   destroy="3">
          <type name="unicode_decompose_func_t"
                c:type="hb_unicode_decompose_func_t"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none" scope="notified">
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="unicode_funcs_set_eastasian_width_func"
              c:identifier="hb_unicode_funcs_set_eastasian_width_func"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <doc xml:space="preserve">a Unicode function structure</doc>
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
        <parameter name="func"
                   transfer-ownership="none"
                   scope="notified"
                   closure="2"
                   destroy="3">
          <type name="unicode_eastasian_width_func_t"
                c:type="hb_unicode_eastasian_width_func_t"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none" scope="notified">
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="unicode_funcs_set_general_category_func"
              c:identifier="hb_unicode_funcs_set_general_category_func"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <doc xml:space="preserve">a Unicode function structure</doc>
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
        <parameter name="func"
                   transfer-ownership="none"
                   scope="notified"
                   closure="2"
                   destroy="3">
          <type name="unicode_general_category_func_t"
                c:type="hb_unicode_general_category_func_t"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none" scope="notified">
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="unicode_funcs_set_mirroring_func"
              c:identifier="hb_unicode_funcs_set_mirroring_func"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <doc xml:space="preserve">a Unicode function structure</doc>
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
        <parameter name="func"
                   transfer-ownership="none"
                   scope="notified"
                   closure="2"
                   destroy="3">
          <type name="unicode_mirroring_func_t"
                c:type="hb_unicode_mirroring_func_t"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none" scope="notified">
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="unicode_funcs_set_script_func"
              c:identifier="hb_unicode_funcs_set_script_func"
              version="0.9.2">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <doc xml:space="preserve">a Unicode function structure</doc>
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
        <parameter name="func"
                   transfer-ownership="none"
                   scope="notified"
                   closure="2"
                   destroy="3">
          <type name="unicode_script_func_t"
                c:type="hb_unicode_script_func_t"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none" scope="notified">
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="unicode_funcs_set_user_data"
              c:identifier="hb_unicode_funcs_set_user_data"
              version="0.9.2"
              introspectable="0">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <doc xml:space="preserve">Unicode functions.</doc>
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
        <parameter name="key" transfer-ownership="none">
          <type name="user_data_key_t" c:type="hb_user_data_key_t*"/>
        </parameter>
        <parameter name="data" transfer-ownership="none">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none">
          <type name="destroy_func_t" c:type="hb_destroy_func_t"/>
        </parameter>
        <parameter name="replace" transfer-ownership="none">
          <type name="bool_t" c:type="hb_bool_t"/>
        </parameter>
      </parameters>
    </function>
    <record name="unicode_funcs_t"
            c:type="hb_unicode_funcs_t"
            glib:type-name="hb_unicode_funcs_t"
            glib:get-type="hb_gobject_unicode_funcs_get_type"
            c:symbol-prefix="gobject_unicode_funcs">
    </record>
    <function name="unicode_general_category"
              c:identifier="hb_unicode_general_category">
      <return-value transfer-ownership="none">
        <type name="unicode_general_category_t"
              c:type="hb_unicode_general_category_t"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
        <parameter name="unicode" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
      </parameters>
    </function>
    <callback name="unicode_general_category_func_t"
              c:type="hb_unicode_general_category_func_t">
      <return-value transfer-ownership="none">
        <type name="unicode_general_category_t"
              c:type="hb_unicode_general_category_t"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
        <parameter name="unicode" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="2">
          <type name="gpointer" c:type="void*"/>
        </parameter>
      </parameters>
    </callback>
    <enumeration name="unicode_general_category_t"
                 glib:type-name="hb_unicode_general_category_t"
                 glib:get-type="hb_gobject_unicode_general_category_get_type"
                 c:type="hb_unicode_general_category_t">
      <member name="control"
              value="0"
              c:identifier="HB_UNICODE_GENERAL_CATEGORY_CONTROL"
              glib:nick="control">
      </member>
      <member name="format"
              value="1"
              c:identifier="HB_UNICODE_GENERAL_CATEGORY_FORMAT"
              glib:nick="format">
      </member>
      <member name="unassigned"
              value="2"
              c:identifier="HB_UNICODE_GENERAL_CATEGORY_UNASSIGNED"
              glib:nick="unassigned">
      </member>
      <member name="private_use"
              value="3"
              c:identifier="HB_UNICODE_GENERAL_CATEGORY_PRIVATE_USE"
              glib:nick="private-use">
      </member>
      <member name="surrogate"
              value="4"
              c:identifier="HB_UNICODE_GENERAL_CATEGORY_SURROGATE"
              glib:nick="surrogate">
      </member>
      <member name="lowercase_letter"
              value="5"
              c:identifier="HB_UNICODE_GENERAL_CATEGORY_LOWERCASE_LETTER"
              glib:nick="lowercase-letter">
      </member>
      <member name="modifier_letter"
              value="6"
              c:identifier="HB_UNICODE_GENERAL_CATEGORY_MODIFIER_LETTER"
              glib:nick="modifier-letter">
      </member>
      <member name="other_letter"
              value="7"
              c:identifier="HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER"
              glib:nick="other-letter">
      </member>
      <member name="titlecase_letter"
              value="8"
              c:identifier="HB_UNICODE_GENERAL_CATEGORY_TITLECASE_LETTER"
              glib:nick="titlecase-letter">
      </member>
      <member name="uppercase_letter"
              value="9"
              c:identifier="HB_UNICODE_GENERAL_CATEGORY_UPPERCASE_LETTER"
              glib:nick="uppercase-letter">
      </member>
      <member name="spacing_mark"
              value="10"
              c:identifier="HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK"
              glib:nick="spacing-mark">
      </member>
      <member name="enclosing_mark"
              value="11"
              c:identifier="HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK"
              glib:nick="enclosing-mark">
      </member>
      <member name="non_spacing_mark"
              value="12"
              c:identifier="HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK"
              glib:nick="non-spacing-mark">
      </member>
      <member name="decimal_number"
              value="13"
              c:identifier="HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER"
              glib:nick="decimal-number">
      </member>
      <member name="letter_number"
              value="14"
              c:identifier="HB_UNICODE_GENERAL_CATEGORY_LETTER_NUMBER"
              glib:nick="letter-number">
      </member>
      <member name="other_number"
              value="15"
              c:identifier="HB_UNICODE_GENERAL_CATEGORY_OTHER_NUMBER"
              glib:nick="other-number">
      </member>
      <member name="connect_punctuation"
              value="16"
              c:identifier="HB_UNICODE_GENERAL_CATEGORY_CONNECT_PUNCTUATION"
              glib:nick="connect-punctuation">
      </member>
      <member name="dash_punctuation"
              value="17"
              c:identifier="HB_UNICODE_GENERAL_CATEGORY_DASH_PUNCTUATION"
              glib:nick="dash-punctuation">
      </member>
      <member name="close_punctuation"
              value="18"
              c:identifier="HB_UNICODE_GENERAL_CATEGORY_CLOSE_PUNCTUATION"
              glib:nick="close-punctuation">
      </member>
      <member name="final_punctuation"
              value="19"
              c:identifier="HB_UNICODE_GENERAL_CATEGORY_FINAL_PUNCTUATION"
              glib:nick="final-punctuation">
      </member>
      <member name="initial_punctuation"
              value="20"
              c:identifier="HB_UNICODE_GENERAL_CATEGORY_INITIAL_PUNCTUATION"
              glib:nick="initial-punctuation">
      </member>
      <member name="other_punctuation"
              value="21"
              c:identifier="HB_UNICODE_GENERAL_CATEGORY_OTHER_PUNCTUATION"
              glib:nick="other-punctuation">
      </member>
      <member name="open_punctuation"
              value="22"
              c:identifier="HB_UNICODE_GENERAL_CATEGORY_OPEN_PUNCTUATION"
              glib:nick="open-punctuation">
      </member>
      <member name="currency_symbol"
              value="23"
              c:identifier="HB_UNICODE_GENERAL_CATEGORY_CURRENCY_SYMBOL"
              glib:nick="currency-symbol">
      </member>
      <member name="modifier_symbol"
              value="24"
              c:identifier="HB_UNICODE_GENERAL_CATEGORY_MODIFIER_SYMBOL"
              glib:nick="modifier-symbol">
      </member>
      <member name="math_symbol"
              value="25"
              c:identifier="HB_UNICODE_GENERAL_CATEGORY_MATH_SYMBOL"
              glib:nick="math-symbol">
      </member>
      <member name="other_symbol"
              value="26"
              c:identifier="HB_UNICODE_GENERAL_CATEGORY_OTHER_SYMBOL"
              glib:nick="other-symbol">
      </member>
      <member name="line_separator"
              value="27"
              c:identifier="HB_UNICODE_GENERAL_CATEGORY_LINE_SEPARATOR"
              glib:nick="line-separator">
      </member>
      <member name="paragraph_separator"
              value="28"
              c:identifier="HB_UNICODE_GENERAL_CATEGORY_PARAGRAPH_SEPARATOR"
              glib:nick="paragraph-separator">
      </member>
      <member name="space_separator"
              value="29"
              c:identifier="HB_UNICODE_GENERAL_CATEGORY_SPACE_SEPARATOR"
              glib:nick="space-separator">
      </member>
    </enumeration>
    <function name="unicode_mirroring" c:identifier="hb_unicode_mirroring">
      <return-value transfer-ownership="none">
        <type name="codepoint_t" c:type="hb_codepoint_t"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
        <parameter name="unicode" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
      </parameters>
    </function>
    <callback name="unicode_mirroring_func_t"
              c:type="hb_unicode_mirroring_func_t">
      <return-value transfer-ownership="none">
        <type name="codepoint_t" c:type="hb_codepoint_t"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
        <parameter name="unicode" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="2">
          <type name="gpointer" c:type="void*"/>
        </parameter>
      </parameters>
    </callback>
    <function name="unicode_script" c:identifier="hb_unicode_script">
      <return-value transfer-ownership="none">
        <type name="script_t" c:type="hb_script_t"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
        <parameter name="unicode" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
      </parameters>
    </function>
    <callback name="unicode_script_func_t" c:type="hb_unicode_script_func_t">
      <return-value transfer-ownership="none">
        <type name="script_t" c:type="hb_script_t"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <type name="unicode_funcs_t" c:type="hb_unicode_funcs_t*"/>
        </parameter>
        <parameter name="unicode" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none" closure="2">
          <type name="gpointer" c:type="void*"/>
        </parameter>
      </parameters>
    </callback>
    <record name="user_data_key_t"
            c:type="hb_user_data_key_t"
            glib:type-name="hb_user_data_key_t"
            glib:get-type="hb_gobject_user_data_key_get_type"
            c:symbol-prefix="gobject_user_data_key">
      <field name="unused" readable="0" private="1">
        <type name="gchar" c:type="char"/>
      </field>
    </record>
    <union name="var_int_t" c:type="hb_var_int_t">
      <field name="u32" writable="1">
        <type name="guint32" c:type="uint32_t"/>
      </field>
      <field name="i32" writable="1">
        <type name="gint32" c:type="int32_t"/>
      </field>
      <field name="u16" writable="1">
        <array zero-terminated="0" c:type="uint16_t" fixed-size="2">
          <type name="guint16" c:type="uint16_t"/>
        </array>
      </field>
      <field name="i16" writable="1">
        <array zero-terminated="0" c:type="int16_t" fixed-size="2">
          <type name="gint16" c:type="int16_t"/>
        </array>
      </field>
      <field name="u8" writable="1">
        <array zero-terminated="0" c:type="uint8_t" fixed-size="4">
          <type name="guint8" c:type="uint8_t"/>
        </array>
      </field>
      <field name="i8" writable="1">
        <array zero-terminated="0" c:type="int8_t" fixed-size="4">
          <type name="gint8" c:type="int8_t"/>
        </array>
      </field>
    </union>
    <function name="version" c:identifier="hb_version" version="0.9.2">
      <doc xml:space="preserve">Returns library version as three integer components.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="major"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve">Library major version component.</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="minor"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve">Library minor version component.</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="micro"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve">Library micro version component.</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
      </parameters>
    </function>
    <function name="version_atleast"
              c:identifier="hb_version_atleast"
              version="0.9.30">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="major" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="minor" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="micro" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
      </parameters>
    </function>
    <function name="version_string"
              c:identifier="hb_version_string"
              version="0.9.2">
      <doc xml:space="preserve">Returns library version as a string with three components.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">library version string.</doc>
        <type name="utf8" c:type="const char*"/>
      </return-value>
    </function>
  </namespace>
</repository>
