<?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_font_h_extents_func_t"
           c:type="hb_font_get_font_h_extents_func_t">
      <type name="font_get_font_extents_func_t"
            c:type="hb_font_get_font_extents_func_t"/>
    </alias>
    <alias name="font_get_font_v_extents_func_t"
           c:type="hb_font_get_font_v_extents_func_t">
      <type name="font_get_font_extents_func_t"
            c:type="hb_font_get_font_extents_func_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"
              version="0.9.31">
      <doc xml:space="preserve">The default code point for replacing invalid characters in a given encoding.
Set to U+FFFD REPLACEMENT CHARACTER.</doc>
      <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="1" c:type="HB_VERSION_MICRO">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="VERSION_MINOR" value="3" c:type="HB_VERSION_MINOR">
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="VERSION_STRING" value="1.3.1" 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"
                   nullable="1"
                   allow-none="1">
          <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" nullable="1">
        <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"
                   nullable="1"
                   allow-none="1">
          <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">
      <doc xml:space="preserve">Appends a character with the Unicode value of @codepoint to @buffer, and
gives it the initial cluster value of @cluster. Clusters can be any thing
the client wants, they are usually used to refer to the index of the
character in the input text stream and are output in
#hb_glyph_info_t.cluster field.

This function does not check the validity of @codepoint, it is up to the
caller to ensure it is a valid Unicode code point.</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">an #hb_buffer_t.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="codepoint" transfer-ownership="none">
          <doc xml:space="preserve">a Unicode code point.</doc>
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="cluster" transfer-ownership="none">
          <doc xml:space="preserve">the cluster value of @codepoint.</doc>
          <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">
      <doc xml:space="preserve">Appends characters from @text array to @buffer. The @item_offset is the
position of the first character from @text that will be appended, and
@item_length is the number of character. When shaping part of a larger text
(e.g. a run of text from a paragraph), instead of passing just the substring
corresponding to the run, it is preferable to pass the whole
paragraph and specify the run start and length as @item_offset and
@item_length, respectively, to give HarfBuzz the full context to be able,
for example, to do cross-run Arabic shaping or properly handle combining
marks at stat of run.

This function does not check the validity of @text, it is up to the caller
to ensure it contains a valid Unicode code points.</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 #hb_buffer_t to append characters to.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="text" transfer-ownership="none">
          <doc xml:space="preserve">an array of Unicode code points to append.</doc>
          <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">
          <doc xml:space="preserve">the length of the @text, or -1 if it is %NULL terminated.</doc>
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="item_offset" transfer-ownership="none">
          <doc xml:space="preserve">the offset of the first code point to add to the @buffer.</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="item_length" transfer-ownership="none">
          <doc xml:space="preserve">the number of code points to add to the @buffer, or -1 for the
              end of @text (assuming it is %NULL terminated).</doc>
          <type name="gint" c:type="int"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_add_latin1"
              c:identifier="hb_buffer_add_latin1"
              version="0.9.39">
      <doc xml:space="preserve">Similar to hb_buffer_add_codepoints(), but allows only access to first 256
Unicode code points that can fit in 8-bit strings.

&lt;note&gt;Has nothing to do with non-Unicode Latin-1 encoding.&lt;/note&gt;</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">an #hb_buffer_t.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="text" transfer-ownership="none">
          <doc xml:space="preserve">an array of UTF-8
              characters to append.</doc>
          <array length="2" zero-terminated="0" c:type="uint8_t*">
            <type name="guint8"/>
          </array>
        </parameter>
        <parameter name="text_length" transfer-ownership="none">
          <doc xml:space="preserve">the length of the @text, or -1 if it is %NULL terminated.</doc>
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="item_offset" transfer-ownership="none">
          <doc xml:space="preserve">the offset of the first character to add to the @buffer.</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="item_length" transfer-ownership="none">
          <doc xml:space="preserve">the number of characters to add to the @buffer, or -1 for the
              end of @text (assuming it is %NULL terminated).</doc>
          <type name="gint" c:type="int"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_add_utf16"
              c:identifier="hb_buffer_add_utf16"
              version="0.9.2">
      <doc xml:space="preserve">See hb_buffer_add_codepoints().

Replaces invalid UTF-16 characters with the @buffer replacement code point,
see hb_buffer_set_replacement_codepoint().</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">an #hb_buffer_t.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="text" transfer-ownership="none">
          <doc xml:space="preserve">an array of UTF-16 characters to append.</doc>
          <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">
          <doc xml:space="preserve">the length of the @text, or -1 if it is %NULL terminated.</doc>
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="item_offset" transfer-ownership="none">
          <doc xml:space="preserve">the offset of the first character to add to the @buffer.</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="item_length" transfer-ownership="none">
          <doc xml:space="preserve">the number of characters to add to the @buffer, or -1 for the
              end of @text (assuming it is %NULL terminated).</doc>
          <type name="gint" c:type="int"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_add_utf32"
              c:identifier="hb_buffer_add_utf32"
              version="0.9.2">
      <doc xml:space="preserve">See hb_buffer_add_codepoints().

Replaces invalid UTF-32 characters with the @buffer replacement code point,
see hb_buffer_set_replacement_codepoint().</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">an #hb_buffer_t.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="text" transfer-ownership="none">
          <doc xml:space="preserve">an array of UTF-32 characters to append.</doc>
          <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">
          <doc xml:space="preserve">the length of the @text, or -1 if it is %NULL terminated.</doc>
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="item_offset" transfer-ownership="none">
          <doc xml:space="preserve">the offset of the first character to add to the @buffer.</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="item_length" transfer-ownership="none">
          <doc xml:space="preserve">the number of characters to add to the @buffer, or -1 for the
              end of @text (assuming it is %NULL terminated).</doc>
          <type name="gint" c:type="int"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_add_utf8"
              c:identifier="hb_buffer_add_utf8"
              version="0.9.2">
      <doc xml:space="preserve">See hb_buffer_add_codepoints().

Replaces invalid UTF-8 characters with the @buffer replacement code point,
see hb_buffer_set_replacement_codepoint().</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">an #hb_buffer_t.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="text" transfer-ownership="none">
          <doc xml:space="preserve">an array of UTF-8
              characters to append.</doc>
          <array length="2" zero-terminated="0" c:type="char*">
            <type name="guint8"/>
          </array>
        </parameter>
        <parameter name="text_length" transfer-ownership="none">
          <doc xml:space="preserve">the length of the @text, or -1 if it is %NULL terminated.</doc>
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="item_offset" transfer-ownership="none">
          <doc xml:space="preserve">the offset of the first character to add to the @buffer.</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="item_length" transfer-ownership="none">
          <doc xml:space="preserve">the number of characters to add to the @buffer, or -1 for the
              end of @text (assuming it is %NULL terminated).</doc>
          <type name="gint" c:type="int"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_allocation_successful"
              c:identifier="hb_buffer_allocation_successful"
              version="0.9.2">
      <doc xml:space="preserve">Check if allocating memory for the buffer succeeded.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">%true if @buffer memory allocation succeeded, %false otherwise.</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">an #hb_buffer_t.</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">
      <doc xml:space="preserve">Similar to hb_buffer_reset(), but does not clear the Unicode functions and
the replacement code point.</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">an #hb_buffer_t.</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">
        <doc xml:space="preserve">Initial value for new buffer.</doc>
      </member>
      <member name="unicode"
              value="1"
              c:identifier="HB_BUFFER_CONTENT_TYPE_UNICODE"
              glib:nick="unicode">
        <doc xml:space="preserve">The buffer contains input characters (before shaping).</doc>
      </member>
      <member name="glyphs"
              value="2"
              c:identifier="HB_BUFFER_CONTENT_TYPE_GLYPHS"
              glib:nick="glyphs">
        <doc xml:space="preserve">The buffer contains output glyphs (after shaping).</doc>
      </member>
    </enumeration>
    <function name="buffer_create"
              c:identifier="hb_buffer_create"
              version="0.9.2">
      <doc xml:space="preserve">Creates a new #hb_buffer_t with all properties to defaults.</doc>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve">
A newly allocated #hb_buffer_t with a reference count of 1. The initial
reference count should be released with hb_buffer_destroy() when you are done
using the #hb_buffer_t. This function never returns %NULL. If memory cannot
be allocated, a special #hb_buffer_t object will be returned on which
hb_buffer_allocation_successful() returns %false.</doc>
        <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.7">
      <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">an #hb_buffer_t 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">
      <doc xml:space="preserve">Deallocate the @buffer.
Decreases the reference count on @buffer by one. If the result is zero, then
@buffer and all associated resources are freed. See hb_buffer_reference().</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">an #hb_buffer_t.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
      </parameters>
    </function>
    <bitfield name="buffer_flags_t"
              version="0.9.20"
              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">
        <doc xml:space="preserve">the default buffer flag.</doc>
      </member>
      <member name="bot"
              value="1"
              c:identifier="HB_BUFFER_FLAG_BOT"
              glib:nick="bot">
        <doc xml:space="preserve">flag indicating that special handling of the beginning
                     of text paragraph can be applied to this buffer. Should usually
                     be set, unless you are passing to the buffer only part
                     of the text without the full context.</doc>
      </member>
      <member name="eot"
              value="2"
              c:identifier="HB_BUFFER_FLAG_EOT"
              glib:nick="eot">
        <doc xml:space="preserve">flag indicating that special handling of the end of text
                     paragraph can be applied to this buffer, similar to
                     @HB_BUFFER_FLAG_EOT.</doc>
      </member>
      <member name="preserve_default_ignorables"
              value="4"
              c:identifier="HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES"
              glib:nick="preserve-default-ignorables">
        <doc xml:space="preserve">flag indication that character with Default_Ignorable
                     Unicode property should use the corresponding glyph
                     from the font, instead of hiding them (currently done
                     by replacing them with the space glyph and zeroing the
                     advance width.)</doc>
      </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">an #hb_buffer_t.</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">
      <doc xml:space="preserve">see hb_buffer_set_content_type().</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">The type of @buffer contents.</doc>
        <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">an #hb_buffer_t.</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">
      <doc xml:space="preserve">See hb_buffer_set_direction()</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">The direction of the @buffer.</doc>
        <type name="direction_t" c:type="hb_direction_t"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">an #hb_buffer_t.</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">
      <doc xml:space="preserve">See hb_buffer_set_flags().</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">The @buffer flags.</doc>
        <type name="buffer_flags_t" c:type="hb_buffer_flags_t"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">an #hb_buffer_t.</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">
The @buffer glyph information array.
The value valid as long as buffer has not been modified.</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">an #hb_buffer_t.</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">
The @buffer glyph position array.
The value valid as long as buffer has not been modified.</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">an #hb_buffer_t.</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">
      <doc xml:space="preserve">See hb_buffer_set_language().</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">
The #hb_language_t of the buffer. Must not be freed by the caller.</doc>
        <type name="language_t" c:type="hb_language_t"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">an #hb_buffer_t.</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">The @buffer length.
The value valid as long as buffer has not been modified.</doc>
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">an #hb_buffer_t.</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">
      <doc xml:space="preserve">See hb_buffer_set_replacement_codepoint().</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">The @buffer replacement #hb_codepoint_t.</doc>
        <type name="codepoint_t" c:type="hb_codepoint_t"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">an #hb_buffer_t.</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">
      <doc xml:space="preserve">See hb_buffer_set_script().</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">The #hb_script_t of the @buffer.</doc>
        <type name="script_t" c:type="hb_script_t"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">an #hb_buffer_t.</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">
      <doc xml:space="preserve">Sets @props to the #hb_segment_properties_t of @buffer.</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">an #hb_buffer_t.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="props"
                   direction="out"
                   caller-allocates="1"
                   transfer-ownership="none">
          <doc xml:space="preserve">the output #hb_segment_properties_t.</doc>
          <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">an #hb_buffer_t.</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 transfer-ownership="none" nullable="1">
        <type name="gpointer" c:type="void*"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">an #hb_buffer_t.</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">an #hb_buffer_t.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
      </parameters>
    </function>
    <callback name="buffer_message_func_t" c:type="hb_buffer_message_func_t">
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="font" transfer-ownership="none">
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="message" transfer-ownership="none">
          <type name="utf8" c:type="const char*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="3">
          <type name="gpointer" c:type="void*"/>
        </parameter>
      </parameters>
    </callback>
    <function name="buffer_normalize_glyphs"
              c:identifier="hb_buffer_normalize_glyphs"
              version="0.9.2">
      <doc xml:space="preserve">Reorders a glyph buffer to have canonical in-cluster glyph order / position.
The resulting clusters should behave identical to pre-reordering clusters.

&lt;note&gt;This has nothing to do with Unicode normalization.&lt;/note&gt;</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">an #hb_buffer_t.</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">
      <doc xml:space="preserve">Pre allocates memory for @buffer to fit at least @size number of items.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">%true if @buffer memory allocation succeeded, %false otherwise.</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">an #hb_buffer_t.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="size" transfer-ownership="none">
          <doc xml:space="preserve">number of items to pre allocate.</doc>
          <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">
      <doc xml:space="preserve">Increases the reference count on @buffer by one. This prevents @buffer from
being destroyed until a matching call to hb_buffer_destroy() is made.</doc>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve">
The referenced #hb_buffer_t.</doc>
        <type name="buffer_t" c:type="hb_buffer_t*"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">an #hb_buffer_t.</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">
      <doc xml:space="preserve">Resets the buffer to its initial status, as if it was just newly created
with hb_buffer_create().</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">an #hb_buffer_t.</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">an #hb_buffer_t.</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">an #hb_buffer_t.</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">an #hb_buffer_t.</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"
              version="0.9.20"
              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">
      <doc xml:space="preserve">Flags that control what glyph information are serialized in hb_buffer_serialize_glyphs().</doc>
      <member name="default"
              value="0"
              c:identifier="HB_BUFFER_SERIALIZE_FLAG_DEFAULT"
              glib:nick="default">
        <doc xml:space="preserve">serialize glyph names, clusters and positions.</doc>
      </member>
      <member name="no_clusters"
              value="1"
              c:identifier="HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS"
              glib:nick="no-clusters">
        <doc xml:space="preserve">do not serialize glyph cluster.</doc>
      </member>
      <member name="no_positions"
              value="2"
              c:identifier="HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS"
              glib:nick="no-positions">
        <doc xml:space="preserve">do not serialize glyph position information.</doc>
      </member>
      <member name="no_glyph_names"
              value="4"
              c:identifier="HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES"
              glib:nick="no-glyph-names">
        <doc xml:space="preserve">do no serialize glyph name.</doc>
      </member>
      <member name="glyph_extents"
              value="8"
              c:identifier="HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS"
              glib:nick="glyph-extents">
        <doc xml:space="preserve">serialize glyph extents.</doc>
      </member>
    </bitfield>
    <function name="buffer_serialize_format_from_string"
              c:identifier="hb_buffer_serialize_format_from_string"
              version="0.9.7">
      <doc xml:space="preserve">Parses a string into an #hb_buffer_serialize_format_t. Does not check if
@str is a valid buffer serialization format, use
hb_buffer_serialize_list_formats() to get the list of supported formats.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">The parsed #hb_buffer_serialize_format_t.</doc>
        <type name="buffer_serialize_format_t"
              c:type="hb_buffer_serialize_format_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 %NULL terminated</doc>
          <type name="gint" c:type="int"/>
        </parameter>
      </parameters>
    </function>
    <enumeration name="buffer_serialize_format_t"
                 version="0.9.2"
                 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">
      <doc xml:space="preserve">The buffer serialization and de-serialization format used in
hb_buffer_serialize_glyphs() and hb_buffer_deserialize_glyphs().</doc>
      <member name="text"
              value="1413830740"
              c:identifier="HB_BUFFER_SERIALIZE_FORMAT_TEXT"
              glib:nick="text">
        <doc xml:space="preserve">a human-readable, plain text format.</doc>
      </member>
      <member name="json"
              value="1246973774"
              c:identifier="HB_BUFFER_SERIALIZE_FORMAT_JSON"
              glib:nick="json">
        <doc xml:space="preserve">a machine-readable JSON format.</doc>
      </member>
      <member name="invalid"
              value="0"
              c:identifier="HB_BUFFER_SERIALIZE_FORMAT_INVALID"
              glib:nick="invalid">
        <doc xml:space="preserve">invalid format.</doc>
      </member>
    </enumeration>
    <function name="buffer_serialize_format_to_string"
              c:identifier="hb_buffer_serialize_format_to_string"
              version="0.9.7">
      <doc xml:space="preserve">Converts @format to the string corresponding it, or %NULL if it is not a valid
#hb_buffer_serialize_format_t.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">
A %NULL terminated string corresponding to @format. Should not be freed.</doc>
        <type name="utf8" c:type="const char*"/>
      </return-value>
      <parameters>
        <parameter name="format" transfer-ownership="none">
          <doc xml:space="preserve">an #hb_buffer_serialize_format_t to convert.</doc>
          <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.7">
      <doc xml:space="preserve">Serializes @buffer into a textual representation of its glyph content,
useful for showing the contents of the buffer, for example during debugging.
There are currently two supported serialization formats:

## text
A human-readable, plain text format.
The serialized glyphs will look something like:

```
[uni0651=0@518,0+0|uni0628=0+1897]
```
- The serialized glyphs are delimited with `[` and `]`.
- Glyphs are separated with `|`
- Each glyph starts with glyph name, or glyph index if
  #HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES flag is set. Then,
  - If #HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS is not set, `=` then #hb_glyph_info_t.cluster.
  - If #HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS is not set, the #hb_glyph_position_t in the format:
    - If both #hb_glyph_position_t.x_offset and #hb_glyph_position_t.y_offset are not 0, `@x_offset,y_offset`. Then,
    - `+x_advance`, then `,y_advance` if #hb_glyph_position_t.y_advance is not 0. Then,
  - If #HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS is set, the
    #hb_glyph_extents_t in the format
    `&amp;lt;x_bearing,y_bearing,width,height&amp;gt;`

## json
TODO.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">The number of serialized items.</doc>
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">an #hb_buffer_t buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="start" transfer-ownership="none">
          <doc xml:space="preserve">the first item in @buffer to serialize.</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="end" transfer-ownership="none">
          <doc xml:space="preserve">the last item in @buffer to serialize.</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="buf"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve">output string to
      write serialized buffer into.</doc>
          <array length="4" zero-terminated="0" c:type="char*">
            <type name="guint8"/>
          </array>
        </parameter>
        <parameter name="buf_size"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve">the size of @buf.</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="buf_consumed"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full"
                   optional="1"
                   allow-none="1">
          <doc xml:space="preserve">if not %NULL, will be set to the number of byes written into @buf.</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="font"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve">the #hb_font_t used to shape this buffer, needed to
       read glyph names and extents. If %NULL, and empty font will be used.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="format" transfer-ownership="none">
          <doc xml:space="preserve">the #hb_buffer_serialize_format_t to use for formatting the output.</doc>
          <type name="buffer_serialize_format_t"
                c:type="hb_buffer_serialize_format_t"/>
        </parameter>
        <parameter name="flags" transfer-ownership="none">
          <doc xml:space="preserve">the #hb_buffer_serialize_flags_t that control what glyph properties
        to serialize.</doc>
          <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.7">
      <doc xml:space="preserve">Returns a list of supported buffer serialization formats.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">
A string array of buffer serialization formats. Should not be freed.</doc>
        <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">an #hb_buffer_t.</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">
      <doc xml:space="preserve">Sets the type of @buffer contents, buffers are either empty, contain
characters (before shaping) or glyphs (the result of shaping).</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">an #hb_buffer_t.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="content_type" transfer-ownership="none">
          <doc xml:space="preserve">the type of buffer contents to set</doc>
          <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">
      <doc xml:space="preserve">Set the text flow direction of the buffer. No shaping can happen without
setting @buffer direction, and it controls the visual direction for the
output glyphs; for RTL direction the glyphs will be reversed. Many layout
features depend on the proper setting of the direction, for example,
reversing RTL text before shaping, then shaping with LTR direction is not
the same as keeping the text in logical order and shaping with RTL
direction.</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">an #hb_buffer_t.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="direction" transfer-ownership="none">
          <doc xml:space="preserve">the #hb_direction_t of the @buffer</doc>
          <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">
      <doc xml:space="preserve">Sets @buffer flags to @flags. See #hb_buffer_flags_t.</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">an #hb_buffer_t.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="flags" transfer-ownership="none">
          <doc xml:space="preserve">the buffer flags to set.</doc>
          <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">
      <doc xml:space="preserve">Sets the language of @buffer to @language.

Languages are crucial for selecting which OpenType feature to apply to the
buffer which can result in applying language-specific behaviour. Languages
are orthogonal to the scripts, and though they are related, they are
different concepts and should not be confused with each other.

Use hb_language_from_string() to convert from ISO 639 language codes to
#hb_language_t.</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">an #hb_buffer_t.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="language" transfer-ownership="none">
          <doc xml:space="preserve">an hb_language_t to set.</doc>
          <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">
      <doc xml:space="preserve">Similar to hb_buffer_pre_allocate(), but clears any new items added at the
end.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">%true if @buffer memory allocation succeeded, %false otherwise.</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">an #hb_buffer_t.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="length" transfer-ownership="none">
          <doc xml:space="preserve">the new length of @buffer.</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_set_message_func"
              c:identifier="hb_buffer_set_message_func"
              version="1.1.3">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">an #hb_buffer_t.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="func"
                   transfer-ownership="none"
                   scope="notified"
                   closure="2"
                   destroy="3">
          <type name="buffer_message_func_t"
                c:type="hb_buffer_message_func_t"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <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="buffer_set_replacement_codepoint"
              c:identifier="hb_buffer_set_replacement_codepoint"
              version="0.9.31">
      <doc xml:space="preserve">Sets the #hb_codepoint_t that replaces invalid entries for a given encoding
when adding text to @buffer.

Default is %HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT.</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">an #hb_buffer_t.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="replacement" transfer-ownership="none">
          <doc xml:space="preserve">the replacement #hb_codepoint_t</doc>
          <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">
      <doc xml:space="preserve">Sets the script of @buffer to @script.

Script is crucial for choosing the proper shaping behaviour for scripts that
require it (e.g. Arabic) and the which OpenType features defined in the font
to be applied.

You can pass one of the predefined #hb_script_t values, or use
hb_script_from_string() or hb_script_from_iso15924_tag() to get the
corresponding script from an ISO 15924 script tag.</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">an #hb_buffer_t.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="script" transfer-ownership="none">
          <doc xml:space="preserve">an #hb_script_t to set.</doc>
          <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">
      <doc xml:space="preserve">Sets the segment properties of the buffer, a shortcut for calling
hb_buffer_set_direction(), hb_buffer_set_script() and
hb_buffer_set_language() individually.</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">an #hb_buffer_t.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="props" transfer-ownership="none">
          <doc xml:space="preserve">an #hb_segment_properties_t to use.</doc>
          <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">an #hb_buffer_t.</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">an #hb_buffer_t.</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"
                   nullable="1"
                   allow-none="1">
          <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">
      <doc xml:space="preserve">The main structure holding the input text and its properties before shaping,
and output glyphs and their information after shaping.</doc>
    </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"
                   nullable="1"
                   allow-none="1"
                   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">
        <doc xml:space="preserve">Initial, unset direction.</doc>
      </member>
      <member name="ltr"
              value="4"
              c:identifier="HB_DIRECTION_LTR"
              glib:nick="ltr">
        <doc xml:space="preserve">Text is set horizontally from left to right.</doc>
      </member>
      <member name="rtl"
              value="5"
              c:identifier="HB_DIRECTION_RTL"
              glib:nick="rtl">
        <doc xml:space="preserve">Text is set horizontally from right to left.</doc>
      </member>
      <member name="ttb"
              value="6"
              c:identifier="HB_DIRECTION_TTB"
              glib:nick="ttb">
        <doc xml:space="preserve">Text is set vertically from top to bottom.</doc>
      </member>
      <member name="btt"
              value="7"
              c:identifier="HB_DIRECTION_BTT"
              glib:nick="btt">
        <doc xml:space="preserve">Text is set vertically from bottom to top.</doc>
      </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"
                   nullable="1"
                   allow-none="1">
          <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" nullable="1">
        <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"
                   nullable="1"
                   allow-none="1">
          <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.

TODO: document the syntax here.</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 %NULL 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>
    <record name="font_extents_t" c:type="hb_font_extents_t">
      <field name="ascender" writable="1">
        <type name="position_t" c:type="hb_position_t"/>
      </field>
      <field name="descender" writable="1">
        <type name="position_t" c:type="hb_position_t"/>
      </field>
      <field name="line_gap" writable="1">
        <type name="position_t" c:type="hb_position_t"/>
      </field>
      <field name="reserved9" readable="0" private="1">
        <type name="position_t" c:type="hb_position_t"/>
      </field>
      <field name="reserved8" readable="0" private="1">
        <type name="position_t" c:type="hb_position_t"/>
      </field>
      <field name="reserved7" readable="0" private="1">
        <type name="position_t" c:type="hb_position_t"/>
      </field>
      <field name="reserved6" readable="0" private="1">
        <type name="position_t" c:type="hb_position_t"/>
      </field>
      <field name="reserved5" readable="0" private="1">
        <type name="position_t" c:type="hb_position_t"/>
      </field>
      <field name="reserved4" readable="0" private="1">
        <type name="position_t" c:type="hb_position_t"/>
      </field>
      <field name="reserved3" readable="0" private="1">
        <type name="position_t" c:type="hb_position_t"/>
      </field>
      <field name="reserved2" readable="0" private="1">
        <type name="position_t" c:type="hb_position_t"/>
      </field>
      <field name="reserved1" readable="0" private="1">
        <type name="position_t" c:type="hb_position_t"/>
      </field>
    </record>
    <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" nullable="1">
        <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_font_h_extents_func"
              c:identifier="hb_font_funcs_set_font_h_extents_func"
              version="1.1.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_font_h_extents_func_t"
                c:type="hb_font_get_font_h_extents_func_t"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <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_font_v_extents_func"
              c:identifier="hb_font_funcs_set_font_v_extents_func"
              version="1.1.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_font_v_extents_func_t"
                c:type="hb_font_get_font_v_extents_func_t"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <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_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"
                   nullable="1"
                   allow-none="1">
          <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"
                   nullable="1"
                   allow-none="1">
          <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"
                   nullable="1"
                   allow-none="1">
          <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"
              deprecated="1"
              deprecated-version="1.2.3">
      <doc xml:space="preserve">Deprecated.  Use hb_font_funcs_set_nominal_glyph_func() and
hb_font_funcs_set_variation_glyph_func() instead.</doc>
      <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"
                   nullable="1"
                   allow-none="1">
          <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"
                   nullable="1"
                   allow-none="1">
          <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"
                   nullable="1"
                   allow-none="1">
          <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"
                   nullable="1"
                   allow-none="1">
          <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"
                   nullable="1"
                   allow-none="1">
          <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"
                   nullable="1"
                   allow-none="1">
          <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"
                   nullable="1"
                   allow-none="1">
          <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"
                   nullable="1"
                   allow-none="1">
          <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_nominal_glyph_func"
              c:identifier="hb_font_funcs_set_nominal_glyph_func"
              version="1.2.3">
      <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_nominal_glyph_func_t"
                c:type="hb_font_get_nominal_glyph_func_t"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <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"
                   nullable="1"
                   allow-none="1">
          <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_funcs_set_variation_glyph_func"
              c:identifier="hb_font_funcs_set_variation_glyph_func"
              version="1.2.3">
      <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_variation_glyph_func_t"
                c:type="hb_font_get_variation_glyph_func_t"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <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>
    <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_extents_for_direction"
              c:identifier="hb_font_get_extents_for_direction"
              version="1.1.3">
      <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="direction" transfer-ownership="none">
          <type name="direction_t" c:type="hb_direction_t"/>
        </parameter>
        <parameter name="extents" transfer-ownership="none">
          <type name="font_extents_t" c:type="hb_font_extents_t*"/>
        </parameter>
      </parameters>
    </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>
    <callback name="font_get_font_extents_func_t"
              c:type="hb_font_get_font_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"
                   nullable="1"
                   allow-none="1">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="metrics" transfer-ownership="none">
          <type name="font_extents_t" c:type="hb_font_extents_t*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="3">
          <type name="gpointer" c:type="void*"/>
        </parameter>
      </parameters>
    </callback>
    <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"
                   nullable="1"
                   allow-none="1">
          <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"
                   nullable="1"
                   allow-none="1"
                   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"
                   nullable="1"
                   allow-none="1">
          <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"
                   nullable="1"
                   allow-none="1"
                   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"
                   nullable="1"
                   allow-none="1">
          <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"
                   nullable="1"
                   allow-none="1"
                   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"
                   nullable="1"
                   allow-none="1">
          <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"
                   nullable="1"
                   allow-none="1"
                   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"
                   nullable="1"
                   allow-none="1">
          <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"
                   nullable="1"
                   allow-none="1"
                   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"
                   nullable="1"
                   allow-none="1">
          <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"
                   nullable="1"
                   allow-none="1"
                   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"
                   nullable="1"
                   allow-none="1">
          <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"
                   nullable="1"
                   allow-none="1"
                   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"
                   nullable="1"
                   allow-none="1">
          <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"
                   nullable="1"
                   allow-none="1"
                   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_h_extents"
              c:identifier="hb_font_get_h_extents"
              version="1.1.3">
      <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="extents"
                   direction="out"
                   caller-allocates="1"
                   transfer-ownership="none">
          <type name="font_extents_t" c:type="hb_font_extents_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_get_nominal_glyph"
              c:identifier="hb_font_get_nominal_glyph"
              version="1.2.3">
      <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="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_nominal_glyph_func_t"
              c:type="hb_font_get_nominal_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"
                   nullable="1"
                   allow-none="1">
          <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="glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="4">
          <type name="gpointer" c:type="void*"/>
        </parameter>
      </parameters>
    </callback>
    <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" nullable="1">
        <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_get_v_extents"
              c:identifier="hb_font_get_v_extents"
              version="1.1.3">
      <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="extents"
                   direction="out"
                   caller-allocates="1"
                   transfer-ownership="none">
          <type name="font_extents_t" c:type="hb_font_extents_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_get_variation_glyph"
              c:identifier="hb_font_get_variation_glyph"
              version="1.2.3">
      <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>
    <callback name="font_get_variation_glyph_func_t"
              c:type="hb_font_get_variation_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"
                   nullable="1"
                   allow-none="1">
          <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"
                   nullable="1"
                   allow-none="1"
                   closure="5">
          <type name="gpointer" c:type="void*"/>
        </parameter>
      </parameters>
    </callback>
    <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"
                   nullable="1"
                   allow-none="1">
          <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"
                   nullable="1"
                   allow-none="1"
                   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"
                   nullable="1"
                   allow-none="1">
          <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">
      <doc xml:space="preserve">The #hb_glyph_info_t is the structure that holds information about the
glyphs and their relation to input text.</doc>
      <field name="codepoint" writable="1">
        <doc xml:space="preserve">either a Unicode code point (before shaping) or a glyph index
            (after shaping).</doc>
        <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">
        <doc xml:space="preserve">the index of the character in the original text that corresponds
          to this #hb_glyph_info_t, or whatever the client passes to
          hb_buffer_add(). More than one #hb_glyph_info_t can have the same
          @cluster value, if they resulted from the same character (e.g. one
          to many glyph substitution), and when more than one character gets
          merged in the same glyph (e.g. many to one glyph substitution) the
          #hb_glyph_info_t will have the smallest cluster value of them.
          By default some characters are merged into the same cluster
          (e.g. combining marks have the same cluster as their bases)
          even if they are separate glyphs, hb_buffer_set_cluster_level()
          allow selecting more fine-grained cluster handling.</doc>
        <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">
      <doc xml:space="preserve">The #hb_glyph_position_t is the structure that holds the positions of the
glyph in both horizontal and vertical directions. All positions in
#hb_glyph_position_t are relative to the current point.</doc>
      <field name="x_advance" writable="1">
        <doc xml:space="preserve">how much the line advances after drawing this glyph when setting
            text in horizontal direction.</doc>
        <type name="position_t" c:type="hb_position_t"/>
      </field>
      <field name="y_advance" writable="1">
        <doc xml:space="preserve">how much the line advances after drawing this glyph when setting
            text in vertical direction.</doc>
        <type name="position_t" c:type="hb_position_t"/>
      </field>
      <field name="x_offset" writable="1">
        <doc xml:space="preserve">how much the glyph moves on the X-axis before drawing it, this
           should not affect how much the line advances.</doc>
        <type name="position_t" c:type="hb_position_t"/>
      </field>
      <field name="y_offset" writable="1">
        <doc xml:space="preserve">how much the glyph moves on the Y-axis before drawing it, this
           should not affect how much the line advances.</doc>
        <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">
      <doc xml:space="preserve">Converts @str representing an ISO 639 language code to the corresponding
#hb_language_t.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">
The #hb_language_t corresponding to the ISO 639 language code.</doc>
        <type name="language_t" c:type="hb_language_t"/>
      </return-value>
      <parameters>
        <parameter name="str" transfer-ownership="none">
          <doc xml:space="preserve">a string representing
      ISO 639 language code</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 the @str, or -1 if it is %NULL-terminated.</doc>
          <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">
        <doc xml:space="preserve">See hb_language_from_string().</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">
A %NULL-terminated string representing the @language. Must not be freed by
the caller.</doc>
          <type name="utf8" c:type="const char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="language" transfer-ownership="none">
            <doc xml:space="preserve">an #hb_language_t to convert.</doc>
            <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">
      <doc xml:space="preserve">See hb_language_from_string().</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">
A %NULL-terminated string representing the @language. Must not be freed by
the caller.</doc>
        <type name="utf8" c:type="const char*"/>
      </return-value>
      <parameters>
        <parameter name="language" transfer-ownership="none">
          <doc xml:space="preserve">an #hb_language_t to convert.</doc>
          <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"
              version="0.9.8">
      <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"
              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">
          <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"
              version="0.9.10">
      <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"
              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="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"
              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="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"
              version="0.9.7">
      <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"
              version="0.9.22">
      <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"
                   nullable="1"
                   allow-none="1"
                   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">
      <doc xml:space="preserve">Converts an ISO 15924 script tag to a corresponding #hb_script_t.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">An #hb_script_t corresponding to the ISO 15924 tag.</doc>
        <type name="script_t" c:type="hb_script_t"/>
      </return-value>
      <parameters>
        <parameter name="tag" transfer-ownership="none">
          <doc xml:space="preserve">an #hb_tag_t representing an ISO 15924 tag.</doc>
          <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">
      <doc xml:space="preserve">Converts a string @str representing an ISO 15924 script tag to a
corresponding #hb_script_t. Shorthand for hb_tag_from_string() then
hb_script_from_iso15924_tag().</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">An #hb_script_t corresponding to the ISO 15924 tag.</doc>
        <type name="script_t" c:type="hb_script_t"/>
      </return-value>
      <parameters>
        <parameter name="str" transfer-ownership="none">
          <doc xml:space="preserve">a string representing an
      ISO 15924 tag.</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 the @str, or -1 if it is %NULL-terminated.</doc>
          <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="adlam"
              value="1097100397"
              c:identifier="HB_SCRIPT_ADLAM"
              glib:nick="adlam">
      </member>
      <member name="bhaiksuki"
              value="1114139507"
              c:identifier="HB_SCRIPT_BHAIKSUKI"
              glib:nick="bhaiksuki">
      </member>
      <member name="marchen"
              value="1298231907"
              c:identifier="HB_SCRIPT_MARCHEN"
              glib:nick="marchen">
      </member>
      <member name="osage"
              value="1332963173"
              c:identifier="HB_SCRIPT_OSAGE"
              glib:nick="osage">
      </member>
      <member name="tangut"
              value="1415671399"
              c:identifier="HB_SCRIPT_TANGUT"
              glib:nick="tangut">
      </member>
      <member name="newa"
              value="1315272545"
              c:identifier="HB_SCRIPT_NEWA"
              glib:nick="newa">
      </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">
      <doc xml:space="preserve">See hb_script_from_iso15924_tag().</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">An #hb_tag_t representing an ISO 15924 script tag.</doc>
        <type name="tag_t" c:type="hb_tag_t"/>
      </return-value>
      <parameters>
        <parameter name="script" transfer-ownership="none">
          <doc xml:space="preserve">an #hb_script_ to convert.</doc>
          <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">
      <doc xml:space="preserve">Checks the equality of two #hb_segment_properties_t's.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">%true if all properties of @a equal those of @b, false otherwise.</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="a" transfer-ownership="none">
          <doc xml:space="preserve">first #hb_segment_properties_t to compare.</doc>
          <type name="segment_properties_t"
                c:type="const hb_segment_properties_t*"/>
        </parameter>
        <parameter name="b" transfer-ownership="none">
          <doc xml:space="preserve">second #hb_segment_properties_t to compare.</doc>
          <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">
      <doc xml:space="preserve">Creates a hash representing @p.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">A hash of @p.</doc>
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="p" transfer-ownership="none">
          <doc xml:space="preserve">#hb_segment_properties_t to hash.</doc>
          <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">
      <doc xml:space="preserve">The structure that holds various text properties of an #hb_buffer_t. Can be
set and retrieved using hb_buffer_set_segment_properties() and
hb_buffer_get_segment_properties(), respectively.</doc>
      <field name="direction" writable="1">
        <doc xml:space="preserve">the #hb_direction_t of the buffer, see hb_buffer_set_direction().</doc>
        <type name="direction_t" c:type="hb_direction_t"/>
      </field>
      <field name="script" writable="1">
        <doc xml:space="preserve">the #hb_script_t of the buffer, see hb_buffer_set_script().</doc>
        <type name="script_t" c:type="hb_script_t"/>
      </field>
      <field name="language" writable="1">
        <doc xml:space="preserve">the #hb_language_t of the buffer, see hb_buffer_set_language().</doc>
        <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" nullable="1">
        <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"
                   nullable="1"
                   allow-none="1">
          <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">
        <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" nullable="1">
        <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"
                   nullable="1"
                   allow-none="1">
          <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"
                   direction="out"
                   caller-allocates="1"
                   transfer-ownership="none">
          <array zero-terminated="0" c:type="char*" fixed-size="4">
            <type name="guint8"/>
          </array>
        </parameter>
      </parameters>
    </function>
    <function name="unicode_combining_class"
              c:identifier="hb_unicode_combining_class"
              version="0.9.2">
      <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"
                   nullable="1"
                   allow-none="1"
                   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"
                   nullable="1"
                   allow-none="1"
                   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"
                   nullable="1"
                   allow-none="1"
                   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"
                   nullable="1"
                   allow-none="1"
                   closure="4">
          <type name="gpointer" c:type="void*"/>
        </parameter>
      </parameters>
    </callback>
    <function name="unicode_eastasian_width"
              c:identifier="hb_unicode_eastasian_width"
              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">
          <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"
                   nullable="1"
                   allow-none="1"
                   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" nullable="1">
        <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"
                   nullable="1"
                   allow-none="1">
          <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"
                   nullable="1"
                   allow-none="1">
          <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"
                   nullable="1"
                   allow-none="1">
          <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"
                   nullable="1"
                   allow-none="1">
          <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"
                   nullable="1"
                   allow-none="1">
          <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"
                   nullable="1"
                   allow-none="1">
          <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"
                   nullable="1"
                   allow-none="1">
          <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"
                   nullable="1"
                   allow-none="1">
          <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"
                   nullable="1"
                   allow-none="1">
          <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"
              version="0.9.2">
      <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"
                   nullable="1"
                   allow-none="1"
                   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"
              version="0.9.2">
      <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"
                   nullable="1"
                   allow-none="1"
                   closure="2">
          <type name="gpointer" c:type="void*"/>
        </parameter>
      </parameters>
    </callback>
    <function name="unicode_script"
              c:identifier="hb_unicode_script"
              version="0.9.2">
      <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"
                   nullable="1"
                   allow-none="1"
                   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>
