<?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">
      <source-position filename="hb-common.h" line="90"/>
      <type name="gint" c:type="int"/>
    </alias>
    <alias name="codepoint_t" c:type="hb_codepoint_t">
      <source-position filename="hb-common.h" line="92"/>
      <type name="guint32" c:type="uint32_t"/>
    </alias>
    <alias name="color_t" c:type="hb_color_t">
      <doc xml:space="preserve"
           filename="hb-common.h"
           line="459">Data type for holding color values.</doc>
      <source-position filename="hb-common.h" line="466"/>
      <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">
      <source-position filename="hb-font.h" line="115"/>
      <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">
      <source-position filename="hb-font.h" line="116"/>
      <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">
      <source-position filename="hb-font.h" line="140"/>
      <type name="font_get_glyph_advance_func_t"
            c:type="hb_font_get_glyph_advance_func_t"/>
    </alias>
    <alias name="font_get_glyph_h_advances_func_t"
           c:type="hb_font_get_glyph_h_advances_func_t">
      <source-position filename="hb-font.h" line="150"/>
      <type name="font_get_glyph_advances_func_t"
            c:type="hb_font_get_glyph_advances_func_t"/>
    </alias>
    <alias name="font_get_glyph_h_kerning_func_t"
           c:type="hb_font_get_glyph_h_kerning_func_t">
      <source-position filename="hb-font.h" line="163"/>
      <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">
      <source-position filename="hb-font.h" line="157"/>
      <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">
      <source-position filename="hb-font.h" line="141"/>
      <type name="font_get_glyph_advance_func_t"
            c:type="hb_font_get_glyph_advance_func_t"/>
    </alias>
    <alias name="font_get_glyph_v_advances_func_t"
           c:type="hb_font_get_glyph_v_advances_func_t">
      <source-position filename="hb-font.h" line="151"/>
      <type name="font_get_glyph_advances_func_t"
            c:type="hb_font_get_glyph_advances_func_t"/>
    </alias>
    <alias name="font_get_glyph_v_kerning_func_t"
           c:type="hb_font_get_glyph_v_kerning_func_t">
      <source-position filename="hb-deprecated.h" line="168"/>
      <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">
      <source-position filename="hb-font.h" line="158"/>
      <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">
      <source-position filename="hb-common.h" line="94"/>
      <type name="guint32" c:type="uint32_t"/>
    </alias>
    <alias name="ot_name_id_t" c:type="hb_ot_name_id_t">
      <doc xml:space="preserve"
           filename="hb-ot-name.h"
           line="37">An integral type representing an OpenType 'name' table name identifier.
There are predefined name IDs, as well as name IDs return from other
API.  These can be used to fetch name strings from a font face.</doc>
      <source-position filename="hb-ot-name.h" line="79"/>
      <type name="guint" c:type="unsigned int"/>
    </alias>
    <alias name="position_t" c:type="hb_position_t">
      <source-position filename="hb-common.h" line="93"/>
      <type name="gint32" c:type="int32_t"/>
    </alias>
    <alias name="tag_t" c:type="hb_tag_t">
      <source-position filename="hb-common.h" line="108"/>
      <type name="guint32" c:type="uint32_t"/>
    </alias>
    <constant name="AAT_LAYOUT_NO_SELECTOR_INDEX"
              value="65535"
              c:type="HB_AAT_LAYOUT_NO_SELECTOR_INDEX">
      <source-position filename="hb-aat-layout.h" line="449"/>
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="BUFFER_REPLACEMENT_CODEPOINT_DEFAULT"
              value="65533"
              c:type="HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT"
              version="0.9.31">
      <doc xml:space="preserve"
           filename="hb-buffer.h"
           line="335">The default code point for replacing invalid characters in a given encoding.
Set to U+FFFD REPLACEMENT CHARACTER.</doc>
      <source-position filename="hb-buffer.h" line="339"/>
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="FEATURE_GLOBAL_START"
              value="0"
              c:type="HB_FEATURE_GLOBAL_START"
              version="2.0.0">
      <source-position filename="hb-common.h" line="418"/>
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="LANGUAGE_INVALID" value="0" c:type="HB_LANGUAGE_INVALID">
      <source-position filename="hb-common.h" line="168"/>
      <type name="language_t" c:type="hb_language_t"/>
    </constant>
    <constant name="MAP_VALUE_INVALID"
              value="4294967295"
              c:type="HB_MAP_VALUE_INVALID">
      <source-position filename="hb-map.h" line="42"/>
      <type name="codepoint_t" c:type="hb_codepoint_t"/>
    </constant>
    <constant name="OT_LAYOUT_DEFAULT_LANGUAGE_INDEX"
              value="65535"
              c:type="HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX">
      <source-position filename="hb-ot-layout.h" line="150"/>
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="OT_LAYOUT_NO_FEATURE_INDEX"
              value="65535"
              c:type="HB_OT_LAYOUT_NO_FEATURE_INDEX">
      <source-position filename="hb-ot-layout.h" line="149"/>
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="OT_LAYOUT_NO_SCRIPT_INDEX"
              value="65535"
              c:type="HB_OT_LAYOUT_NO_SCRIPT_INDEX">
      <source-position filename="hb-ot-layout.h" line="148"/>
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="OT_LAYOUT_NO_VARIATIONS_INDEX"
              value="4294967295"
              c:type="HB_OT_LAYOUT_NO_VARIATIONS_INDEX">
      <source-position filename="hb-ot-layout.h" line="151"/>
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="OT_MAX_TAGS_PER_LANGUAGE"
              value="3"
              c:type="HB_OT_MAX_TAGS_PER_LANGUAGE"
              version="2.0.0">
      <source-position filename="hb-ot-layout.h" line="66"/>
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="OT_MAX_TAGS_PER_SCRIPT"
              value="3"
              c:type="HB_OT_MAX_TAGS_PER_SCRIPT"
              version="2.0.0">
      <source-position filename="hb-ot-layout.h" line="60"/>
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="OT_VAR_NO_AXIS_INDEX"
              value="4294967295"
              c:type="HB_OT_VAR_NO_AXIS_INDEX"
              version="1.4.2"
              deprecated="1"
              deprecated-version="2.2.0">
      <source-position filename="hb-ot-deprecated.h" line="77"/>
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="SET_VALUE_INVALID"
              value="4294967295"
              c:type="HB_SET_VALUE_INVALID">
      <source-position filename="hb-set.h" line="42"/>
      <type name="codepoint_t" c:type="hb_codepoint_t"/>
    </constant>
    <constant name="UNICODE_MAX"
              value="1114111"
              c:type="HB_UNICODE_MAX"
              version="1.9.0">
      <source-position filename="hb-unicode.h" line="48"/>
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="UNICODE_MAX_DECOMPOSITION_LEN"
              value="19"
              c:type="HB_UNICODE_MAX_DECOMPOSITION_LEN"
              deprecated="1"
              deprecated-version="2.0.0">
      <doc xml:space="preserve"
           filename="hb-deprecated.h"
           line="136">See Unicode 6.1 for details on the maximum decomposition length.</doc>
      <source-position filename="hb-deprecated.h" line="143"/>
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="VERSION_MAJOR" value="2" c:type="HB_VERSION_MAJOR">
      <source-position filename="hb-version.h" line="39"/>
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="VERSION_MICRO" value="3" c:type="HB_VERSION_MICRO">
      <source-position filename="hb-version.h" line="41"/>
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="VERSION_MINOR" value="5" c:type="HB_VERSION_MINOR">
      <source-position filename="hb-version.h" line="40"/>
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="VERSION_STRING" value="2.5.3" c:type="HB_VERSION_STRING">
      <source-position filename="hb-version.h" line="43"/>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <enumeration name="aat_layout_feature_selector_t"
                 version="2.2.0"
                 glib:type-name="hb_aat_layout_feature_selector_t"
                 glib:get-type="hb_gobject_aat_layout_feature_selector_get_type"
                 c:type="hb_aat_layout_feature_selector_t">
      <member name="invalid"
              value="65535"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_INVALID"
              glib:nick="invalid">
      </member>
      <member name="all_type_features_on"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_ALL_TYPE_FEATURES_ON"
              glib:nick="all-type-features-on">
      </member>
      <member name="all_type_features_off"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_ALL_TYPE_FEATURES_OFF"
              glib:nick="all-type-features-off">
      </member>
      <member name="required_ligatures_on"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_REQUIRED_LIGATURES_ON"
              glib:nick="required-ligatures-on">
      </member>
      <member name="required_ligatures_off"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_REQUIRED_LIGATURES_OFF"
              glib:nick="required-ligatures-off">
      </member>
      <member name="common_ligatures_on"
              value="2"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_COMMON_LIGATURES_ON"
              glib:nick="common-ligatures-on">
      </member>
      <member name="common_ligatures_off"
              value="3"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_COMMON_LIGATURES_OFF"
              glib:nick="common-ligatures-off">
      </member>
      <member name="rare_ligatures_on"
              value="4"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_RARE_LIGATURES_ON"
              glib:nick="rare-ligatures-on">
      </member>
      <member name="rare_ligatures_off"
              value="5"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_RARE_LIGATURES_OFF"
              glib:nick="rare-ligatures-off">
      </member>
      <member name="logos_on"
              value="6"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_LOGOS_ON"
              glib:nick="logos-on">
      </member>
      <member name="logos_off"
              value="7"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_LOGOS_OFF"
              glib:nick="logos-off">
      </member>
      <member name="rebus_pictures_on"
              value="8"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_REBUS_PICTURES_ON"
              glib:nick="rebus-pictures-on">
      </member>
      <member name="rebus_pictures_off"
              value="9"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_REBUS_PICTURES_OFF"
              glib:nick="rebus-pictures-off">
      </member>
      <member name="diphthong_ligatures_on"
              value="10"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_DIPHTHONG_LIGATURES_ON"
              glib:nick="diphthong-ligatures-on">
      </member>
      <member name="diphthong_ligatures_off"
              value="11"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_DIPHTHONG_LIGATURES_OFF"
              glib:nick="diphthong-ligatures-off">
      </member>
      <member name="squared_ligatures_on"
              value="12"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_SQUARED_LIGATURES_ON"
              glib:nick="squared-ligatures-on">
      </member>
      <member name="squared_ligatures_off"
              value="13"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_SQUARED_LIGATURES_OFF"
              glib:nick="squared-ligatures-off">
      </member>
      <member name="abbrev_squared_ligatures_on"
              value="14"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_ABBREV_SQUARED_LIGATURES_ON"
              glib:nick="abbrev-squared-ligatures-on">
      </member>
      <member name="abbrev_squared_ligatures_off"
              value="15"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_ABBREV_SQUARED_LIGATURES_OFF"
              glib:nick="abbrev-squared-ligatures-off">
      </member>
      <member name="symbol_ligatures_on"
              value="16"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_SYMBOL_LIGATURES_ON"
              glib:nick="symbol-ligatures-on">
      </member>
      <member name="symbol_ligatures_off"
              value="17"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_SYMBOL_LIGATURES_OFF"
              glib:nick="symbol-ligatures-off">
      </member>
      <member name="contextual_ligatures_on"
              value="18"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_CONTEXTUAL_LIGATURES_ON"
              glib:nick="contextual-ligatures-on">
      </member>
      <member name="contextual_ligatures_off"
              value="19"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_CONTEXTUAL_LIGATURES_OFF"
              glib:nick="contextual-ligatures-off">
      </member>
      <member name="historical_ligatures_on"
              value="20"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_HISTORICAL_LIGATURES_ON"
              glib:nick="historical-ligatures-on">
      </member>
      <member name="historical_ligatures_off"
              value="21"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_HISTORICAL_LIGATURES_OFF"
              glib:nick="historical-ligatures-off">
      </member>
      <member name="unconnected"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_UNCONNECTED"
              glib:nick="unconnected">
      </member>
      <member name="partially_connected"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_PARTIALLY_CONNECTED"
              glib:nick="partially-connected">
      </member>
      <member name="cursive"
              value="2"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_CURSIVE"
              glib:nick="cursive">
      </member>
      <member name="upper_and_lower_case"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_UPPER_AND_LOWER_CASE"
              glib:nick="upper-and-lower-case">
      </member>
      <member name="all_caps"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_ALL_CAPS"
              glib:nick="all-caps">
      </member>
      <member name="all_lower_case"
              value="2"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_ALL_LOWER_CASE"
              glib:nick="all-lower-case">
      </member>
      <member name="small_caps"
              value="3"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_SMALL_CAPS"
              glib:nick="small-caps">
      </member>
      <member name="initial_caps"
              value="4"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_INITIAL_CAPS"
              glib:nick="initial-caps">
      </member>
      <member name="initial_caps_and_small_caps"
              value="5"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_INITIAL_CAPS_AND_SMALL_CAPS"
              glib:nick="initial-caps-and-small-caps">
      </member>
      <member name="substitute_vertical_forms_on"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_SUBSTITUTE_VERTICAL_FORMS_ON"
              glib:nick="substitute-vertical-forms-on">
      </member>
      <member name="substitute_vertical_forms_off"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_SUBSTITUTE_VERTICAL_FORMS_OFF"
              glib:nick="substitute-vertical-forms-off">
      </member>
      <member name="linguistic_rearrangement_on"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_LINGUISTIC_REARRANGEMENT_ON"
              glib:nick="linguistic-rearrangement-on">
      </member>
      <member name="linguistic_rearrangement_off"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_LINGUISTIC_REARRANGEMENT_OFF"
              glib:nick="linguistic-rearrangement-off">
      </member>
      <member name="monospaced_numbers"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_MONOSPACED_NUMBERS"
              glib:nick="monospaced-numbers">
      </member>
      <member name="proportional_numbers"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_PROPORTIONAL_NUMBERS"
              glib:nick="proportional-numbers">
      </member>
      <member name="third_width_numbers"
              value="2"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_THIRD_WIDTH_NUMBERS"
              glib:nick="third-width-numbers">
      </member>
      <member name="quarter_width_numbers"
              value="3"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_QUARTER_WIDTH_NUMBERS"
              glib:nick="quarter-width-numbers">
      </member>
      <member name="word_initial_swashes_on"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_WORD_INITIAL_SWASHES_ON"
              glib:nick="word-initial-swashes-on">
      </member>
      <member name="word_initial_swashes_off"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_WORD_INITIAL_SWASHES_OFF"
              glib:nick="word-initial-swashes-off">
      </member>
      <member name="word_final_swashes_on"
              value="2"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_WORD_FINAL_SWASHES_ON"
              glib:nick="word-final-swashes-on">
      </member>
      <member name="word_final_swashes_off"
              value="3"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_WORD_FINAL_SWASHES_OFF"
              glib:nick="word-final-swashes-off">
      </member>
      <member name="line_initial_swashes_on"
              value="4"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_LINE_INITIAL_SWASHES_ON"
              glib:nick="line-initial-swashes-on">
      </member>
      <member name="line_initial_swashes_off"
              value="5"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_LINE_INITIAL_SWASHES_OFF"
              glib:nick="line-initial-swashes-off">
      </member>
      <member name="line_final_swashes_on"
              value="6"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_LINE_FINAL_SWASHES_ON"
              glib:nick="line-final-swashes-on">
      </member>
      <member name="line_final_swashes_off"
              value="7"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_LINE_FINAL_SWASHES_OFF"
              glib:nick="line-final-swashes-off">
      </member>
      <member name="non_final_swashes_on"
              value="8"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_NON_FINAL_SWASHES_ON"
              glib:nick="non-final-swashes-on">
      </member>
      <member name="non_final_swashes_off"
              value="9"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_NON_FINAL_SWASHES_OFF"
              glib:nick="non-final-swashes-off">
      </member>
      <member name="show_diacritics"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_SHOW_DIACRITICS"
              glib:nick="show-diacritics">
      </member>
      <member name="hide_diacritics"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_HIDE_DIACRITICS"
              glib:nick="hide-diacritics">
      </member>
      <member name="decompose_diacritics"
              value="2"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_DECOMPOSE_DIACRITICS"
              glib:nick="decompose-diacritics">
      </member>
      <member name="normal_position"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_NORMAL_POSITION"
              glib:nick="normal-position">
      </member>
      <member name="superiors"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_SUPERIORS"
              glib:nick="superiors">
      </member>
      <member name="inferiors"
              value="2"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_INFERIORS"
              glib:nick="inferiors">
      </member>
      <member name="ordinals"
              value="3"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_ORDINALS"
              glib:nick="ordinals">
      </member>
      <member name="scientific_inferiors"
              value="4"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_SCIENTIFIC_INFERIORS"
              glib:nick="scientific-inferiors">
      </member>
      <member name="no_fractions"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_FRACTIONS"
              glib:nick="no-fractions">
      </member>
      <member name="vertical_fractions"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_VERTICAL_FRACTIONS"
              glib:nick="vertical-fractions">
      </member>
      <member name="diagonal_fractions"
              value="2"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_DIAGONAL_FRACTIONS"
              glib:nick="diagonal-fractions">
      </member>
      <member name="prevent_overlap_on"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_PREVENT_OVERLAP_ON"
              glib:nick="prevent-overlap-on">
      </member>
      <member name="prevent_overlap_off"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_PREVENT_OVERLAP_OFF"
              glib:nick="prevent-overlap-off">
      </member>
      <member name="hyphens_to_em_dash_on"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_HYPHENS_TO_EM_DASH_ON"
              glib:nick="hyphens-to-em-dash-on">
      </member>
      <member name="hyphens_to_em_dash_off"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_HYPHENS_TO_EM_DASH_OFF"
              glib:nick="hyphens-to-em-dash-off">
      </member>
      <member name="hyphen_to_en_dash_on"
              value="2"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_HYPHEN_TO_EN_DASH_ON"
              glib:nick="hyphen-to-en-dash-on">
      </member>
      <member name="hyphen_to_en_dash_off"
              value="3"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_HYPHEN_TO_EN_DASH_OFF"
              glib:nick="hyphen-to-en-dash-off">
      </member>
      <member name="slashed_zero_on"
              value="4"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_SLASHED_ZERO_ON"
              glib:nick="slashed-zero-on">
      </member>
      <member name="slashed_zero_off"
              value="5"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_SLASHED_ZERO_OFF"
              glib:nick="slashed-zero-off">
      </member>
      <member name="form_interrobang_on"
              value="6"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_FORM_INTERROBANG_ON"
              glib:nick="form-interrobang-on">
      </member>
      <member name="form_interrobang_off"
              value="7"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_FORM_INTERROBANG_OFF"
              glib:nick="form-interrobang-off">
      </member>
      <member name="smart_quotes_on"
              value="8"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_SMART_QUOTES_ON"
              glib:nick="smart-quotes-on">
      </member>
      <member name="smart_quotes_off"
              value="9"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_SMART_QUOTES_OFF"
              glib:nick="smart-quotes-off">
      </member>
      <member name="periods_to_ellipsis_on"
              value="10"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_PERIODS_TO_ELLIPSIS_ON"
              glib:nick="periods-to-ellipsis-on">
      </member>
      <member name="periods_to_ellipsis_off"
              value="11"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_PERIODS_TO_ELLIPSIS_OFF"
              glib:nick="periods-to-ellipsis-off">
      </member>
      <member name="hyphen_to_minus_on"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_HYPHEN_TO_MINUS_ON"
              glib:nick="hyphen-to-minus-on">
      </member>
      <member name="hyphen_to_minus_off"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_HYPHEN_TO_MINUS_OFF"
              glib:nick="hyphen-to-minus-off">
      </member>
      <member name="asterisk_to_multiply_on"
              value="2"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_ASTERISK_TO_MULTIPLY_ON"
              glib:nick="asterisk-to-multiply-on">
      </member>
      <member name="asterisk_to_multiply_off"
              value="3"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_ASTERISK_TO_MULTIPLY_OFF"
              glib:nick="asterisk-to-multiply-off">
      </member>
      <member name="slash_to_divide_on"
              value="4"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_SLASH_TO_DIVIDE_ON"
              glib:nick="slash-to-divide-on">
      </member>
      <member name="slash_to_divide_off"
              value="5"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_SLASH_TO_DIVIDE_OFF"
              glib:nick="slash-to-divide-off">
      </member>
      <member name="inequality_ligatures_on"
              value="6"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_INEQUALITY_LIGATURES_ON"
              glib:nick="inequality-ligatures-on">
      </member>
      <member name="inequality_ligatures_off"
              value="7"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_INEQUALITY_LIGATURES_OFF"
              glib:nick="inequality-ligatures-off">
      </member>
      <member name="exponents_on"
              value="8"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_EXPONENTS_ON"
              glib:nick="exponents-on">
      </member>
      <member name="exponents_off"
              value="9"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_EXPONENTS_OFF"
              glib:nick="exponents-off">
      </member>
      <member name="mathematical_greek_on"
              value="10"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_MATHEMATICAL_GREEK_ON"
              glib:nick="mathematical-greek-on">
      </member>
      <member name="mathematical_greek_off"
              value="11"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_MATHEMATICAL_GREEK_OFF"
              glib:nick="mathematical-greek-off">
      </member>
      <member name="no_ornaments"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_ORNAMENTS"
              glib:nick="no-ornaments">
      </member>
      <member name="dingbats"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_DINGBATS"
              glib:nick="dingbats">
      </member>
      <member name="pi_characters"
              value="2"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_PI_CHARACTERS"
              glib:nick="pi-characters">
      </member>
      <member name="fleurons"
              value="3"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_FLEURONS"
              glib:nick="fleurons">
      </member>
      <member name="decorative_borders"
              value="4"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_DECORATIVE_BORDERS"
              glib:nick="decorative-borders">
      </member>
      <member name="international_symbols"
              value="5"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_INTERNATIONAL_SYMBOLS"
              glib:nick="international-symbols">
      </member>
      <member name="math_symbols"
              value="6"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_MATH_SYMBOLS"
              glib:nick="math-symbols">
      </member>
      <member name="no_alternates"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_ALTERNATES"
              glib:nick="no-alternates">
      </member>
      <member name="design_level1"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_DESIGN_LEVEL1"
              glib:nick="design-level1">
      </member>
      <member name="design_level2"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_DESIGN_LEVEL2"
              glib:nick="design-level2">
      </member>
      <member name="design_level3"
              value="2"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_DESIGN_LEVEL3"
              glib:nick="design-level3">
      </member>
      <member name="design_level4"
              value="3"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_DESIGN_LEVEL4"
              glib:nick="design-level4">
      </member>
      <member name="design_level5"
              value="4"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_DESIGN_LEVEL5"
              glib:nick="design-level5">
      </member>
      <member name="no_style_options"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_STYLE_OPTIONS"
              glib:nick="no-style-options">
      </member>
      <member name="display_text"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_DISPLAY_TEXT"
              glib:nick="display-text">
      </member>
      <member name="engraved_text"
              value="2"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_ENGRAVED_TEXT"
              glib:nick="engraved-text">
      </member>
      <member name="illuminated_caps"
              value="3"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_ILLUMINATED_CAPS"
              glib:nick="illuminated-caps">
      </member>
      <member name="titling_caps"
              value="4"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_TITLING_CAPS"
              glib:nick="titling-caps">
      </member>
      <member name="tall_caps"
              value="5"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_TALL_CAPS"
              glib:nick="tall-caps">
      </member>
      <member name="traditional_characters"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_TRADITIONAL_CHARACTERS"
              glib:nick="traditional-characters">
      </member>
      <member name="simplified_characters"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_SIMPLIFIED_CHARACTERS"
              glib:nick="simplified-characters">
      </member>
      <member name="jis1978_characters"
              value="2"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_JIS1978_CHARACTERS"
              glib:nick="jis1978-characters">
      </member>
      <member name="jis1983_characters"
              value="3"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_JIS1983_CHARACTERS"
              glib:nick="jis1983-characters">
      </member>
      <member name="jis1990_characters"
              value="4"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_JIS1990_CHARACTERS"
              glib:nick="jis1990-characters">
      </member>
      <member name="traditional_alt_one"
              value="5"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_TRADITIONAL_ALT_ONE"
              glib:nick="traditional-alt-one">
      </member>
      <member name="traditional_alt_two"
              value="6"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_TRADITIONAL_ALT_TWO"
              glib:nick="traditional-alt-two">
      </member>
      <member name="traditional_alt_three"
              value="7"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_TRADITIONAL_ALT_THREE"
              glib:nick="traditional-alt-three">
      </member>
      <member name="traditional_alt_four"
              value="8"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_TRADITIONAL_ALT_FOUR"
              glib:nick="traditional-alt-four">
      </member>
      <member name="traditional_alt_five"
              value="9"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_TRADITIONAL_ALT_FIVE"
              glib:nick="traditional-alt-five">
      </member>
      <member name="expert_characters"
              value="10"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_EXPERT_CHARACTERS"
              glib:nick="expert-characters">
      </member>
      <member name="jis2004_characters"
              value="11"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_JIS2004_CHARACTERS"
              glib:nick="jis2004-characters">
      </member>
      <member name="hojo_characters"
              value="12"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_HOJO_CHARACTERS"
              glib:nick="hojo-characters">
      </member>
      <member name="nlccharacters"
              value="13"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_NLCCHARACTERS"
              glib:nick="nlccharacters">
      </member>
      <member name="traditional_names_characters"
              value="14"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_TRADITIONAL_NAMES_CHARACTERS"
              glib:nick="traditional-names-characters">
      </member>
      <member name="lower_case_numbers"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_LOWER_CASE_NUMBERS"
              glib:nick="lower-case-numbers">
      </member>
      <member name="upper_case_numbers"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_UPPER_CASE_NUMBERS"
              glib:nick="upper-case-numbers">
      </member>
      <member name="proportional_text"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_PROPORTIONAL_TEXT"
              glib:nick="proportional-text">
      </member>
      <member name="monospaced_text"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_MONOSPACED_TEXT"
              glib:nick="monospaced-text">
      </member>
      <member name="half_width_text"
              value="2"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_HALF_WIDTH_TEXT"
              glib:nick="half-width-text">
      </member>
      <member name="third_width_text"
              value="3"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_THIRD_WIDTH_TEXT"
              glib:nick="third-width-text">
      </member>
      <member name="quarter_width_text"
              value="4"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_QUARTER_WIDTH_TEXT"
              glib:nick="quarter-width-text">
      </member>
      <member name="alt_proportional_text"
              value="5"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_ALT_PROPORTIONAL_TEXT"
              glib:nick="alt-proportional-text">
      </member>
      <member name="alt_half_width_text"
              value="6"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_ALT_HALF_WIDTH_TEXT"
              glib:nick="alt-half-width-text">
      </member>
      <member name="no_transliteration"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_TRANSLITERATION"
              glib:nick="no-transliteration">
      </member>
      <member name="hanja_to_hangul"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_HANJA_TO_HANGUL"
              glib:nick="hanja-to-hangul">
      </member>
      <member name="hiragana_to_katakana"
              value="2"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_HIRAGANA_TO_KATAKANA"
              glib:nick="hiragana-to-katakana">
      </member>
      <member name="katakana_to_hiragana"
              value="3"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_KATAKANA_TO_HIRAGANA"
              glib:nick="katakana-to-hiragana">
      </member>
      <member name="kana_to_romanization"
              value="4"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_KANA_TO_ROMANIZATION"
              glib:nick="kana-to-romanization">
      </member>
      <member name="romanization_to_hiragana"
              value="5"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_ROMANIZATION_TO_HIRAGANA"
              glib:nick="romanization-to-hiragana">
      </member>
      <member name="romanization_to_katakana"
              value="6"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_ROMANIZATION_TO_KATAKANA"
              glib:nick="romanization-to-katakana">
      </member>
      <member name="hanja_to_hangul_alt_one"
              value="7"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_HANJA_TO_HANGUL_ALT_ONE"
              glib:nick="hanja-to-hangul-alt-one">
      </member>
      <member name="hanja_to_hangul_alt_two"
              value="8"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_HANJA_TO_HANGUL_ALT_TWO"
              glib:nick="hanja-to-hangul-alt-two">
      </member>
      <member name="hanja_to_hangul_alt_three"
              value="9"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_HANJA_TO_HANGUL_ALT_THREE"
              glib:nick="hanja-to-hangul-alt-three">
      </member>
      <member name="no_annotation"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_ANNOTATION"
              glib:nick="no-annotation">
      </member>
      <member name="box_annotation"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_BOX_ANNOTATION"
              glib:nick="box-annotation">
      </member>
      <member name="rounded_box_annotation"
              value="2"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_ROUNDED_BOX_ANNOTATION"
              glib:nick="rounded-box-annotation">
      </member>
      <member name="circle_annotation"
              value="3"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_CIRCLE_ANNOTATION"
              glib:nick="circle-annotation">
      </member>
      <member name="inverted_circle_annotation"
              value="4"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_INVERTED_CIRCLE_ANNOTATION"
              glib:nick="inverted-circle-annotation">
      </member>
      <member name="parenthesis_annotation"
              value="5"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_PARENTHESIS_ANNOTATION"
              glib:nick="parenthesis-annotation">
      </member>
      <member name="period_annotation"
              value="6"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_PERIOD_ANNOTATION"
              glib:nick="period-annotation">
      </member>
      <member name="roman_numeral_annotation"
              value="7"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_ROMAN_NUMERAL_ANNOTATION"
              glib:nick="roman-numeral-annotation">
      </member>
      <member name="diamond_annotation"
              value="8"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_DIAMOND_ANNOTATION"
              glib:nick="diamond-annotation">
      </member>
      <member name="inverted_box_annotation"
              value="9"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_INVERTED_BOX_ANNOTATION"
              glib:nick="inverted-box-annotation">
      </member>
      <member name="inverted_rounded_box_annotation"
              value="10"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_INVERTED_ROUNDED_BOX_ANNOTATION"
              glib:nick="inverted-rounded-box-annotation">
      </member>
      <member name="full_width_kana"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_FULL_WIDTH_KANA"
              glib:nick="full-width-kana">
      </member>
      <member name="proportional_kana"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_PROPORTIONAL_KANA"
              glib:nick="proportional-kana">
      </member>
      <member name="full_width_ideographs"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_FULL_WIDTH_IDEOGRAPHS"
              glib:nick="full-width-ideographs">
      </member>
      <member name="proportional_ideographs"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_PROPORTIONAL_IDEOGRAPHS"
              glib:nick="proportional-ideographs">
      </member>
      <member name="half_width_ideographs"
              value="2"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_HALF_WIDTH_IDEOGRAPHS"
              glib:nick="half-width-ideographs">
      </member>
      <member name="canonical_composition_on"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_CANONICAL_COMPOSITION_ON"
              glib:nick="canonical-composition-on">
      </member>
      <member name="canonical_composition_off"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_CANONICAL_COMPOSITION_OFF"
              glib:nick="canonical-composition-off">
      </member>
      <member name="compatibility_composition_on"
              value="2"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_COMPATIBILITY_COMPOSITION_ON"
              glib:nick="compatibility-composition-on">
      </member>
      <member name="compatibility_composition_off"
              value="3"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_COMPATIBILITY_COMPOSITION_OFF"
              glib:nick="compatibility-composition-off">
      </member>
      <member name="transcoding_composition_on"
              value="4"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_TRANSCODING_COMPOSITION_ON"
              glib:nick="transcoding-composition-on">
      </member>
      <member name="transcoding_composition_off"
              value="5"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_TRANSCODING_COMPOSITION_OFF"
              glib:nick="transcoding-composition-off">
      </member>
      <member name="no_ruby_kana"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_RUBY_KANA"
              glib:nick="no-ruby-kana">
      </member>
      <member name="ruby_kana"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_RUBY_KANA"
              glib:nick="ruby-kana">
      </member>
      <member name="ruby_kana_on"
              value="2"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_RUBY_KANA_ON"
              glib:nick="ruby-kana-on">
      </member>
      <member name="ruby_kana_off"
              value="3"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_RUBY_KANA_OFF"
              glib:nick="ruby-kana-off">
      </member>
      <member name="no_cjk_symbol_alternatives"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_CJK_SYMBOL_ALTERNATIVES"
              glib:nick="no-cjk-symbol-alternatives">
      </member>
      <member name="cjk_symbol_alt_one"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_SYMBOL_ALT_ONE"
              glib:nick="cjk-symbol-alt-one">
      </member>
      <member name="cjk_symbol_alt_two"
              value="2"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_SYMBOL_ALT_TWO"
              glib:nick="cjk-symbol-alt-two">
      </member>
      <member name="cjk_symbol_alt_three"
              value="3"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_SYMBOL_ALT_THREE"
              glib:nick="cjk-symbol-alt-three">
      </member>
      <member name="cjk_symbol_alt_four"
              value="4"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_SYMBOL_ALT_FOUR"
              glib:nick="cjk-symbol-alt-four">
      </member>
      <member name="cjk_symbol_alt_five"
              value="5"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_SYMBOL_ALT_FIVE"
              glib:nick="cjk-symbol-alt-five">
      </member>
      <member name="no_ideographic_alternatives"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_IDEOGRAPHIC_ALTERNATIVES"
              glib:nick="no-ideographic-alternatives">
      </member>
      <member name="ideographic_alt_one"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_IDEOGRAPHIC_ALT_ONE"
              glib:nick="ideographic-alt-one">
      </member>
      <member name="ideographic_alt_two"
              value="2"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_IDEOGRAPHIC_ALT_TWO"
              glib:nick="ideographic-alt-two">
      </member>
      <member name="ideographic_alt_three"
              value="3"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_IDEOGRAPHIC_ALT_THREE"
              glib:nick="ideographic-alt-three">
      </member>
      <member name="ideographic_alt_four"
              value="4"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_IDEOGRAPHIC_ALT_FOUR"
              glib:nick="ideographic-alt-four">
      </member>
      <member name="ideographic_alt_five"
              value="5"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_IDEOGRAPHIC_ALT_FIVE"
              glib:nick="ideographic-alt-five">
      </member>
      <member name="cjk_vertical_roman_centered"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_VERTICAL_ROMAN_CENTERED"
              glib:nick="cjk-vertical-roman-centered">
      </member>
      <member name="cjk_vertical_roman_hbaseline"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_VERTICAL_ROMAN_HBASELINE"
              glib:nick="cjk-vertical-roman-hbaseline">
      </member>
      <member name="no_cjk_italic_roman"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_CJK_ITALIC_ROMAN"
              glib:nick="no-cjk-italic-roman">
      </member>
      <member name="cjk_italic_roman"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_ITALIC_ROMAN"
              glib:nick="cjk-italic-roman">
      </member>
      <member name="cjk_italic_roman_on"
              value="2"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_ITALIC_ROMAN_ON"
              glib:nick="cjk-italic-roman-on">
      </member>
      <member name="cjk_italic_roman_off"
              value="3"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_ITALIC_ROMAN_OFF"
              glib:nick="cjk-italic-roman-off">
      </member>
      <member name="case_sensitive_layout_on"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_CASE_SENSITIVE_LAYOUT_ON"
              glib:nick="case-sensitive-layout-on">
      </member>
      <member name="case_sensitive_layout_off"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_CASE_SENSITIVE_LAYOUT_OFF"
              glib:nick="case-sensitive-layout-off">
      </member>
      <member name="case_sensitive_spacing_on"
              value="2"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_CASE_SENSITIVE_SPACING_ON"
              glib:nick="case-sensitive-spacing-on">
      </member>
      <member name="case_sensitive_spacing_off"
              value="3"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_CASE_SENSITIVE_SPACING_OFF"
              glib:nick="case-sensitive-spacing-off">
      </member>
      <member name="alternate_horiz_kana_on"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_ALTERNATE_HORIZ_KANA_ON"
              glib:nick="alternate-horiz-kana-on">
      </member>
      <member name="alternate_horiz_kana_off"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_ALTERNATE_HORIZ_KANA_OFF"
              glib:nick="alternate-horiz-kana-off">
      </member>
      <member name="alternate_vert_kana_on"
              value="2"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_ALTERNATE_VERT_KANA_ON"
              glib:nick="alternate-vert-kana-on">
      </member>
      <member name="alternate_vert_kana_off"
              value="3"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_ALTERNATE_VERT_KANA_OFF"
              glib:nick="alternate-vert-kana-off">
      </member>
      <member name="no_stylistic_alternates"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_STYLISTIC_ALTERNATES"
              glib:nick="no-stylistic-alternates">
      </member>
      <member name="stylistic_alt_one_on"
              value="2"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_ONE_ON"
              glib:nick="stylistic-alt-one-on">
      </member>
      <member name="stylistic_alt_one_off"
              value="3"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_ONE_OFF"
              glib:nick="stylistic-alt-one-off">
      </member>
      <member name="stylistic_alt_two_on"
              value="4"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TWO_ON"
              glib:nick="stylistic-alt-two-on">
      </member>
      <member name="stylistic_alt_two_off"
              value="5"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TWO_OFF"
              glib:nick="stylistic-alt-two-off">
      </member>
      <member name="stylistic_alt_three_on"
              value="6"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_THREE_ON"
              glib:nick="stylistic-alt-three-on">
      </member>
      <member name="stylistic_alt_three_off"
              value="7"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_THREE_OFF"
              glib:nick="stylistic-alt-three-off">
      </member>
      <member name="stylistic_alt_four_on"
              value="8"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FOUR_ON"
              glib:nick="stylistic-alt-four-on">
      </member>
      <member name="stylistic_alt_four_off"
              value="9"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FOUR_OFF"
              glib:nick="stylistic-alt-four-off">
      </member>
      <member name="stylistic_alt_five_on"
              value="10"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FIVE_ON"
              glib:nick="stylistic-alt-five-on">
      </member>
      <member name="stylistic_alt_five_off"
              value="11"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FIVE_OFF"
              glib:nick="stylistic-alt-five-off">
      </member>
      <member name="stylistic_alt_six_on"
              value="12"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SIX_ON"
              glib:nick="stylistic-alt-six-on">
      </member>
      <member name="stylistic_alt_six_off"
              value="13"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SIX_OFF"
              glib:nick="stylistic-alt-six-off">
      </member>
      <member name="stylistic_alt_seven_on"
              value="14"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SEVEN_ON"
              glib:nick="stylistic-alt-seven-on">
      </member>
      <member name="stylistic_alt_seven_off"
              value="15"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SEVEN_OFF"
              glib:nick="stylistic-alt-seven-off">
      </member>
      <member name="stylistic_alt_eight_on"
              value="16"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_EIGHT_ON"
              glib:nick="stylistic-alt-eight-on">
      </member>
      <member name="stylistic_alt_eight_off"
              value="17"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_EIGHT_OFF"
              glib:nick="stylistic-alt-eight-off">
      </member>
      <member name="stylistic_alt_nine_on"
              value="18"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_NINE_ON"
              glib:nick="stylistic-alt-nine-on">
      </member>
      <member name="stylistic_alt_nine_off"
              value="19"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_NINE_OFF"
              glib:nick="stylistic-alt-nine-off">
      </member>
      <member name="stylistic_alt_ten_on"
              value="20"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TEN_ON"
              glib:nick="stylistic-alt-ten-on">
      </member>
      <member name="stylistic_alt_ten_off"
              value="21"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TEN_OFF"
              glib:nick="stylistic-alt-ten-off">
      </member>
      <member name="stylistic_alt_eleven_on"
              value="22"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_ELEVEN_ON"
              glib:nick="stylistic-alt-eleven-on">
      </member>
      <member name="stylistic_alt_eleven_off"
              value="23"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_ELEVEN_OFF"
              glib:nick="stylistic-alt-eleven-off">
      </member>
      <member name="stylistic_alt_twelve_on"
              value="24"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TWELVE_ON"
              glib:nick="stylistic-alt-twelve-on">
      </member>
      <member name="stylistic_alt_twelve_off"
              value="25"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TWELVE_OFF"
              glib:nick="stylistic-alt-twelve-off">
      </member>
      <member name="stylistic_alt_thirteen_on"
              value="26"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_THIRTEEN_ON"
              glib:nick="stylistic-alt-thirteen-on">
      </member>
      <member name="stylistic_alt_thirteen_off"
              value="27"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_THIRTEEN_OFF"
              glib:nick="stylistic-alt-thirteen-off">
      </member>
      <member name="stylistic_alt_fourteen_on"
              value="28"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FOURTEEN_ON"
              glib:nick="stylistic-alt-fourteen-on">
      </member>
      <member name="stylistic_alt_fourteen_off"
              value="29"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FOURTEEN_OFF"
              glib:nick="stylistic-alt-fourteen-off">
      </member>
      <member name="stylistic_alt_fifteen_on"
              value="30"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FIFTEEN_ON"
              glib:nick="stylistic-alt-fifteen-on">
      </member>
      <member name="stylistic_alt_fifteen_off"
              value="31"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FIFTEEN_OFF"
              glib:nick="stylistic-alt-fifteen-off">
      </member>
      <member name="stylistic_alt_sixteen_on"
              value="32"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SIXTEEN_ON"
              glib:nick="stylistic-alt-sixteen-on">
      </member>
      <member name="stylistic_alt_sixteen_off"
              value="33"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SIXTEEN_OFF"
              glib:nick="stylistic-alt-sixteen-off">
      </member>
      <member name="stylistic_alt_seventeen_on"
              value="34"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SEVENTEEN_ON"
              glib:nick="stylistic-alt-seventeen-on">
      </member>
      <member name="stylistic_alt_seventeen_off"
              value="35"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SEVENTEEN_OFF"
              glib:nick="stylistic-alt-seventeen-off">
      </member>
      <member name="stylistic_alt_eighteen_on"
              value="36"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_EIGHTEEN_ON"
              glib:nick="stylistic-alt-eighteen-on">
      </member>
      <member name="stylistic_alt_eighteen_off"
              value="37"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_EIGHTEEN_OFF"
              glib:nick="stylistic-alt-eighteen-off">
      </member>
      <member name="stylistic_alt_nineteen_on"
              value="38"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_NINETEEN_ON"
              glib:nick="stylistic-alt-nineteen-on">
      </member>
      <member name="stylistic_alt_nineteen_off"
              value="39"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_NINETEEN_OFF"
              glib:nick="stylistic-alt-nineteen-off">
      </member>
      <member name="stylistic_alt_twenty_on"
              value="40"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TWENTY_ON"
              glib:nick="stylistic-alt-twenty-on">
      </member>
      <member name="stylistic_alt_twenty_off"
              value="41"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TWENTY_OFF"
              glib:nick="stylistic-alt-twenty-off">
      </member>
      <member name="contextual_alternates_on"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_CONTEXTUAL_ALTERNATES_ON"
              glib:nick="contextual-alternates-on">
      </member>
      <member name="contextual_alternates_off"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_CONTEXTUAL_ALTERNATES_OFF"
              glib:nick="contextual-alternates-off">
      </member>
      <member name="swash_alternates_on"
              value="2"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_SWASH_ALTERNATES_ON"
              glib:nick="swash-alternates-on">
      </member>
      <member name="swash_alternates_off"
              value="3"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_SWASH_ALTERNATES_OFF"
              glib:nick="swash-alternates-off">
      </member>
      <member name="contextual_swash_alternates_on"
              value="4"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_CONTEXTUAL_SWASH_ALTERNATES_ON"
              glib:nick="contextual-swash-alternates-on">
      </member>
      <member name="contextual_swash_alternates_off"
              value="5"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_CONTEXTUAL_SWASH_ALTERNATES_OFF"
              glib:nick="contextual-swash-alternates-off">
      </member>
      <member name="default_lower_case"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_DEFAULT_LOWER_CASE"
              glib:nick="default-lower-case">
      </member>
      <member name="lower_case_small_caps"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_LOWER_CASE_SMALL_CAPS"
              glib:nick="lower-case-small-caps">
      </member>
      <member name="lower_case_petite_caps"
              value="2"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_LOWER_CASE_PETITE_CAPS"
              glib:nick="lower-case-petite-caps">
      </member>
      <member name="default_upper_case"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_DEFAULT_UPPER_CASE"
              glib:nick="default-upper-case">
      </member>
      <member name="upper_case_small_caps"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_UPPER_CASE_SMALL_CAPS"
              glib:nick="upper-case-small-caps">
      </member>
      <member name="upper_case_petite_caps"
              value="2"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_UPPER_CASE_PETITE_CAPS"
              glib:nick="upper-case-petite-caps">
      </member>
      <member name="half_width_cjk_roman"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_HALF_WIDTH_CJK_ROMAN"
              glib:nick="half-width-cjk-roman">
      </member>
      <member name="proportional_cjk_roman"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_PROPORTIONAL_CJK_ROMAN"
              glib:nick="proportional-cjk-roman">
      </member>
      <member name="default_cjk_roman"
              value="2"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_DEFAULT_CJK_ROMAN"
              glib:nick="default-cjk-roman">
      </member>
      <member name="full_width_cjk_roman"
              value="3"
              c:identifier="HB_AAT_LAYOUT_FEATURE_SELECTOR_FULL_WIDTH_CJK_ROMAN"
              glib:nick="full-width-cjk-roman">
      </member>
    </enumeration>
    <enumeration name="aat_layout_feature_type_t"
                 version="2.2.0"
                 glib:type-name="hb_aat_layout_feature_type_t"
                 glib:get-type="hb_gobject_aat_layout_feature_type_get_type"
                 c:type="hb_aat_layout_feature_type_t">
      <member name="invalid"
              value="65535"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_INVALID"
              glib:nick="invalid">
      </member>
      <member name="all_typographic"
              value="0"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_ALL_TYPOGRAPHIC"
              glib:nick="all-typographic">
      </member>
      <member name="ligatures"
              value="1"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES"
              glib:nick="ligatures">
      </member>
      <member name="curisve_connection"
              value="2"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_CURISVE_CONNECTION"
              glib:nick="curisve-connection">
      </member>
      <member name="letter_case"
              value="3"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_LETTER_CASE"
              glib:nick="letter-case">
      </member>
      <member name="vertical_substitution"
              value="4"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_SUBSTITUTION"
              glib:nick="vertical-substitution">
      </member>
      <member name="linguistic_rearrangement"
              value="5"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_LINGUISTIC_REARRANGEMENT"
              glib:nick="linguistic-rearrangement">
      </member>
      <member name="number_spacing"
              value="6"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_NUMBER_SPACING"
              glib:nick="number-spacing">
      </member>
      <member name="smart_swash_type"
              value="8"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE"
              glib:nick="smart-swash-type">
      </member>
      <member name="diacritics_type"
              value="9"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_DIACRITICS_TYPE"
              glib:nick="diacritics-type">
      </member>
      <member name="vertical_position"
              value="10"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_POSITION"
              glib:nick="vertical-position">
      </member>
      <member name="fractions"
              value="11"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_FRACTIONS"
              glib:nick="fractions">
      </member>
      <member name="overlapping_characters_type"
              value="13"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_OVERLAPPING_CHARACTERS_TYPE"
              glib:nick="overlapping-characters-type">
      </member>
      <member name="typographic_extras"
              value="14"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS"
              glib:nick="typographic-extras">
      </member>
      <member name="mathematical_extras"
              value="15"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS"
              glib:nick="mathematical-extras">
      </member>
      <member name="ornament_sets_type"
              value="16"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_ORNAMENT_SETS_TYPE"
              glib:nick="ornament-sets-type">
      </member>
      <member name="character_alternatives"
              value="17"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_ALTERNATIVES"
              glib:nick="character-alternatives">
      </member>
      <member name="design_complexity_type"
              value="18"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_DESIGN_COMPLEXITY_TYPE"
              glib:nick="design-complexity-type">
      </member>
      <member name="style_options"
              value="19"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_STYLE_OPTIONS"
              glib:nick="style-options">
      </member>
      <member name="character_shape"
              value="20"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE"
              glib:nick="character-shape">
      </member>
      <member name="number_case"
              value="21"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_NUMBER_CASE"
              glib:nick="number-case">
      </member>
      <member name="text_spacing"
              value="22"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING"
              glib:nick="text-spacing">
      </member>
      <member name="transliteration"
              value="23"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION"
              glib:nick="transliteration">
      </member>
      <member name="annotation_type"
              value="24"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE"
              glib:nick="annotation-type">
      </member>
      <member name="kana_spacing_type"
              value="25"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_KANA_SPACING_TYPE"
              glib:nick="kana-spacing-type">
      </member>
      <member name="ideographic_spacing_type"
              value="26"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_SPACING_TYPE"
              glib:nick="ideographic-spacing-type">
      </member>
      <member name="unicode_decomposition_type"
              value="27"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_UNICODE_DECOMPOSITION_TYPE"
              glib:nick="unicode-decomposition-type">
      </member>
      <member name="ruby_kana"
              value="28"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_RUBY_KANA"
              glib:nick="ruby-kana">
      </member>
      <member name="cjk_symbol_alternatives_type"
              value="29"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_CJK_SYMBOL_ALTERNATIVES_TYPE"
              glib:nick="cjk-symbol-alternatives-type">
      </member>
      <member name="ideographic_alternatives_type"
              value="30"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_ALTERNATIVES_TYPE"
              glib:nick="ideographic-alternatives-type">
      </member>
      <member name="cjk_vertical_roman_placement_type"
              value="31"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_CJK_VERTICAL_ROMAN_PLACEMENT_TYPE"
              glib:nick="cjk-vertical-roman-placement-type">
      </member>
      <member name="italic_cjk_roman"
              value="32"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_ITALIC_CJK_ROMAN"
              glib:nick="italic-cjk-roman">
      </member>
      <member name="case_sensitive_layout"
              value="33"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_CASE_SENSITIVE_LAYOUT"
              glib:nick="case-sensitive-layout">
      </member>
      <member name="alternate_kana"
              value="34"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_ALTERNATE_KANA"
              glib:nick="alternate-kana">
      </member>
      <member name="stylistic_alternatives"
              value="35"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES"
              glib:nick="stylistic-alternatives">
      </member>
      <member name="contextual_alternatives"
              value="36"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_CONTEXTUAL_ALTERNATIVES"
              glib:nick="contextual-alternatives">
      </member>
      <member name="lower_case"
              value="37"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_LOWER_CASE"
              glib:nick="lower-case">
      </member>
      <member name="upper_case"
              value="38"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_UPPER_CASE"
              glib:nick="upper-case">
      </member>
      <member name="language_tag_type"
              value="39"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_LANGUAGE_TAG_TYPE"
              glib:nick="language-tag-type">
      </member>
      <member name="cjk_roman_spacing_type"
              value="103"
              c:identifier="HB_AAT_LAYOUT_FEATURE_TYPE_CJK_ROMAN_SPACING_TYPE"
              glib:nick="cjk-roman-spacing-type">
      </member>
    </enumeration>
    <function name="blob_copy_writable_or_fail"
              c:identifier="hb_blob_copy_writable_or_fail"
              version="1.8.0">
      <doc xml:space="preserve"
           filename="hb-blob.cc"
           line="166">Makes a writable copy of @blob.</doc>
      <source-position filename="hb-blob.h" line="89"/>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve"
             filename="hb-blob.cc"
             line="172">New blob, or nullptr if allocation failed.</doc>
        <type name="blob_t" c:type="hb_blob_t*"/>
      </return-value>
      <parameters>
        <parameter name="blob" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-blob.cc"
               line="168">A blob.</doc>
          <type name="blob_t" c:type="hb_blob_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="blob_create"
              c:identifier="hb_blob_create"
              version="0.9.2"
              introspectable="0">
      <doc xml:space="preserve"
           filename="hb-blob.cc"
           line="68">Creates a new "blob" object wrapping @data.  The @mode parameter is used
to negotiate ownership and lifecycle of @data.</doc>
      <source-position filename="hb-blob.h" line="68"/>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve"
             filename="hb-blob.cc"
             line="79">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"
               filename="hb-blob.cc"
               line="70">Pointer to blob data.</doc>
          <type name="utf8" c:type="const char*"/>
        </parameter>
        <parameter name="length" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-blob.cc"
               line="71">Length of @data in bytes.</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="mode" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-blob.cc"
               line="72">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"
               filename="hb-blob.cc"
               line="73">Data parameter to pass to @destroy.</doc>
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-blob.cc"
               line="74">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_from_file"
              c:identifier="hb_blob_create_from_file"
              version="1.7.7">
      <source-position filename="hb-blob.h" line="75"/>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve"
             filename="hb-blob.cc"
             line="540">A hb_blob_t pointer with the content of the file</doc>
        <type name="blob_t" c:type="hb_blob_t*"/>
      </return-value>
      <parameters>
        <parameter name="file_name" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-blob.cc"
               line="538">font filename.</doc>
          <type name="utf8" c:type="const char*"/>
        </parameter>
      </parameters>
    </function>
    <function name="blob_create_sub_blob"
              c:identifier="hb_blob_create_sub_blob"
              version="0.9.2">
      <doc xml:space="preserve"
           filename="hb-blob.cc"
           line="125">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>
      <source-position filename="hb-blob.h" line="84"/>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve"
             filename="hb-blob.cc"
             line="139">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"
               filename="hb-blob.cc"
               line="127">Parent blob.</doc>
          <type name="blob_t" c:type="hb_blob_t*"/>
        </parameter>
        <parameter name="offset" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-blob.cc"
               line="128">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"
               filename="hb-blob.cc"
               line="129">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"
           filename="hb-blob.cc"
           line="226">Decreases 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>
      <source-position filename="hb-blob.h" line="98"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="blob" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-blob.cc"
               line="228">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">
      <source-position filename="hb-blob.h" line="124"/>
      <return-value transfer-ownership="none">
        <array length="1" zero-terminated="0" c:type="const char*">
          <type name="utf8" c:type="char"/>
        </array>
      </return-value>
      <parameters>
        <parameter name="blob" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-blob.cc"
               line="341">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"
           filename="hb-blob.cc"
           line="359">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>
      <source-position filename="hb-blob.h" line="127"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-blob.cc"
             line="370">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"
               filename="hb-blob.cc"
               line="361">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"
               filename="hb-blob.cc"
               line="362">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"
           filename="hb-blob.cc"
           line="191">Returns the singleton empty blob.

See TODO:link object types for more information.</doc>
      <source-position filename="hb-blob.h" line="92"/>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve"
             filename="hb-blob.cc"
             line="198">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">
      <source-position filename="hb-blob.h" line="121"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-blob.cc"
             line="329">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"
               filename="hb-blob.cc"
               line="325">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">
      <source-position filename="hb-blob.h" line="109"/>
      <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"
               filename="hb-blob.cc"
               line="272">a blob.</doc>
          <type name="blob_t" c:type="hb_blob_t*"/>
        </parameter>
        <parameter name="key" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-blob.cc"
               line="273">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">
      <source-position filename="hb-blob.h" line="117"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve" filename="hb-blob.cc" line="312">TODO</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="blob" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-blob.cc"
               line="308">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">
      <source-position filename="hb-blob.h" line="114"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="blob" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-blob.cc"
               line="291">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"
           filename="hb-blob.cc"
           line="208">Increases the reference count on @blob.

See TODO:link object types for more information.</doc>
      <source-position filename="hb-blob.h" line="95"/>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve" filename="hb-blob.cc" line="216">@blob.</doc>
        <type name="blob_t" c:type="hb_blob_t*"/>
      </return-value>
      <parameters>
        <parameter name="blob" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-blob.cc"
               line="210">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">
      <source-position filename="hb-blob.h" line="101"/>
      <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"
               filename="hb-blob.cc"
               line="250">a blob.</doc>
          <type name="blob_t" c:type="hb_blob_t*"/>
        </parameter>
        <parameter name="key" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-blob.cc"
               line="251">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"
               filename="hb-blob.cc"
               line="252">data to set.</doc>
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-blob.cc"
               line="253">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"
               filename="hb-blob.cc"
               line="254">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">
      <source-position filename="hb-blob.h" line="65"/>
    </record>
    <function name="buffer_add" c:identifier="hb_buffer_add" version="0.9.7">
      <doc xml:space="preserve"
           filename="hb-buffer.cc"
           line="1289">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>
      <source-position filename="hb-buffer.h" line="388"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1291">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"
               filename="hb-buffer.cc"
               line="1292">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"
               filename="hb-buffer.cc"
               line="1293">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"
           filename="hb-buffer.cc"
           line="1699">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>
      <source-position filename="hb-buffer.h" line="421"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1701">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"
               filename="hb-buffer.cc"
               line="1702">an array of Unicode code points to append.</doc>
          <array length="2" zero-terminated="0" c:type="const 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"
               filename="hb-buffer.cc"
               line="1703">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"
               filename="hb-buffer.cc"
               line="1704">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"
               filename="hb-buffer.cc"
               line="1705">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"
           filename="hb-buffer.cc"
           line="1672">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>
      <source-position filename="hb-buffer.h" line="414"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1674">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"
               filename="hb-buffer.cc"
               line="1675">an array of UTF-8
              characters to append.</doc>
          <array length="2" zero-terminated="0" c:type="const uint8_t*">
            <type name="guint8"/>
          </array>
        </parameter>
        <parameter name="text_length" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1677">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"
               filename="hb-buffer.cc"
               line="1678">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"
               filename="hb-buffer.cc"
               line="1679">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"
           filename="hb-buffer.cc"
           line="1620">See hb_buffer_add_codepoints().

Replaces invalid UTF-16 characters with the @buffer replacement code point,
see hb_buffer_set_replacement_codepoint().</doc>
      <source-position filename="hb-buffer.h" line="400"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1622">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"
               filename="hb-buffer.cc"
               line="1623">an array of UTF-16 characters to append.</doc>
          <array length="2" zero-terminated="0" c:type="const uint16_t*">
            <type name="guint16" c:type="uint16_t"/>
          </array>
        </parameter>
        <parameter name="text_length" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1624">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"
               filename="hb-buffer.cc"
               line="1625">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"
               filename="hb-buffer.cc"
               line="1626">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"
           filename="hb-buffer.cc"
           line="1646">See hb_buffer_add_codepoints().

Replaces invalid UTF-32 characters with the @buffer replacement code point,
see hb_buffer_set_replacement_codepoint().</doc>
      <source-position filename="hb-buffer.h" line="407"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1648">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"
               filename="hb-buffer.cc"
               line="1649">an array of UTF-32 characters to append.</doc>
          <array length="2" zero-terminated="0" c:type="const uint32_t*">
            <type name="guint32" c:type="uint32_t"/>
          </array>
        </parameter>
        <parameter name="text_length" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1650">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"
               filename="hb-buffer.cc"
               line="1651">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"
               filename="hb-buffer.cc"
               line="1652">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"
           filename="hb-buffer.cc"
           line="1593">See hb_buffer_add_codepoints().

Replaces invalid UTF-8 characters with the @buffer replacement code point,
see hb_buffer_set_replacement_codepoint().</doc>
      <source-position filename="hb-buffer.h" line="393"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1595">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"
               filename="hb-buffer.cc"
               line="1596">an array of UTF-8
              characters to append.</doc>
          <array length="2" zero-terminated="0" c:type="const char*">
            <type name="guint8"/>
          </array>
        </parameter>
        <parameter name="text_length" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1598">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"
               filename="hb-buffer.cc"
               line="1599">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"
               filename="hb-buffer.cc"
               line="1600">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"
           filename="hb-buffer.cc"
           line="1272">Check if allocating memory for the buffer succeeded.</doc>
      <source-position filename="hb-buffer.h" line="372"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-buffer.cc"
             line="1278">%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"
               filename="hb-buffer.cc"
               line="1274">an #hb_buffer_t.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_append"
              c:identifier="hb_buffer_append"
              version="1.5.0">
      <doc xml:space="preserve"
           filename="hb-buffer.cc"
           line="1734">Append (part of) contents of another buffer to this buffer.</doc>
      <source-position filename="hb-buffer.h" line="428"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1736">an #hb_buffer_t.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="source" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1737">source #hb_buffer_t.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="start" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1738">start index into source buffer to copy.  Use 0 to copy from start of buffer.</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="end" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1739">end index into source buffer to copy.  Use (unsigned int) -1 to copy to end of buffer.</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_clear_contents"
              c:identifier="hb_buffer_clear_contents"
              version="0.9.11">
      <doc xml:space="preserve"
           filename="hb-buffer.cc"
           line="1239">Similar to hb_buffer_reset(), but does not clear the Unicode functions and
the replacement code point.</doc>
      <source-position filename="hb-buffer.h" line="364"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1241">an #hb_buffer_t.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
      </parameters>
    </function>
    <enumeration name="buffer_cluster_level_t"
                 version="0.9.42"
                 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">
        <doc xml:space="preserve"
             filename="hb-buffer.h"
             line="312">Return cluster values grouped by graphemes into
  monotone order.</doc>
      </member>
      <member name="monotone_characters"
              value="1"
              c:identifier="HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS"
              glib:nick="monotone-characters">
        <doc xml:space="preserve"
             filename="hb-buffer.h"
             line="314">Return cluster values grouped into monotone order.</doc>
      </member>
      <member name="characters"
              value="2"
              c:identifier="HB_BUFFER_CLUSTER_LEVEL_CHARACTERS"
              glib:nick="characters">
        <doc xml:space="preserve"
             filename="hb-buffer.h"
             line="315">Don't group cluster values.</doc>
      </member>
      <member name="default"
              value="0"
              c:identifier="HB_BUFFER_CLUSTER_LEVEL_DEFAULT"
              glib:nick="default">
        <doc xml:space="preserve"
             filename="hb-buffer.h"
             line="316">Default cluster level,
  equal to @HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES.</doc>
      </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"
             filename="hb-buffer.h"
             line="204">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"
             filename="hb-buffer.h"
             line="205">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"
             filename="hb-buffer.h"
             line="206">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"
           filename="hb-buffer.cc"
           line="697">Creates a new #hb_buffer_t with all properties to defaults.</doc>
      <source-position filename="hb-buffer.h" line="179"/>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve"
             filename="hb-buffer.cc"
             line="702">
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">
      <source-position filename="hb-buffer.h" line="522"/>
      <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"
               filename="hb-buffer-serialize.cc"
               line="430">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="const 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"
           filename="hb-buffer.cc"
           line="760">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>
      <source-position filename="hb-buffer.h" line="188"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="762">an #hb_buffer_t.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_diff" c:identifier="hb_buffer_diff" version="1.5.0">
      <doc xml:space="preserve"
           filename="hb-buffer.cc"
           line="1901">If dottedcircle_glyph is (hb_codepoint_t) -1 then %HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT
and %HB_BUFFER_DIFF_FLAG_NOTDEF_PRESENT are never returned.  This should be used by most
callers if just comparing two buffers is needed.</doc>
      <source-position filename="hb-buffer.h" line="563"/>
      <return-value transfer-ownership="none">
        <type name="buffer_diff_flags_t" c:type="hb_buffer_diff_flags_t"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1903">a buffer.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="reference" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1904">other buffer to compare to.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="dottedcircle_glyph" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1905">glyph id of U+25CC DOTTED CIRCLE, or (hb_codepont_t) -1.</doc>
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="position_fuzz" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1906">allowed absolute difference in position values.</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
      </parameters>
    </function>
    <bitfield name="buffer_diff_flags_t"
              glib:type-name="hb_buffer_diff_flags_t"
              glib:get-type="hb_gobject_buffer_diff_flags_get_type"
              c:type="hb_buffer_diff_flags_t">
      <member name="equal"
              value="0"
              c:identifier="HB_BUFFER_DIFF_FLAG_EQUAL"
              glib:nick="equal">
      </member>
      <member name="content_type_mismatch"
              value="1"
              c:identifier="HB_BUFFER_DIFF_FLAG_CONTENT_TYPE_MISMATCH"
              glib:nick="content-type-mismatch">
      </member>
      <member name="length_mismatch"
              value="2"
              c:identifier="HB_BUFFER_DIFF_FLAG_LENGTH_MISMATCH"
              glib:nick="length-mismatch">
      </member>
      <member name="notdef_present"
              value="4"
              c:identifier="HB_BUFFER_DIFF_FLAG_NOTDEF_PRESENT"
              glib:nick="notdef-present">
      </member>
      <member name="dotted_circle_present"
              value="8"
              c:identifier="HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT"
              glib:nick="dotted-circle-present">
      </member>
      <member name="codepoint_mismatch"
              value="16"
              c:identifier="HB_BUFFER_DIFF_FLAG_CODEPOINT_MISMATCH"
              glib:nick="codepoint-mismatch">
      </member>
      <member name="cluster_mismatch"
              value="32"
              c:identifier="HB_BUFFER_DIFF_FLAG_CLUSTER_MISMATCH"
              glib:nick="cluster-mismatch">
      </member>
      <member name="glyph_flags_mismatch"
              value="64"
              c:identifier="HB_BUFFER_DIFF_FLAG_GLYPH_FLAGS_MISMATCH"
              glib:nick="glyph-flags-mismatch">
      </member>
      <member name="position_mismatch"
              value="128"
              c:identifier="HB_BUFFER_DIFF_FLAG_POSITION_MISMATCH"
              glib:nick="position-mismatch">
      </member>
    </bitfield>
    <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"
             filename="hb-buffer.h"
             line="265">the default buffer flag.</doc>
      </member>
      <member name="bot"
              value="1"
              c:identifier="HB_BUFFER_FLAG_BOT"
              glib:nick="bot">
        <doc xml:space="preserve"
             filename="hb-buffer.h"
             line="266">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"
             filename="hb-buffer.h"
             line="270">flag indicating that special handling of the end of text
                     paragraph can be applied to this buffer, similar to
                     @HB_BUFFER_FLAG_BOT.</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"
             filename="hb-buffer.h"
             line="273">flag indication that character with Default_Ignorable
                     Unicode property should use the corresponding glyph
                     from the font, instead of hiding them (done by
                     replacing them with the space glyph and zeroing the
                     advance width.)  This flag takes precedence over
                     @HB_BUFFER_FLAG_REMOVE_DEFAULT_IGNORABLES.</doc>
      </member>
      <member name="remove_default_ignorables"
              value="8"
              c:identifier="HB_BUFFER_FLAG_REMOVE_DEFAULT_IGNORABLES"
              glib:nick="remove-default-ignorables">
        <doc xml:space="preserve"
             filename="hb-buffer.h"
             line="280">flag indication that character with Default_Ignorable
                     Unicode property should be removed from glyph string
                     instead of hiding them (done by replacing them with the
                     space glyph and zeroing the advance width.)
                     @HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES takes
                     precedence over this flag. Since: 1.8.0</doc>
      </member>
      <member name="do_not_insert_dotted_circle"
              value="16"
              c:identifier="HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE"
              glib:nick="do-not-insert-dotted-circle">
        <doc xml:space="preserve"
             filename="hb-buffer.h"
             line="287">flag indicating that a dotted circle should
                     not be inserted in the rendering of incorrect
                     character sequences (such at &lt;0905 093E&gt;). Since: 2.4</doc>
      </member>
    </bitfield>
    <function name="buffer_get_cluster_level"
              c:identifier="hb_buffer_get_cluster_level"
              version="0.9.42">
      <source-position filename="hb-buffer.h" line="333"/>
      <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"
               filename="hb-buffer.cc"
               line="1129">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"
           filename="hb-buffer.cc"
           line="845">see hb_buffer_set_content_type().</doc>
      <source-position filename="hb-buffer.h" line="219"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-buffer.cc"
             line="851">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"
               filename="hb-buffer.cc"
               line="847">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"
           filename="hb-buffer.cc"
           line="929">See hb_buffer_set_direction()</doc>
      <source-position filename="hb-buffer.h" line="234"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-buffer.cc"
             line="935">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"
               filename="hb-buffer.cc"
               line="931">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">
      <source-position filename="hb-buffer.h" line="182"/>
      <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"
           filename="hb-buffer.cc"
           line="1091">See hb_buffer_set_flags().</doc>
      <source-position filename="hb-buffer.h" line="308"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-buffer.cc"
             line="1097">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"
               filename="hb-buffer.cc"
               line="1093">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"
           filename="hb-buffer.cc"
           line="1375">Returns @buffer glyph information array.  Returned pointer
is valid as long as @buffer contents are not modified.</doc>
      <source-position filename="hb-buffer.h" line="443"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-buffer.cc"
             line="1383">
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"
               filename="hb-buffer.cc"
               line="1377">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"
               filename="hb-buffer.cc"
               line="1378">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"
           filename="hb-buffer.cc"
           line="1399">Returns @buffer glyph position array.  Returned pointer
is valid as long as @buffer contents are not modified.</doc>
      <source-position filename="hb-buffer.h" line="447"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-buffer.cc"
             line="1407">
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"
               filename="hb-buffer.cc"
               line="1401">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"
               filename="hb-buffer.cc"
               line="1402">output length.</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_get_invisible_glyph"
              c:identifier="hb_buffer_get_invisible_glyph"
              version="2.0.0">
      <doc xml:space="preserve"
           filename="hb-buffer.cc"
           line="1206">See hb_buffer_set_invisible_glyph().</doc>
      <source-position filename="hb-buffer.h" line="357"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-buffer.cc"
             line="1212">The @buffer invisible #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"
               filename="hb-buffer.cc"
               line="1208">an #hb_buffer_t.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_get_language"
              c:identifier="hb_buffer_get_language"
              version="0.9.2">
      <doc xml:space="preserve"
           filename="hb-buffer.cc"
           line="1017">See hb_buffer_set_language().</doc>
      <source-position filename="hb-buffer.h" line="249"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-buffer.cc"
             line="1023">
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"
               filename="hb-buffer.cc"
               line="1019">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"
           filename="hb-buffer.cc"
           line="1357">Returns the number of items in the buffer.</doc>
      <source-position filename="hb-buffer.h" line="438"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-buffer.cc"
             line="1363">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"
               filename="hb-buffer.cc"
               line="1359">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"
           filename="hb-buffer.cc"
           line="1166">See hb_buffer_set_replacement_codepoint().</doc>
      <source-position filename="hb-buffer.h" line="350"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-buffer.cc"
             line="1172">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"
               filename="hb-buffer.cc"
               line="1168">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"
           filename="hb-buffer.cc"
           line="973">See hb_buffer_set_script().</doc>
      <source-position filename="hb-buffer.h" line="241"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-buffer.cc"
             line="979">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"
               filename="hb-buffer.cc"
               line="975">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"
           filename="hb-buffer.cc"
           line="1055">Sets @props to the #hb_segment_properties_t of @buffer.</doc>
      <source-position filename="hb-buffer.h" line="256"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1057">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"
               filename="hb-buffer.cc"
               line="1058">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">
      <source-position filename="hb-buffer.h" line="227"/>
      <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"
               filename="hb-buffer.cc"
               line="889">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">
      <source-position filename="hb-buffer.h" line="198"/>
      <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"
               filename="hb-buffer.cc"
               line="811">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"
           filename="hb-buffer.cc"
           line="1490">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().
If hb_script_get_horizontal_direction() returns %HB_DIRECTION_INVALID,
then %HB_DIRECTION_LTR is used.

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.
Note that hb_language_get_default() is NOT threadsafe the first time
it is called.  See documentation for that function for details.</doc>
      <source-position filename="hb-buffer.h" line="260"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1492">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">
      <source-position filename="hb-buffer.h" line="573"/>
      <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"
           filename="hb-buffer.cc"
           line="1841">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>
      <source-position filename="hb-buffer.h" line="452"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1843">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"
           filename="hb-buffer.cc"
           line="1254">Pre allocates memory for @buffer to fit at least @size number of items.</doc>
      <source-position filename="hb-buffer.h" line="367"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-buffer.cc"
             line="1261">%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"
               filename="hb-buffer.cc"
               line="1256">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"
               filename="hb-buffer.cc"
               line="1257">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"
           filename="hb-buffer.cc"
           line="742">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>
      <source-position filename="hb-buffer.h" line="185"/>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve"
             filename="hb-buffer.cc"
             line="749">
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"
               filename="hb-buffer.cc"
               line="744">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"
           filename="hb-buffer.cc"
           line="1224">Resets the buffer to its initial status, as if it was just newly created
with hb_buffer_create().</doc>
      <source-position filename="hb-buffer.h" line="361"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1226">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"
           filename="hb-buffer.cc"
           line="1443">Reverses buffer contents.</doc>
      <source-position filename="hb-buffer.h" line="375"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1445">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"
           filename="hb-buffer.cc"
           line="1474">Reverses buffer clusters.  That is, the buffer contents are
reversed, then each cluster (consecutive items having the
same cluster number) are reversed again.</doc>
      <source-position filename="hb-buffer.h" line="382"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1476">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"
           filename="hb-buffer.cc"
           line="1457">Reverses buffer contents between start to end.</doc>
      <source-position filename="hb-buffer.h" line="378"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1459">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"
               filename="hb-buffer.cc"
               line="1460">start index.</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="end" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1461">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"
           filename="hb-buffer.h"
           line="459">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"
             filename="hb-buffer.h"
             line="461">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"
             filename="hb-buffer.h"
             line="462">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"
             filename="hb-buffer.h"
             line="463">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"
             filename="hb-buffer.h"
             line="464">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"
             filename="hb-buffer.h"
             line="465">serialize glyph extents.</doc>
      </member>
      <member name="glyph_flags"
              value="16"
              c:identifier="HB_BUFFER_SERIALIZE_FLAG_GLYPH_FLAGS"
              glib:nick="glyph-flags">
        <doc xml:space="preserve"
             filename="hb-buffer.h"
             line="466">serialize glyph flags. Since: 1.5.0</doc>
      </member>
      <member name="no_advances"
              value="32"
              c:identifier="HB_BUFFER_SERIALIZE_FLAG_NO_ADVANCES"
              glib:nick="no-advances">
        <doc xml:space="preserve"
             filename="hb-buffer.h"
             line="467">do not serialize glyph advances,
 glyph offsets will reflect absolute glyph positions. Since: 1.8.0</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"
           filename="hb-buffer-serialize.cc"
           line="56">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>
      <source-position filename="hb-buffer.h" line="502"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-buffer-serialize.cc"
             line="65">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"
               filename="hb-buffer-serialize.cc"
               line="58">a string to parse</doc>
          <array length="1" zero-terminated="0" c:type="const char*">
            <type name="guint8"/>
          </array>
        </parameter>
        <parameter name="len" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer-serialize.cc"
               line="59">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"
           filename="hb-buffer.h"
           line="484">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"
             filename="hb-buffer.h"
             line="486">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"
             filename="hb-buffer.h"
             line="487">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"
             filename="hb-buffer.h"
             line="488">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"
           filename="hb-buffer-serialize.cc"
           line="77">Converts @format to the string corresponding it, or %NULL if it is not a valid
#hb_buffer_serialize_format_t.</doc>
      <source-position filename="hb-buffer.h" line="505"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-buffer-serialize.cc"
             line="84">
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"
               filename="hb-buffer-serialize.cc"
               line="79">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"
           filename="hb-buffer-serialize.cc"
           line="285">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>
      <source-position filename="hb-buffer.h" line="511"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-buffer-serialize.cc"
             line="326">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"
               filename="hb-buffer-serialize.cc"
               line="287">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"
               filename="hb-buffer-serialize.cc"
               line="288">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"
               filename="hb-buffer-serialize.cc"
               line="289">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"
               filename="hb-buffer-serialize.cc"
               line="290">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"
               filename="hb-buffer-serialize.cc"
               line="292">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"
               filename="hb-buffer-serialize.cc"
               line="293">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"
               filename="hb-buffer-serialize.cc"
               line="294">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"
               filename="hb-buffer-serialize.cc"
               line="296">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"
               filename="hb-buffer-serialize.cc"
               line="297">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"
           filename="hb-buffer-serialize.cc"
           line="40">Returns a list of supported buffer serialization formats.</doc>
      <source-position filename="hb-buffer.h" line="508"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-buffer-serialize.cc"
             line="45">
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">
      <source-position filename="hb-buffer.h" line="329"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1110">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"
           filename="hb-buffer.cc"
           line="828">Sets the type of @buffer contents, buffers are either empty, contain
characters (before shaping) or glyphs (the result of shaping).</doc>
      <source-position filename="hb-buffer.h" line="215"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="830">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"
               filename="hb-buffer.cc"
               line="831">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"
           filename="hb-buffer.cc"
           line="903">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>
      <source-position filename="hb-buffer.h" line="230"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="905">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"
               filename="hb-buffer.cc"
               line="906">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"
           filename="hb-buffer.cc"
           line="1072">Sets @buffer flags to @flags. See #hb_buffer_flags_t.</doc>
      <source-position filename="hb-buffer.h" line="304"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1074">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"
               filename="hb-buffer.cc"
               line="1075">the buffer flags to set.</doc>
          <type name="buffer_flags_t" c:type="hb_buffer_flags_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_set_invisible_glyph"
              c:identifier="hb_buffer_set_invisible_glyph"
              version="2.0.0">
      <doc xml:space="preserve"
           filename="hb-buffer.cc"
           line="1184">Sets the #hb_codepoint_t that replaces invisible characters in
the shaping result.  If set to zero (default), the glyph for the
U+0020 SPACE character is used.  Otherwise, this value is used
verbatim.</doc>
      <source-position filename="hb-buffer.h" line="353"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1186">an #hb_buffer_t.</doc>
          <type name="buffer_t" c:type="hb_buffer_t*"/>
        </parameter>
        <parameter name="invisible" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1187">the invisible #hb_codepoint_t</doc>
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="buffer_set_language"
              c:identifier="hb_buffer_set_language"
              version="0.9.2">
      <doc xml:space="preserve"
           filename="hb-buffer.cc"
           line="990">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 BCP 47 language tags to
#hb_language_t.</doc>
      <source-position filename="hb-buffer.h" line="244"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="992">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"
               filename="hb-buffer.cc"
               line="993">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"
           filename="hb-buffer.cc"
           line="1315">Similar to hb_buffer_pre_allocate(), but clears any new items added at the
end.</doc>
      <source-position filename="hb-buffer.h" line="434"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-buffer.cc"
             line="1323">%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"
               filename="hb-buffer.cc"
               line="1317">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"
               filename="hb-buffer.cc"
               line="1318">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">
      <source-position filename="hb-buffer.h" line="579"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1999">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"
           filename="hb-buffer.cc"
           line="1144">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>
      <source-position filename="hb-buffer.h" line="346"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1146">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"
               filename="hb-buffer.cc"
               line="1147">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"
           filename="hb-buffer.cc"
           line="946">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>
      <source-position filename="hb-buffer.h" line="237"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="948">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"
               filename="hb-buffer.cc"
               line="949">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"
           filename="hb-buffer.cc"
           line="1034">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>
      <source-position filename="hb-buffer.h" line="252"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1036">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"
               filename="hb-buffer.cc"
               line="1037">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">
      <source-position filename="hb-buffer.h" line="223"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="865">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">
      <source-position filename="hb-buffer.h" line="191"/>
      <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"
               filename="hb-buffer.cc"
               line="787">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"
           filename="hb-buffer.h"
           line="169">The main structure holding the input text and its properties before shaping,
and output glyphs and their information after shaping.</doc>
      <source-position filename="hb-buffer.h" line="176"/>
    </record>
    <function name="color_get_alpha"
              c:identifier="hb_color_get_alpha"
              version="2.1.0">
      <doc xml:space="preserve"
           filename="hb-common.cc"
           line="1166">color: a #hb_color_t we are interested in its channels.</doc>
      <source-position filename="hb-common.h" line="471"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-common.cc"
             line="1170">Alpha channel value of the given color</doc>
        <type name="guint8" c:type="uint8_t"/>
      </return-value>
      <parameters>
        <parameter name="color" transfer-ownership="none">
          <type name="color_t" c:type="hb_color_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="color_get_blue"
              c:identifier="hb_color_get_blue"
              version="2.1.0">
      <doc xml:space="preserve"
           filename="hb-common.cc"
           line="1208">color: a #hb_color_t we are interested in its channels.</doc>
      <source-position filename="hb-common.h" line="483"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-common.cc"
             line="1212">Blue channel value of the given color</doc>
        <type name="guint8" c:type="uint8_t"/>
      </return-value>
      <parameters>
        <parameter name="color" transfer-ownership="none">
          <type name="color_t" c:type="hb_color_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="color_get_green"
              c:identifier="hb_color_get_green"
              version="2.1.0">
      <doc xml:space="preserve"
           filename="hb-common.cc"
           line="1194">color: a #hb_color_t we are interested in its channels.</doc>
      <source-position filename="hb-common.h" line="479"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-common.cc"
             line="1198">Green channel value of the given color</doc>
        <type name="guint8" c:type="uint8_t"/>
      </return-value>
      <parameters>
        <parameter name="color" transfer-ownership="none">
          <type name="color_t" c:type="hb_color_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="color_get_red"
              c:identifier="hb_color_get_red"
              version="2.1.0">
      <doc xml:space="preserve"
           filename="hb-common.cc"
           line="1180">color: a #hb_color_t we are interested in its channels.</doc>
      <source-position filename="hb-common.h" line="475"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-common.cc"
             line="1184">Red channel value of the given color</doc>
        <type name="guint8" c:type="uint8_t"/>
      </return-value>
      <parameters>
        <parameter name="color" transfer-ownership="none">
          <type name="color_t" c:type="hb_color_t"/>
        </parameter>
      </parameters>
    </function>
    <callback name="destroy_func_t" c:type="hb_destroy_func_t">
      <source-position filename="hb-common.h" line="408"/>
      <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">
      <source-position filename="hb-common.h" line="144"/>
      <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="const 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"
             filename="hb-common.h"
             line="128">Initial, unset direction.</doc>
      </member>
      <member name="ltr"
              value="4"
              c:identifier="HB_DIRECTION_LTR"
              glib:nick="ltr">
        <doc xml:space="preserve"
             filename="hb-common.h"
             line="129">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"
             filename="hb-common.h"
             line="130">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"
             filename="hb-common.h"
             line="131">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"
             filename="hb-common.h"
             line="132">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">
      <source-position filename="hb-common.h" line="147"/>
      <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_builder_add_table"
              c:identifier="hb_face_builder_add_table"
              version="1.9.0">
      <doc xml:space="preserve"
           filename="hb-face.cc"
           line="701">Add table for @tag with data provided by @blob to the face.  @face must
be created using hb_face_builder_create().</doc>
      <source-position filename="hb-face.h" line="151"/>
      <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="tag" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="blob" transfer-ownership="none">
          <type name="blob_t" c:type="hb_blob_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="face_builder_create"
              c:identifier="hb_face_builder_create"
              version="1.9.0">
      <doc xml:space="preserve"
           filename="hb-face.cc"
           line="679">Creates a #hb_face_t that can be used with hb_face_builder_add_table().
After tables are added to the face, it can be compiled to a binary
font file by calling hb_face_reference_blob().</doc>
      <source-position filename="hb-face.h" line="148"/>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve"
             filename="hb-face.cc"
             line="686">New face.</doc>
        <type name="face_t" c:type="hb_face_t*"/>
      </return-value>
    </function>
    <function name="face_collect_unicodes"
              c:identifier="hb_face_collect_unicodes"
              version="1.9.0">
      <source-position filename="hb-face.h" line="130"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-face.cc"
               line="537">font face.</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="out" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-face.cc"
               line="538">set to add Unicode characters covered by @face to.</doc>
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="face_collect_variation_selectors"
              c:identifier="hb_face_collect_variation_selectors"
              version="1.9.0">
      <source-position filename="hb-face.h" line="134"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-face.cc"
               line="550">font face.</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="out" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-face.cc"
               line="551">set to add Variation Selector characters covered by @face to.</doc>
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="face_collect_variation_unicodes"
              c:identifier="hb_face_collect_variation_unicodes"
              version="1.9.0">
      <source-position filename="hb-face.h" line="138"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-face.cc"
               line="565">font face.</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="variation_selector" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="out" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-face.cc"
               line="566">set to add Unicode characters for @variation_selector covered by @face to.</doc>
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="face_count" c:identifier="hb_face_count" version="1.7.7">
      <doc xml:space="preserve"
           filename="hb-face.cc"
           line="51">Get number of faces in a blob.</doc>
      <source-position filename="hb-face.h" line="42"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-face.cc"
             line="57">Number of faces in @blob</doc>
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="blob" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-face.cc"
               line="53">a blob.</doc>
          <type name="blob_t" c:type="hb_blob_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="face_create" c:identifier="hb_face_create" version="0.9.2">
      <source-position filename="hb-face.h" line="52"/>
      <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">
      <source-position filename="hb-face.h" line="59"/>
      <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">
      <source-position filename="hb-face.h" line="70"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-face.cc"
               line="251">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">
      <source-position filename="hb-face.h" line="64"/>
      <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">
      <source-position filename="hb-face.h" line="116"/>
      <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"
               filename="hb-face.cc"
               line="480">a face.</doc>
          <type name="face_t" c:type="const hb_face_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="face_get_index"
              c:identifier="hb_face_get_index"
              version="0.9.2">
      <source-position filename="hb-face.h" line="102"/>
      <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"
               filename="hb-face.cc"
               line="410">a face.</doc>
          <type name="face_t" c:type="const hb_face_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="face_get_table_tags"
              c:identifier="hb_face_get_table_tags"
              version="1.6.0">
      <doc xml:space="preserve"
           filename="hb-face.cc"
           line="494">Retrieves table tags for a face, if possible.</doc>
      <source-position filename="hb-face.h" line="119"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-face.cc"
             line="503">total number of tables, or 0 if not possible to list.</doc>
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-face.cc"
               line="496">a face.</doc>
          <type name="face_t" c:type="const hb_face_t*"/>
        </parameter>
        <parameter name="start_offset" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-face.cc"
               line="497">index of first tag to return.</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="table_count" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-face.cc"
               line="498">input length of @table_tags array, output number of items written.</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="table_tags" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-face.cc"
               line="499">array to write tags into.</doc>
          <type name="tag_t" c:type="hb_tag_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="face_get_upem"
              c:identifier="hb_face_get_upem"
              version="0.9.2">
      <source-position filename="hb-face.h" line="109"/>
      <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"
               filename="hb-face.cc"
               line="445">a face.</doc>
          <type name="face_t" c:type="const 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">
      <source-position filename="hb-face.h" line="80"/>
      <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"
               filename="hb-face.cc"
               line="305">a face.</doc>
          <type name="face_t" c:type="const 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">
      <source-position filename="hb-face.h" line="87"/>
      <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"
               filename="hb-face.cc"
               line="340">a face.</doc>
          <type name="face_t" c:type="const hb_face_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="face_make_immutable"
              c:identifier="hb_face_make_immutable"
              version="0.9.2">
      <source-position filename="hb-face.h" line="84"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-face.cc"
               line="323">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">
      <source-position filename="hb-face.h" line="67"/>
      <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"
               filename="hb-face.cc"
               line="235">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">
      <source-position filename="hb-face.h" line="95"/>
      <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"
               filename="hb-face.cc"
               line="375">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">
      <source-position filename="hb-face.h" line="91"/>
      <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"
               filename="hb-face.cc"
               line="357">a face.</doc>
          <type name="face_t" c:type="const 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">
      <source-position filename="hb-face.h" line="112"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-face.cc"
               line="461">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">
      <source-position filename="hb-face.h" line="98"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-face.cc"
               line="391">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">
      <source-position filename="hb-face.h" line="105"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-face.cc"
               line="426">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">
      <source-position filename="hb-face.h" line="73"/>
      <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"
               filename="hb-face.cc"
               line="281">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">
      <source-position filename="hb-face.h" line="49"/>
    </record>
    <function name="feature_from_string"
              c:identifier="hb_feature_from_string"
              version="0.9.5">
      <doc xml:space="preserve"
           filename="hb-common.cc"
           line="977">Parses a string into a #hb_feature_t.

The format for specifying feature strings follows. All valid CSS
font-feature-settings values other than 'normal' and the global values are
also accepted, though not documented below. CSS string escapes are not
supported.

The range indices refer to the positions between Unicode characters. The
position before the first character is always 0.

The format is Python-esque.  Here is how it all works:

&lt;informaltable pgwide='1' align='left' frame='none'&gt;
&lt;tgroup cols='5'&gt;
&lt;thead&gt;
&lt;row&gt;&lt;entry&gt;Syntax&lt;/entry&gt;    &lt;entry&gt;Value&lt;/entry&gt; &lt;entry&gt;Start&lt;/entry&gt; &lt;entry&gt;End&lt;/entry&gt;&lt;/row&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;row&gt;&lt;entry&gt;Setting value:&lt;/entry&gt;&lt;/row&gt;
&lt;row&gt;&lt;entry&gt;kern&lt;/entry&gt;      &lt;entry&gt;1&lt;/entry&gt;     &lt;entry&gt;0&lt;/entry&gt;      &lt;entry&gt;∞&lt;/entry&gt;   &lt;entry&gt;Turn feature on&lt;/entry&gt;&lt;/row&gt;
&lt;row&gt;&lt;entry&gt;+kern&lt;/entry&gt;     &lt;entry&gt;1&lt;/entry&gt;     &lt;entry&gt;0&lt;/entry&gt;      &lt;entry&gt;∞&lt;/entry&gt;   &lt;entry&gt;Turn feature on&lt;/entry&gt;&lt;/row&gt;
&lt;row&gt;&lt;entry&gt;-kern&lt;/entry&gt;     &lt;entry&gt;0&lt;/entry&gt;     &lt;entry&gt;0&lt;/entry&gt;      &lt;entry&gt;∞&lt;/entry&gt;   &lt;entry&gt;Turn feature off&lt;/entry&gt;&lt;/row&gt;
&lt;row&gt;&lt;entry&gt;kern=0&lt;/entry&gt;    &lt;entry&gt;0&lt;/entry&gt;     &lt;entry&gt;0&lt;/entry&gt;      &lt;entry&gt;∞&lt;/entry&gt;   &lt;entry&gt;Turn feature off&lt;/entry&gt;&lt;/row&gt;
&lt;row&gt;&lt;entry&gt;kern=1&lt;/entry&gt;    &lt;entry&gt;1&lt;/entry&gt;     &lt;entry&gt;0&lt;/entry&gt;      &lt;entry&gt;∞&lt;/entry&gt;   &lt;entry&gt;Turn feature on&lt;/entry&gt;&lt;/row&gt;
&lt;row&gt;&lt;entry&gt;aalt=2&lt;/entry&gt;    &lt;entry&gt;2&lt;/entry&gt;     &lt;entry&gt;0&lt;/entry&gt;      &lt;entry&gt;∞&lt;/entry&gt;   &lt;entry&gt;Choose 2nd alternate&lt;/entry&gt;&lt;/row&gt;
&lt;row&gt;&lt;entry&gt;Setting index:&lt;/entry&gt;&lt;/row&gt;
&lt;row&gt;&lt;entry&gt;kern[]&lt;/entry&gt;    &lt;entry&gt;1&lt;/entry&gt;     &lt;entry&gt;0&lt;/entry&gt;      &lt;entry&gt;∞&lt;/entry&gt;   &lt;entry&gt;Turn feature on&lt;/entry&gt;&lt;/row&gt;
&lt;row&gt;&lt;entry&gt;kern[:]&lt;/entry&gt;   &lt;entry&gt;1&lt;/entry&gt;     &lt;entry&gt;0&lt;/entry&gt;      &lt;entry&gt;∞&lt;/entry&gt;   &lt;entry&gt;Turn feature on&lt;/entry&gt;&lt;/row&gt;
&lt;row&gt;&lt;entry&gt;kern[5:]&lt;/entry&gt;  &lt;entry&gt;1&lt;/entry&gt;     &lt;entry&gt;5&lt;/entry&gt;      &lt;entry&gt;∞&lt;/entry&gt;   &lt;entry&gt;Turn feature on, partial&lt;/entry&gt;&lt;/row&gt;
&lt;row&gt;&lt;entry&gt;kern[:5]&lt;/entry&gt;  &lt;entry&gt;1&lt;/entry&gt;     &lt;entry&gt;0&lt;/entry&gt;      &lt;entry&gt;5&lt;/entry&gt;   &lt;entry&gt;Turn feature on, partial&lt;/entry&gt;&lt;/row&gt;
&lt;row&gt;&lt;entry&gt;kern[3:5]&lt;/entry&gt; &lt;entry&gt;1&lt;/entry&gt;     &lt;entry&gt;3&lt;/entry&gt;      &lt;entry&gt;5&lt;/entry&gt;   &lt;entry&gt;Turn feature on, range&lt;/entry&gt;&lt;/row&gt;
&lt;row&gt;&lt;entry&gt;kern[3]&lt;/entry&gt;   &lt;entry&gt;1&lt;/entry&gt;     &lt;entry&gt;3&lt;/entry&gt;      &lt;entry&gt;3+1&lt;/entry&gt; &lt;entry&gt;Turn feature on, single char&lt;/entry&gt;&lt;/row&gt;
&lt;row&gt;&lt;entry&gt;Mixing it all:&lt;/entry&gt;&lt;/row&gt;
&lt;row&gt;&lt;entry&gt;aalt[3:5]=2&lt;/entry&gt; &lt;entry&gt;2&lt;/entry&gt;   &lt;entry&gt;3&lt;/entry&gt;      &lt;entry&gt;5&lt;/entry&gt;   &lt;entry&gt;Turn 2nd alternate on for range&lt;/entry&gt;&lt;/row&gt;
&lt;/tbody&gt;
&lt;/tgroup&gt;
&lt;/informaltable&gt;</doc>
      <source-position filename="hb-common.h" line="434"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-common.cc"
             line="1021">%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"
               filename="hb-common.cc"
               line="979">a string to parse</doc>
          <array length="1" zero-terminated="0" c:type="const char*">
            <type name="guint8"/>
          </array>
        </parameter>
        <parameter name="len" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-common.cc"
               line="980">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"
               filename="hb-common.cc"
               line="981">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">
      <source-position filename="hb-common.h" line="431"/>
      <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 int"/>
      </field>
      <field name="end" writable="1">
        <type name="guint" c:type="unsigned int"/>
      </field>
      <method name="_string"
              c:identifier="hb_feature_to_string"
              moved-to="feature_to_string"
              version="0.9.5">
        <doc xml:space="preserve"
             filename="hb-common.cc"
             line="1047">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>
        <source-position filename="hb-common.h" line="438"/>
        <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"
                 filename="hb-common.cc"
                 line="1049">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"
                 filename="hb-common.cc"
                 line="1050">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"
                 filename="hb-common.cc"
                 line="1051">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"
           filename="hb-common.cc"
           line="1047">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>
      <source-position filename="hb-common.h" line="438"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="feature" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-common.cc"
               line="1049">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"
               filename="hb-common.cc"
               line="1050">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"
               filename="hb-common.cc"
               line="1051">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">
      <source-position filename="hb-font.h" line="549"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.cc"
               line="1139">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">
      <source-position filename="hb-font.h" line="596"/>
      <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"
               filename="hb-font.cc"
               line="1339">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">
      <source-position filename="hb-font.h" line="599"/>
      <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"
               filename="hb-font.cc"
               line="1362">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">
      <source-position filename="hb-font.h" line="608"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.cc"
               line="1438">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">
      <source-position filename="hb-font.h" line="99"/>
      <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">
      <source-position filename="hb-font.h" line="50"/>
      <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">
      <source-position filename="hb-font.h" line="59"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.cc"
               line="573">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">
      <source-position filename="hb-font.h" line="53"/>
      <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">
      <source-position filename="hb-font.h" line="70"/>
      <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"
               filename="hb-font.cc"
               line="618">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">
      <source-position filename="hb-font.h" line="78"/>
      <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"
               filename="hb-font.cc"
               line="654">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">
      <source-position filename="hb-font.h" line="75"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.cc"
               line="637">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">
      <source-position filename="hb-font.h" line="56"/>
      <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"
               filename="hb-font.cc"
               line="557">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">
      <source-position filename="hb-font.h" line="200"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.h"
               line="190">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">
      <source-position filename="hb-font.h" line="216"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.h"
               line="206">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">
      <source-position filename="hb-font.h" line="408"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.h"
               line="398">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">
      <source-position filename="hb-font.h" line="392"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.h"
               line="382">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">
      <source-position filename="hb-font.h" line="440"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.h"
               line="430">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"
           filename="hb-font.cc"
           line="2006">Deprecated.  Use hb_font_funcs_set_nominal_glyph_func() and
hb_font_funcs_set_variation_glyph_func() instead.</doc>
      <source-position filename="hb-deprecated.h" line="67"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.cc"
               line="2008">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">
          <doc xml:space="preserve"
               filename="hb-font.cc"
               line="2009">callback function.</doc>
          <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">
          <doc xml:space="preserve"
               filename="hb-font.cc"
               line="2010">data to pass to @func.</doc>
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none" scope="notified">
          <doc xml:space="preserve"
               filename="hb-font.cc"
               line="2011">function to call when @user_data is not needed anymore.</doc>
          <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">
      <source-position filename="hb-font.h" line="280"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.h"
               line="270">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_advances_func"
              c:identifier="hb_font_funcs_set_glyph_h_advances_func"
              version="1.8.6">
      <source-position filename="hb-font.h" line="312"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.h"
               line="302">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_advances_func_t"
                c:type="hb_font_get_glyph_h_advances_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">
      <source-position filename="hb-font.h" line="376"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.h"
               line="366">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">
      <source-position filename="hb-font.h" line="344"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.h"
               line="334">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">
      <source-position filename="hb-font.h" line="424"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.h"
               line="414">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">
      <source-position filename="hb-font.h" line="296"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.h"
               line="286">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_advances_func"
              c:identifier="hb_font_funcs_set_glyph_v_advances_func"
              version="1.8.6">
      <source-position filename="hb-font.h" line="328"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.h"
               line="318">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_advances_func_t"
                c:type="hb_font_get_glyph_v_advances_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"
              deprecated="1"
              deprecated-version="2.0.0">
      <source-position filename="hb-deprecated.h" line="183"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-deprecated.h"
               line="172">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">
      <source-position filename="hb-font.h" line="360"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.h"
               line="350">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">
      <source-position filename="hb-font.h" line="232"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.h"
               line="222">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_nominal_glyphs_func"
              c:identifier="hb_font_funcs_set_nominal_glyphs_func"
              version="2.0.0">
      <source-position filename="hb-font.h" line="248"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.h"
               line="238">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_glyphs_func_t"
                c:type="hb_font_get_nominal_glyphs_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">
      <source-position filename="hb-font.h" line="62"/>
      <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"
               filename="hb-font.cc"
               line="594">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">
      <source-position filename="hb-font.h" line="264"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ffuncs" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.h"
               line="254">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">
      <source-position filename="hb-font.h" line="47"/>
    </record>
    <function name="font_get_empty"
              c:identifier="hb_font_get_empty"
              version="0.9.2">
      <source-position filename="hb-font.h" line="602"/>
      <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">
      <source-position filename="hb-font.h" line="527"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.cc"
               line="1060">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"
                   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_face"
              c:identifier="hb_font_get_face"
              version="0.9.2">
      <source-position filename="hb-font.h" line="640"/>
      <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"
               filename="hb-font.cc"
               line="1611">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">
      <source-position filename="hb-font.h" line="112"/>
      <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="extents" 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">
      <source-position filename="hb-font.h" line="522"/>
      <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"
               filename="hb-font.cc"
               line="753">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">
      <source-position filename="hb-font.h" line="531"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.cc"
               line="1077">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">
      <source-position filename="hb-font.h" line="137"/>
      <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_advances_for_direction"
              c:identifier="hb_font_get_glyph_advances_for_direction"
              version="1.8.6">
      <source-position filename="hb-font.h" line="536"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.cc"
               line="1097">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="count" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="first_glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="const hb_codepoint_t*"/>
        </parameter>
        <parameter name="glyph_stride" transfer-ownership="none">
          <type name="guint" c:type="unsigned"/>
        </parameter>
        <parameter name="first_advance" transfer-ownership="none">
          <type name="position_t" c:type="hb_position_t*"/>
        </parameter>
        <parameter name="advance_stride" transfer-ownership="none">
          <type name="guint" c:type="unsigned"/>
        </parameter>
      </parameters>
    </function>
    <callback name="font_get_glyph_advances_func_t"
              c:type="hb_font_get_glyph_advances_func_t">
      <source-position filename="hb-font.h" line="143"/>
      <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="font_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="count" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="first_glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="const hb_codepoint_t*"/>
        </parameter>
        <parameter name="glyph_stride" transfer-ownership="none">
          <type name="guint" c:type="unsigned"/>
        </parameter>
        <parameter name="first_advance" transfer-ownership="none">
          <type name="position_t" c:type="hb_position_t*"/>
        </parameter>
        <parameter name="advance_stride" transfer-ownership="none">
          <type name="guint" c:type="unsigned"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="7">
          <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">
      <source-position filename="hb-font.h" line="503"/>
      <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"
               filename="hb-font.cc"
               line="993">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">
      <source-position filename="hb-font.h" line="572"/>
      <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"
               filename="hb-font.cc"
               line="1225">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">
      <source-position filename="hb-font.h" line="170"/>
      <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">
      <source-position filename="hb-font.h" line="498"/>
      <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"
               filename="hb-font.cc"
               line="973">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">
      <source-position filename="hb-font.h" line="566"/>
      <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"
               filename="hb-font.cc"
               line="1203">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">
      <source-position filename="hb-font.h" line="166"/>
      <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">
      <source-position filename="hb-font.h" line="512"/>
      <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"
               filename="hb-font.cc"
               line="1036">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="const 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">
      <source-position filename="hb-font.h" line="180"/>
      <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">
      <source-position filename="hb-deprecated.h" line="61"/>
      <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">
      <source-position filename="hb-font.h" line="463"/>
      <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"
               filename="hb-font.cc"
               line="817">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_advances"
              c:identifier="hb_font_get_glyph_h_advances"
              version="1.8.6">
      <source-position filename="hb-font.h" line="470"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.cc"
               line="853">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="count" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="first_glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="const hb_codepoint_t*"/>
        </parameter>
        <parameter name="glyph_stride" transfer-ownership="none">
          <type name="guint" c:type="unsigned"/>
        </parameter>
        <parameter name="first_advance" transfer-ownership="none">
          <type name="position_t" c:type="hb_position_t*"/>
        </parameter>
        <parameter name="advance_stride" transfer-ownership="none">
          <type name="guint" c:type="unsigned"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_get_glyph_h_kerning"
              c:identifier="hb_font_get_glyph_h_kerning"
              version="0.9.2">
      <source-position filename="hb-font.h" line="494"/>
      <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"
               filename="hb-font.cc"
               line="932">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">
      <source-position filename="hb-font.h" line="485"/>
      <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"
               filename="hb-font.cc"
               line="890">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">
      <source-position filename="hb-font.h" line="560"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.cc"
               line="1181">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">
      <source-position filename="hb-font.h" line="160"/>
      <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">
      <source-position filename="hb-font.h" line="508"/>
      <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"
               filename="hb-font.cc"
               line="1015">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">
      <source-position filename="hb-font.h" line="176"/>
      <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">
      <source-position filename="hb-font.h" line="544"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.cc"
               line="1118">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">
      <source-position filename="hb-font.h" line="153"/>
      <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">
      <source-position filename="hb-font.h" line="466"/>
      <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"
               filename="hb-font.cc"
               line="835">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_advances"
              c:identifier="hb_font_get_glyph_v_advances"
              version="1.8.6">
      <source-position filename="hb-font.h" line="477"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.cc"
               line="871">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="count" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="first_glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="const hb_codepoint_t*"/>
        </parameter>
        <parameter name="glyph_stride" transfer-ownership="none">
          <type name="guint" c:type="unsigned"/>
        </parameter>
        <parameter name="first_advance" transfer-ownership="none">
          <type name="position_t" c:type="hb_position_t*"/>
        </parameter>
        <parameter name="advance_stride" transfer-ownership="none">
          <type name="guint" c:type="unsigned"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_get_glyph_v_kerning"
              c:identifier="hb_font_get_glyph_v_kerning"
              version="0.9.2"
              deprecated="1"
              deprecated-version="2.0.0">
      <source-position filename="hb-deprecated.h" line="188"/>
      <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"
               filename="hb-font.cc"
               line="952">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">
      <source-position filename="hb-font.h" line="489"/>
      <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"
               filename="hb-font.cc"
               line="911">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">
      <source-position filename="hb-font.h" line="447"/>
      <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"
               filename="hb-font.cc"
               line="717">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">
      <source-position filename="hb-font.h" line="454"/>
      <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"
               filename="hb-font.cc"
               line="776">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">
      <source-position filename="hb-font.h" line="119"/>
      <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>
    <callback name="font_get_nominal_glyphs_func_t"
              c:type="hb_font_get_nominal_glyphs_func_t">
      <source-position filename="hb-font.h" line="128"/>
      <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="font_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <type name="gpointer" c:type="void*"/>
        </parameter>
        <parameter name="count" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="first_unicode" transfer-ownership="none">
          <type name="codepoint_t" c:type="const hb_codepoint_t*"/>
        </parameter>
        <parameter name="unicode_stride" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="first_glyph" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t*"/>
        </parameter>
        <parameter name="glyph_stride" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="7">
          <type name="gpointer" c:type="void*"/>
        </parameter>
      </parameters>
    </callback>
    <function name="font_get_parent"
              c:identifier="hb_font_get_parent"
              version="0.9.2">
      <source-position filename="hb-font.h" line="633"/>
      <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"
               filename="hb-font.cc"
               line="1569">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">
      <source-position filename="hb-font.h" line="675"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.cc"
               line="1759">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_ptem"
              c:identifier="hb_font_get_ptem"
              version="0.9.2">
      <doc xml:space="preserve"
           filename="hb-font.cc"
           line="1796">Gets the "point size" of the font.  A value of 0 means unset.</doc>
      <source-position filename="hb-font.h" line="687"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-font.cc"
             line="1802">Point size.</doc>
        <type name="gfloat" c:type="float"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.cc"
               line="1798">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_get_scale"
              c:identifier="hb_font_get_scale"
              version="0.9.2">
      <source-position filename="hb-font.h" line="662"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.cc"
               line="1718">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">
      <source-position filename="hb-font.h" line="619"/>
      <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"
               filename="hb-font.cc"
               line="1489">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">
      <source-position filename="hb-font.h" line="450"/>
      <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"
               filename="hb-font.cc"
               line="735">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_var_coords_normalized"
              c:identifier="hb_font_get_var_coords_normalized"
              version="1.4.2">
      <doc xml:space="preserve"
           filename="hb-font.cc"
           line="1903">Return value is valid as long as variation coordinates of the font
are not modified.</doc>
      <source-position filename="hb-font.h" line="705"/>
      <return-value transfer-ownership="none">
        <type name="gint" c:type="const int*"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="length" transfer-ownership="none">
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_get_variation_glyph"
              c:identifier="hb_font_get_variation_glyph"
              version="1.2.3">
      <source-position filename="hb-font.h" line="458"/>
      <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"
               filename="hb-font.cc"
               line="796">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">
      <source-position filename="hb-font.h" line="123"/>
      <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">
      <source-position filename="hb-font.h" line="584"/>
      <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"
               filename="hb-font.cc"
               line="1270">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="const 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">
      <source-position filename="hb-font.h" line="579"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.cc"
               line="1250">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">
      <source-position filename="hb-font.h" line="626"/>
      <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"
               filename="hb-font.cc"
               line="1527">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">
      <source-position filename="hb-font.h" line="623"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.cc"
               line="1507">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">
      <source-position filename="hb-font.h" line="605"/>
      <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"
               filename="hb-font.cc"
               line="1422">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_set_face"
              c:identifier="hb_font_set_face"
              version="1.4.3">
      <doc xml:space="preserve"
           filename="hb-font.cc"
           line="1583">Sets font-face of @font.</doc>
      <source-position filename="hb-font.h" line="636"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.cc"
               line="1585">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.cc"
               line="1586">new face.</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_set_funcs"
              c:identifier="hb_font_set_funcs"
              version="0.9.2">
      <source-position filename="hb-font.h" line="644"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.cc"
               line="1628">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">
      <source-position filename="hb-font.h" line="651"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.cc"
               line="1665">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"
           filename="hb-font.cc"
           line="1541">Sets parent font of @font.</doc>
      <source-position filename="hb-font.h" line="629"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.cc"
               line="1543">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="parent" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.cc"
               line="1544">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">
      <source-position filename="hb-font.h" line="670"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.cc"
               line="1737">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_ptem"
              c:identifier="hb_font_set_ptem"
              version="1.6.0">
      <doc xml:space="preserve"
           filename="hb-font.cc"
           line="1776">Sets "point size" of the font.  Set to 0 to unset.

There are 72 points in an inch.</doc>
      <source-position filename="hb-font.h" line="684"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.cc"
               line="1778">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="ptem" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.cc"
               line="1779">font size in points.</doc>
          <type name="gfloat" c:type="float"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_set_scale"
              c:identifier="hb_font_set_scale"
              version="0.9.2">
      <source-position filename="hb-font.h" line="657"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.cc"
               line="1696">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">
      <source-position filename="hb-font.h" line="611"/>
      <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"
               filename="hb-font.cc"
               line="1465">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_set_var_coords_design"
              c:identifier="hb_font_set_var_coords_design"
              version="1.4.2">
      <source-position filename="hb-font.h" line="695"/>
      <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="coords" transfer-ownership="none">
          <type name="gfloat" c:type="const float*"/>
        </parameter>
        <parameter name="coords_length" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_set_var_coords_normalized"
              c:identifier="hb_font_set_var_coords_normalized"
              version="1.4.2">
      <source-position filename="hb-font.h" line="700"/>
      <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="coords" transfer-ownership="none">
          <type name="gint" c:type="const int*"/>
        </parameter>
        <parameter name="coords_length" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_set_variations"
              c:identifier="hb_font_set_variations"
              version="1.4.2">
      <source-position filename="hb-font.h" line="690"/>
      <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="variations" transfer-ownership="none">
          <type name="variation_t" c:type="const hb_variation_t*"/>
        </parameter>
        <parameter name="variations_length" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
      </parameters>
    </function>
    <function name="font_subtract_glyph_origin_for_direction"
              c:identifier="hb_font_subtract_glyph_origin_for_direction"
              version="0.9.2">
      <source-position filename="hb-font.h" line="554"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-font.cc"
               line="1160">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">
      <source-position filename="hb-font.h" line="40"/>
    </record>
    <function name="ft_face_create"
              c:identifier="hb_ft_face_create"
              version="0.9.2"
              introspectable="0">
      <source-position filename="hb-ft.h" line="63"/>
      <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">
      <source-position filename="hb-ft.h" line="75"/>
      <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">
      <source-position filename="hb-ft.h" line="85"/>
      <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_changed" c:identifier="hb_ft_font_changed">
      <source-position filename="hb-ft.h" line="121"/>
      <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_create"
              c:identifier="hb_ft_font_create"
              version="0.9.2"
              introspectable="0">
      <source-position filename="hb-ft.h" line="102"/>
      <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">
      <source-position filename="hb-ft.h" line="108"/>
      <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">
      <source-position filename="hb-ft.h" line="111"/>
      <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">
      <source-position filename="hb-ft.h" line="117"/>
      <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">
      <source-position filename="hb-ft.h" line="127"/>
      <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">
      <source-position filename="hb-ft.h" line="114"/>
      <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">
      <source-position filename="hb-glib.h" line="51"/>
      <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">
      <source-position filename="hb-glib.h" line="47"/>
      <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">
      <source-position filename="hb-glib.h" line="43"/>
      <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">
      <source-position filename="hb-glib.h" line="40"/>
      <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">
      <source-position filename="hb-font.h" line="108"/>
      <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>
    <bitfield name="glyph_flags_t"
              version="1.5.0"
              glib:type-name="hb_glyph_flags_t"
              glib:get-type="hb_gobject_glyph_flags_get_type"
              c:type="hb_glyph_flags_t">
      <member name="unsafe_to_break"
              value="1"
              c:identifier="HB_GLYPH_FLAG_UNSAFE_TO_BREAK"
              glib:nick="unsafe-to-break">
        <doc xml:space="preserve"
             filename="hb-buffer.h"
             line="77">Indicates that if input text is broken at the
				   beginning of the cluster this glyph is part of,
				   then both sides need to be re-shaped, as the
				   result might be different.  On the flip side,
				   it means that when this flag is not present,
				   then it's safe to break the glyph-run at the
				   beginning of this cluster, and the two sides
				   represent the exact same result one would get
				   if breaking input text at the beginning of
				   this cluster and shaping the two sides
				   separately.  This can be used to optimize
				   paragraph layout, by avoiding re-shaping
				   of each line after line-breaking, or limiting
				   the reshaping to a small piece around the
				   breaking point only.</doc>
      </member>
      <member name="defined"
              value="1"
              c:identifier="HB_GLYPH_FLAG_DEFINED"
              glib:nick="defined">
        <doc xml:space="preserve"
             filename="hb-buffer.h"
             line="92">All the currently defined flags.</doc>
      </member>
    </bitfield>
    <function name="glyph_info_get_glyph_flags"
              c:identifier="hb_glyph_info_get_glyph_flags"
              version="1.5.0">
      <doc xml:space="preserve"
           filename="hb-buffer.cc"
           line="1426">Returns glyph flags encoded within a #hb_glyph_info_t.</doc>
      <source-position filename="hb-buffer.h" line="103"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-buffer.cc"
             line="1432">The #hb_glyph_flags_t encoded within @info.</doc>
        <type name="glyph_flags_t" c:type="hb_glyph_flags_t"/>
      </return-value>
      <parameters>
        <parameter name="info" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-buffer.cc"
               line="1428">a #hb_glyph_info_t.</doc>
          <type name="glyph_info_t" c:type="const hb_glyph_info_t*"/>
        </parameter>
      </parameters>
    </function>
    <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"
           filename="hb-buffer.h"
           line="43">The #hb_glyph_info_t is the structure that holds information about the
glyphs and their relation to input text.</doc>
      <source-position filename="hb-buffer.h" line="73"/>
      <field name="codepoint" writable="1">
        <doc xml:space="preserve"
             filename="hb-buffer.h"
             line="45">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" readable="0" private="1">
        <type name="mask_t" c:type="hb_mask_t"/>
      </field>
      <field name="cluster" writable="1">
        <doc xml:space="preserve"
             filename="hb-buffer.h"
             line="47">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"
           filename="hb-buffer.h"
           line="109">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>
      <source-position filename="hb-buffer.h" line="133"/>
      <field name="x_advance" writable="1">
        <doc xml:space="preserve"
             filename="hb-buffer.h"
             line="111">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"
             filename="hb-buffer.h"
             line="113">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"
             filename="hb-buffer.h"
             line="115">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"
             filename="hb-buffer.h"
             line="117">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">
      <source-position filename="hb-graphite2.h" line="40"/>
      <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"
              version="0.9.10"
              introspectable="0"
              deprecated="1"
              deprecated-version="1.4.2">
      <source-position filename="hb-graphite2.h" line="45"/>
      <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"
           filename="hb-common.cc"
           line="337">Converts @str representing a BCP 47 language tag to the corresponding
#hb_language_t.</doc>
      <source-position filename="hb-common.h" line="163"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-common.cc"
             line="346">
The #hb_language_t corresponding to the BCP 47 language tag.</doc>
        <type name="language_t" c:type="hb_language_t"/>
      </return-value>
      <parameters>
        <parameter name="str" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-common.cc"
               line="339">a string representing
      a BCP 47 language tag</doc>
          <array length="1" zero-terminated="0" c:type="const char*">
            <type name="guint8"/>
          </array>
        </parameter>
        <parameter name="len" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-common.cc"
               line="341">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">
      <doc xml:space="preserve"
           filename="hb-common.cc"
           line="392">Get default language from current locale.

Note that the first time this function is called, it calls
"setlocale (LC_CTYPE, nullptr)" to fetch current locale.  The underlying
setlocale function is, in many implementations, NOT threadsafe.  To avoid
problems, call this function once before multiple threads can call it.
This function is only used from hb_buffer_guess_segment_properties() by
HarfBuzz itself.</doc>
      <source-position filename="hb-common.h" line="171"/>
      <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">
      <source-position filename="hb-common.h" line="160"/>
      <method name="_string"
              c:identifier="hb_language_to_string"
              moved-to="language_to_string"
              version="0.9.2">
        <doc xml:space="preserve"
             filename="hb-common.cc"
             line="373">See hb_language_from_string().</doc>
        <source-position filename="hb-common.h" line="166"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-common.cc"
               line="379">
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"
                 filename="hb-common.cc"
                 line="375">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"
           filename="hb-common.cc"
           line="373">See hb_language_from_string().</doc>
      <source-position filename="hb-common.h" line="166"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-common.cc"
             line="379">
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"
               filename="hb-common.cc"
               line="375">an #hb_language_t to convert.</doc>
          <type name="language_t" c:type="hb_language_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="map_allocation_successful"
              c:identifier="hb_map_allocation_successful"
              version="1.7.7">
      <source-position filename="hb-map.h" line="73"/>
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="map" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-map.cc"
               line="146">a map.</doc>
          <type name="map_t" c:type="const hb_map_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="map_clear" c:identifier="hb_map_clear" version="1.7.7">
      <source-position filename="hb-map.h" line="76"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="map" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-map.cc"
               line="230">a map.</doc>
          <type name="map_t" c:type="hb_map_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="map_create" c:identifier="hb_map_create" version="1.7.7">
      <source-position filename="hb-map.h" line="48"/>
      <return-value transfer-ownership="full">
        <type name="map_t" c:type="hb_map_t*"/>
      </return-value>
    </function>
    <function name="map_del" c:identifier="hb_map_del" version="1.7.7">
      <source-position filename="hb-map.h" line="94"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="map" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-map.cc"
               line="197">a map.</doc>
          <type name="map_t" c:type="hb_map_t*"/>
        </parameter>
        <parameter name="key" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="map_destroy"
              c:identifier="hb_map_destroy"
              version="1.7.7"
              introspectable="0">
      <source-position filename="hb-map.h" line="57"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="map" transfer-ownership="none">
          <doc xml:space="preserve" filename="hb-map.cc" line="91">a map.</doc>
          <type name="map_t" c:type="hb_map_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="map_get" c:identifier="hb_map_get" version="1.7.7">
      <source-position filename="hb-map.h" line="90"/>
      <return-value transfer-ownership="none">
        <type name="codepoint_t" c:type="hb_codepoint_t"/>
      </return-value>
      <parameters>
        <parameter name="map" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-map.cc"
               line="181">a map.</doc>
          <type name="map_t" c:type="const hb_map_t*"/>
        </parameter>
        <parameter name="key" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="map_get_empty"
              c:identifier="hb_map_get_empty"
              version="1.7.7">
      <source-position filename="hb-map.h" line="51"/>
      <return-value transfer-ownership="full">
        <type name="map_t" c:type="hb_map_t*"/>
      </return-value>
    </function>
    <function name="map_get_population"
              c:identifier="hb_map_get_population"
              version="1.7.7">
      <source-position filename="hb-map.h" line="82"/>
      <return-value transfer-ownership="none">
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="map" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-map.cc"
               line="258">a map.</doc>
          <type name="map_t" c:type="const hb_map_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="map_get_user_data"
              c:identifier="hb_map_get_user_data"
              version="1.7.7"
              introspectable="0">
      <source-position filename="hb-map.h" line="67"/>
      <return-value transfer-ownership="none" nullable="1">
        <type name="gpointer" c:type="void*"/>
      </return-value>
      <parameters>
        <parameter name="map" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-map.cc"
               line="129">a map.</doc>
          <type name="map_t" c:type="hb_map_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="map_has" c:identifier="hb_map_has" version="1.7.7">
      <source-position filename="hb-map.h" line="98"/>
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="map" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-map.cc"
               line="213">a map.</doc>
          <type name="map_t" c:type="const hb_map_t*"/>
        </parameter>
        <parameter name="key" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="map_is_empty"
              c:identifier="hb_map_is_empty"
              version="1.7.7">
      <source-position filename="hb-map.h" line="79"/>
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="map" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-map.cc"
               line="244">a map.</doc>
          <type name="map_t" c:type="const hb_map_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="map_reference"
              c:identifier="hb_map_reference"
              version="1.7.7"
              introspectable="0">
      <source-position filename="hb-map.h" line="54"/>
      <return-value transfer-ownership="full">
        <type name="map_t" c:type="hb_map_t*"/>
      </return-value>
      <parameters>
        <parameter name="map" transfer-ownership="none">
          <doc xml:space="preserve" filename="hb-map.cc" line="77">a map.</doc>
          <type name="map_t" c:type="hb_map_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="map_set" c:identifier="hb_map_set" version="1.7.7">
      <source-position filename="hb-map.h" line="85"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="map" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-map.cc"
               line="163">a map.</doc>
          <type name="map_t" c:type="hb_map_t*"/>
        </parameter>
        <parameter name="key" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="value" transfer-ownership="none">
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="map_set_user_data"
              c:identifier="hb_map_set_user_data"
              version="1.7.7"
              introspectable="0">
      <source-position filename="hb-map.h" line="60"/>
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="map" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-map.cc"
               line="107">a map.</doc>
          <type name="map_t" c:type="hb_map_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="map_t"
            c:type="hb_map_t"
            glib:type-name="hb_map_t"
            glib:get-type="hb_gobject_map_get_type"
            c:symbol-prefix="gobject_map">
      <source-position filename="hb-map.h" line="44"/>
    </record>
    <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_color_glyph_get_layers"
              c:identifier="hb_ot_color_glyph_get_layers"
              version="2.1.0">
      <doc xml:space="preserve"
           filename="hb-ot-color.cc"
           line="208">Fetches a list of all color layers for the specified glyph index in the specified
face. The list returned will begin at the offset provided.</doc>
      <source-position filename="hb-ot-color.h" line="110"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-color.cc"
             line="220">Total number of layers available for the glyph index queried</doc>
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-color.cc"
               line="210">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-color.cc"
               line="211">The glyph index to query</doc>
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="start_offset" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-color.cc"
               line="212">offset of the first layer to retrieve</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="layer_count"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full"
                   optional="1"
                   allow-none="1">
          <doc xml:space="preserve"
               filename="hb-ot-color.cc"
               line="213">Input = the maximum number of layers to return;
        Output = the actual number of layers returned (may be zero)</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="layers"
                   direction="out"
                   caller-allocates="1"
                   transfer-ownership="none"
                   nullable="1">
          <doc xml:space="preserve"
               filename="hb-ot-color.cc"
               line="215">The array of layers found</doc>
          <array length="3" zero-terminated="0" c:type="hb_ot_color_layer_t*">
            <type name="ot_color_layer_t" c:type="hb_ot_color_layer_t"/>
          </array>
        </parameter>
      </parameters>
    </function>
    <function name="ot_color_glyph_reference_png"
              c:identifier="hb_ot_color_glyph_reference_png"
              version="2.1.0">
      <doc xml:space="preserve"
           filename="hb-ot-color.cc"
           line="293">Fetches the PNG image for a glyph. This function takes a font object, not a face object,
as input. To get an optimally sized PNG blob, the UPEM value must be set on the @font
object. If UPEM is unset, the blob returned will be the largest PNG available.</doc>
      <source-position filename="hb-ot-color.h" line="134"/>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve"
             filename="hb-ot-color.cc"
             line="302">An #hb_blob_t containing the PNG image for the glyph, if available</doc>
        <type name="blob_t" c:type="hb_blob_t*"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-color.cc"
               line="295">#hb_font_t to work upon</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-color.cc"
               line="296">a glyph index</doc>
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_color_glyph_reference_svg"
              c:identifier="hb_ot_color_glyph_reference_svg"
              version="2.1.0">
      <doc xml:space="preserve"
           filename="hb-ot-color.cc"
           line="255">Fetches the SVG document for a glyph. The blob may be either plain text or gzip-encoded.</doc>
      <source-position filename="hb-ot-color.h" line="124"/>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve"
             filename="hb-ot-color.cc"
             line="262">An #hb_blob_t containing the SVG document of the glyph, if available</doc>
        <type name="blob_t" c:type="hb_blob_t*"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-color.cc"
               line="257">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-color.cc"
               line="258">a svg glyph index</doc>
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_color_has_layers"
              c:identifier="hb_ot_color_has_layers"
              version="2.1.0">
      <doc xml:space="preserve"
           filename="hb-ot-color.cc"
           line="192">Tests whether a face includes any `COLR` color layers.</doc>
      <source-position filename="hb-ot-color.h" line="94"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-color.cc"
             line="198">true if data found, false otherwise</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-color.cc"
               line="194">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_color_has_palettes"
              c:identifier="hb_ot_color_has_palettes"
              version="2.1.0">
      <doc xml:space="preserve"
           filename="hb-ot-color.cc"
           line="61">Tests whether a face includes a `CPAL` color-palette table.</doc>
      <source-position filename="hb-ot-color.h" line="47"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-color.cc"
             line="67">true if data found, false otherwise</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-color.cc"
               line="63">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_color_has_png"
              c:identifier="hb_ot_color_has_png"
              version="2.1.0">
      <doc xml:space="preserve"
           filename="hb-ot-color.cc"
           line="277">Tests whether a face has PNG glyph images (either in `CBDT` or `sbix` tables).</doc>
      <source-position filename="hb-ot-color.h" line="131"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-color.cc"
             line="283">true if data found, false otherwise</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-color.cc"
               line="279">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_color_has_svg"
              c:identifier="hb_ot_color_has_svg"
              version="2.1.0">
      <doc xml:space="preserve"
           filename="hb-ot-color.cc"
           line="239">Tests whether a face includes any `SVG` glyph images.</doc>
      <source-position filename="hb-ot-color.h" line="121"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-color.cc"
             line="245">true if data found, false otherwise.</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-color.cc"
               line="241">#hb_face_t to work upon.</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
      </parameters>
    </function>
    <record name="ot_color_layer_t"
            c:type="hb_ot_color_layer_t"
            version="2.1.0">
      <doc xml:space="preserve"
           filename="hb-ot-color.h"
           line="96">Pairs of glyph and color index.</doc>
      <source-position filename="hb-ot-color.h" line="107"/>
      <field name="glyph" writable="1">
        <type name="codepoint_t" c:type="hb_codepoint_t"/>
      </field>
      <field name="color_index" writable="1">
        <type name="guint" c:type="unsigned int"/>
      </field>
    </record>
    <function name="ot_color_palette_color_get_name_id"
              c:identifier="hb_ot_color_palette_color_get_name_id"
              version="2.1.0">
      <doc xml:space="preserve"
           filename="hb-ot-color.cc"
           line="116">Fetches the `name` table Name ID that provides display names for
the specificed color in a face's `CPAL` color palette.

Display names can be generic (e.g., "Background") or specific
(e.g., "Eye color").</doc>
      <source-position filename="hb-ot-color.h" line="57"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-color.cc"
             line="127">the Name ID found for the color.</doc>
        <type name="ot_name_id_t" c:type="hb_ot_name_id_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-color.cc"
               line="118">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="color_index" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-color.cc"
               line="119">The index of the color</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
      </parameters>
    </function>
    <bitfield name="ot_color_palette_flags_t"
              version="2.1.0"
              glib:type-name="hb_ot_color_palette_flags_t"
              glib:get-type="hb_gobject_ot_color_palette_flags_get_type"
              c:type="hb_ot_color_palette_flags_t">
      <member name="default"
              value="0"
              c:identifier="HB_OT_COLOR_PALETTE_FLAG_DEFAULT"
              glib:nick="default">
        <doc xml:space="preserve"
             filename="hb-ot-color.h"
             line="62">Default indicating that there is nothing special
  to note about a color palette.</doc>
      </member>
      <member name="usable_with_light_background"
              value="1"
              c:identifier="HB_OT_COLOR_PALETTE_FLAG_USABLE_WITH_LIGHT_BACKGROUND"
              glib:nick="usable-with-light-background">
        <doc xml:space="preserve"
             filename="hb-ot-color.h"
             line="64">Flag indicating that the color
  palette is appropriate to use when displaying the font on a light background such as white.</doc>
      </member>
      <member name="usable_with_dark_background"
              value="2"
              c:identifier="HB_OT_COLOR_PALETTE_FLAG_USABLE_WITH_DARK_BACKGROUND"
              glib:nick="usable-with-dark-background">
        <doc xml:space="preserve"
             filename="hb-ot-color.h"
             line="66">Flag indicating that the color
  palette is appropriate to use when displaying the font on a dark background such as black.</doc>
      </member>
    </bitfield>
    <function name="ot_color_palette_get_colors"
              c:identifier="hb_ot_color_palette_get_colors"
              version="2.1.0">
      <doc xml:space="preserve"
           filename="hb-ot-color.cc"
           line="156">Fetches a list of the colors in a color palette.

After calling this function, @colors will be filled with the palette
colors. If @colors is NULL, the function will just return the number
of total colors without storing any actual colors; this can be used
for allocating a buffer of suitable size before calling
hb_ot_color_palette_get_colors() a second time.</doc>
      <source-position filename="hb-ot-color.h" line="82"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-color.cc"
             line="173">the total number of colors in the palette</doc>
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-color.cc"
               line="158">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="palette_index" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-color.cc"
               line="159">the index of the color palette to query</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="start_offset" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-color.cc"
               line="160">offset of the first color to retrieve</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="color_count"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full"
                   optional="1"
                   allow-none="1">
          <doc xml:space="preserve"
               filename="hb-ot-color.cc"
               line="161">Input = the maximum number of colors to return;
              Output = the actual number of colors returned (may be zero)</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="colors"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full"
                   nullable="1">
          <doc xml:space="preserve"
               filename="hb-ot-color.cc"
               line="163">The array of #hb_color_t records found</doc>
          <array length="3" zero-terminated="0" c:type="hb_color_t*">
            <type name="color_t" c:type="hb_color_t"/>
          </array>
        </parameter>
      </parameters>
    </function>
    <function name="ot_color_palette_get_count"
              c:identifier="hb_ot_color_palette_get_count"
              version="2.1.0">
      <doc xml:space="preserve"
           filename="hb-ot-color.cc"
           line="77">Fetches the number of color palettes in a face.</doc>
      <source-position filename="hb-ot-color.h" line="50"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-color.cc"
             line="83">the number of palettes found</doc>
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-color.cc"
               line="79">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_color_palette_get_flags"
              c:identifier="hb_ot_color_palette_get_flags"
              version="2.1.0">
      <doc xml:space="preserve"
           filename="hb-ot-color.cc"
           line="138">Fetches the flags defined for a color palette.</doc>
      <source-position filename="hb-ot-color.h" line="78"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-color.cc"
             line="145">the #hb_ot_color_palette_flags_t of the requested color palette</doc>
        <type name="ot_color_palette_flags_t"
              c:type="hb_ot_color_palette_flags_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-color.cc"
               line="140">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="palette_index" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-color.cc"
               line="141">The index of the color palette</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_color_palette_get_name_id"
              c:identifier="hb_ot_color_palette_get_name_id"
              version="2.1.0">
      <doc xml:space="preserve"
           filename="hb-ot-color.cc"
           line="93">Fetches the `name` table Name ID that provides display names for
a `CPAL` color palette.

Palette display names can be generic (e.g., "Default") or provide
specific, themed names (e.g., "Spring", "Summer", "Fall", and "Winter").</doc>
      <source-position filename="hb-ot-color.h" line="53"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-color.cc"
             line="104">the Named ID found for the palette.
If the requested palette has no name the result is #HB_OT_NAME_ID_INVALID.</doc>
        <type name="ot_name_id_t" c:type="hb_ot_name_id_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-color.cc"
               line="95">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="palette_index" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-color.cc"
               line="96">The index of the color palette</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_font_set_funcs"
              c:identifier="hb_ot_font_set_funcs"
              version="0.9.28">
      <source-position filename="hb-ot-font.h" line="40"/>
      <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_features"
              c:identifier="hb_ot_layout_collect_features"
              version="1.8.5">
      <doc xml:space="preserve"
           filename="hb-ot-layout.cc"
           line="1119">Fetches a list of all feature indexes in the specified face's GSUB table
or GPOS table, underneath the specified scripts, languages, and features.
If no list of scripts is provided, all scripts will be queried. If no list
of languages is provided, all languages will be queried. If no list of
features is provided, all features will be queried.</doc>
      <source-position filename="hb-ot-layout.h" line="251"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1121">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1122">HB_OT_TAG_GSUB or HB_OT_TAG_GPOS</doc>
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="scripts" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1123">The array of scripts to collect features for</doc>
          <type name="tag_t" c:type="const hb_tag_t*"/>
        </parameter>
        <parameter name="languages" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1124">The array of languages to collect features for</doc>
          <type name="tag_t" c:type="const hb_tag_t*"/>
        </parameter>
        <parameter name="features" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1125">The array of features to collect</doc>
          <type name="tag_t" c:type="const hb_tag_t*"/>
        </parameter>
        <parameter name="feature_indexes"
                   direction="out"
                   caller-allocates="1"
                   transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1126">The array of feature indexes found for the query</doc>
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_collect_lookups"
              c:identifier="hb_ot_layout_collect_lookups"
              version="0.9.8">
      <doc xml:space="preserve"
           filename="hb-ot-layout.cc"
           line="1170">Fetches a list of all feature-lookup indexes in the specified face's GSUB
table or GPOS table, underneath the specified scripts, languages, and
features. If no list of scripts is provided, all scripts will be queried.
If no list of languages is provided, all languages will be queried. If no
list of features is provided, all features will be queried.</doc>
      <source-position filename="hb-ot-layout.h" line="259"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1172">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1173">HB_OT_TAG_GSUB or HB_OT_TAG_GPOS</doc>
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="scripts" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1174">The array of scripts to collect lookups for</doc>
          <type name="tag_t" c:type="const hb_tag_t*"/>
        </parameter>
        <parameter name="languages" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1175">The array of languages to collect lookups for</doc>
          <type name="tag_t" c:type="const hb_tag_t*"/>
        </parameter>
        <parameter name="features" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1176">The array of features to collect lookups for</doc>
          <type name="tag_t" c:type="const hb_tag_t*"/>
        </parameter>
        <parameter name="lookup_indexes"
                   direction="out"
                   caller-allocates="1"
                   transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1177">The array of lookup indexes found for the query</doc>
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_feature_get_characters"
              c:identifier="hb_ot_layout_feature_get_characters"
              version="2.0.0">
      <doc xml:space="preserve"
           filename="hb-ot-layout.cc"
           line="1699">Fetches a list of the characters defined as having a variant under the specified
"Character Variant" ("cvXX") feature tag.

&lt;note&gt;Note: If the char_count output value is equal to its input value, then there
      is a chance there were more characters defined under the feature tag than were
      returned. This function can be called with incrementally larger start_offset
      until the char_count output value is lower than its input value, or the size
      of the characters array can be increased.&lt;/note&gt;</doc>
      <source-position filename="hb-ot-layout.h" line="398"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-layout.cc"
             line="1720">Number of total sample characters in the cvXX feature.</doc>
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1701">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1702">table tag to query, "GSUB" or "GPOS".</doc>
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="feature_index" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1703">index of feature to query.</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="start_offset" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1704">offset of the first character to retrieve</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="char_count"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full"
                   nullable="1">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1705">Input = the maximum number of characters to return;
             Output = the actual number of characters returned (may be zero)</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="characters"
                   direction="out"
                   caller-allocates="1"
                   transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1707">A buffer pointer.
             The Unicode codepoints of the characters for which this feature provides
              glyph variants.</doc>
          <array length="4" zero-terminated="0" c:type="hb_codepoint_t*">
            <type name="codepoint_t" c:type="hb_codepoint_t"/>
          </array>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_feature_get_lookups"
              c:identifier="hb_ot_layout_feature_get_lookups"
              version="0.9.7">
      <doc xml:space="preserve"
           filename="hb-ot-layout.cc"
           line="936">Fetches a list of all lookups enumerated for the specified feature, in
the specified face's GSUB table or GPOS table. The list returned will
begin at the offset provided.</doc>
      <source-position filename="hb-ot-layout.h" line="239"/>
      <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"
               filename="hb-ot-layout.cc"
               line="938">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="939">HB_OT_TAG_GSUB or HB_OT_TAG_GPOS</doc>
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="feature_index" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="940">The index of the requested feature</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="start_offset" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="941">offset of the first lookup to retrieve</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="lookup_count"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full"
                   nullable="1">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="942">Input = the maximum number of lookups to return;
               Output = the actual number of lookups returned (may be zero)</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="lookup_indexes"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="944">The array of lookup indexes found for the query</doc>
          <array length="4" zero-terminated="0" c:type="unsigned int*">
            <type name="guint" c:type="unsigned int"/>
          </array>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_feature_get_name_ids"
              c:identifier="hb_ot_layout_feature_get_name_ids"
              version="2.0.0">
      <doc xml:space="preserve"
           filename="hb-ot-layout.cc"
           line="1625">Fetches name indices from feature parameters for "Stylistic Set" ('ssXX') or
"Character Variant" ('cvXX') features.</doc>
      <source-position filename="hb-ot-layout.h" line="387"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-layout.cc"
             line="1645">true if data found, false otherwise</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1627">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1628">table tag to query, "GSUB" or "GPOS".</doc>
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="feature_index" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1629">index of feature to query.</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="label_id"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full"
                   optional="1"
                   allow-none="1">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1630">The ‘name’ table name ID that specifies a string
           for a user-interface label for this feature. (May be NULL.)</doc>
          <type name="ot_name_id_t" c:type="hb_ot_name_id_t*"/>
        </parameter>
        <parameter name="tooltip_id"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full"
                   optional="1"
                   allow-none="1">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1632">The ‘name’ table name ID that specifies a string
             that an application can use for tooltip text for this
             feature. (May be NULL.)</doc>
          <type name="ot_name_id_t" c:type="hb_ot_name_id_t*"/>
        </parameter>
        <parameter name="sample_id"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full"
                   optional="1"
                   allow-none="1">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1635">The ‘name’ table name ID that specifies sample text
            that illustrates the effect of this feature. (May be NULL.)</doc>
          <type name="ot_name_id_t" c:type="hb_ot_name_id_t*"/>
        </parameter>
        <parameter name="num_named_parameters"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full"
                   optional="1"
                   allow-none="1">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1637">Number of named parameters. (May be zero.)</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="first_param_id"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full"
                   optional="1"
                   allow-none="1">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1638">The first ‘name’ table name ID used to specify
                 strings for user-interface labels for the feature
                 parameters. (Must be zero if numParameters is zero.)</doc>
          <type name="ot_name_id_t" c:type="hb_ot_name_id_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_feature_with_variations_get_lookups"
              c:identifier="hb_ot_layout_feature_with_variations_get_lookups">
      <doc xml:space="preserve"
           filename="hb-ot-layout.cc"
           line="1284">Fetches a list of all lookups enumerated for the specified feature, in
the specified face's GSUB table or GPOS table, enabled at the specified
variations index. The list returned will begin at the offset provided.</doc>
      <source-position filename="hb-ot-layout.h" line="311"/>
      <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"
               filename="hb-ot-layout.cc"
               line="1286">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1287">HB_OT_TAG_GSUB or HB_OT_TAG_GPOS</doc>
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="feature_index" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1288">The index of the feature to query</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="variations_index" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1289">The index of the feature variation to query</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="start_offset" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1290">offset of the first lookup to retrieve</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="lookup_count"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full"
                   nullable="1">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1291">Input = the maximum number of lookups to return;
               Output = the actual number of lookups returned (may be zero)</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="lookup_indexes"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1293">The array of lookups found for the query</doc>
          <array length="5" zero-terminated="0" c:type="unsigned int*">
            <type name="guint" c:type="unsigned int"/>
          </array>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_get_attach_points"
              c:identifier="hb_ot_layout_get_attach_points">
      <doc xml:space="preserve"
           filename="hb-ot-layout.cc"
           line="315">Fetches a list of all attachment points for the specified glyph in the GDEF
table of the face. The list returned will begin at the offset provided.

Useful if the client program wishes to cache the list.</doc>
      <source-position filename="hb-ot-layout.h" line="128"/>
      <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"
               filename="hb-ot-layout.cc"
               line="317">The #hb_face_t to work on</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="318">The #hb_codepoint_t code point to query</doc>
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="start_offset" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="319">offset of the first attachment point to retrieve</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="point_count"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full"
                   nullable="1">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="320">Input = the maximum number of attachment points to return;
              Output = the actual number of attachment points returned (may be zero)</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="point_array"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="322">The array of attachment points found for the query</doc>
          <array length="3" zero-terminated="0" c:type="unsigned int*">
            <type name="guint" c:type="unsigned int"/>
          </array>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_get_glyph_class"
              c:identifier="hb_ot_layout_get_glyph_class"
              version="0.9.7">
      <doc xml:space="preserve"
           filename="hb-ot-layout.cc"
           line="274">Fetches the GDEF class of the requested glyph in the specified face.</doc>
      <source-position filename="hb-ot-layout.h" line="116"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-layout.cc"
             line="281">The #hb_ot_layout_glyph_class_t glyph class of the given code
point in the GDEF table of the face.</doc>
        <type name="ot_layout_glyph_class_t"
              c:type="hb_ot_layout_glyph_class_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="276">The #hb_face_t to work on</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="277">The #hb_codepoint_t code point to query</doc>
          <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">
      <doc xml:space="preserve"
           filename="hb-ot-layout.cc"
           line="293">Retrieves the set of all glyphs from the face that belong to the requested
glyph class in the face's GDEF table.</doc>
      <source-position filename="hb-ot-layout.h" line="120"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="295">The #hb_face_t to work on</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="klass" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="296">The #hb_ot_layout_glyph_class_t GDEF class to retrieve</doc>
          <type name="ot_layout_glyph_class_t"
                c:type="hb_ot_layout_glyph_class_t"/>
        </parameter>
        <parameter name="glyphs"
                   direction="out"
                   caller-allocates="1"
                   transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="297">The #hb_set_t set of all glyphs belonging to the requested
         class.</doc>
          <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">
      <doc xml:space="preserve"
           filename="hb-ot-layout.cc"
           line="342">Fetches a list of the caret positions defined for a ligature glyph in the GDEF
table of the font. The list returned will begin at the offset provided.</doc>
      <source-position filename="hb-ot-layout.h" line="136"/>
      <return-value transfer-ownership="none">
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="344">The #hb_font_t to work on</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="direction" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="345">The #hb_direction_t text direction to use</doc>
          <type name="direction_t" c:type="hb_direction_t"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="346">The #hb_codepoint_t code point to query</doc>
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="start_offset" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="347">offset of the first caret position to retrieve</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="caret_count"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full"
                   nullable="1">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="348">Input = the maximum number of caret positions to return;
              Output = the actual number of caret positions returned (may be zero)</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="caret_array"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="350">The array of caret positions found for the query</doc>
          <array length="4" zero-terminated="0" c:type="hb_position_t*">
            <type name="position_t" c:type="hb_position_t"/>
          </array>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_get_size_params"
              c:identifier="hb_ot_layout_get_size_params"
              version="0.9.10">
      <doc xml:space="preserve"
           filename="hb-ot-layout.cc"
           line="1563">Fetches optical-size feature data (i.e., the `size` feature from GPOS). Note that
the subfamily_id and the subfamily name string (accessible via the subfamily_name_id)
as used here are defined as pertaining only to fonts within a font family that differ
specifically in their respective size ranges; other ways to differentiate fonts within
a subfamily are not covered by the `size` feature.

For more information on this distinction, see the `size` documentation at
https://docs.microsoft.com/en-us/typography/opentype/spec/features_pt#tag-39size39</doc>
      <source-position filename="hb-ot-layout.h" line="378"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-layout.cc"
             line="1581">true if data found, false otherwise</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1565">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="design_size"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1566">The design size of the face</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="subfamily_id"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1567">The identifier of the face within the font subfamily</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="subfamily_name_id"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1568">The ‘name’ table name ID of the face within the font subfamily</doc>
          <type name="ot_name_id_t" c:type="hb_ot_name_id_t*"/>
        </parameter>
        <parameter name="range_start"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1569">The minimum size of the recommended size range for the face</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="range_end"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1570">The maximum size of the recommended size range for the face</doc>
          <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">
      <doc xml:space="preserve"
           filename="hb-ot-layout.h"
           line="96">The GDEF classes defined for glyphs.</doc>
      <member name="unclassified"
              value="0"
              c:identifier="HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED"
              glib:nick="unclassified">
        <doc xml:space="preserve"
             filename="hb-ot-layout.h"
             line="98">Glyphs not matching the other classifications</doc>
      </member>
      <member name="base_glyph"
              value="1"
              c:identifier="HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH"
              glib:nick="base-glyph">
        <doc xml:space="preserve"
             filename="hb-ot-layout.h"
             line="99">Spacing, single characters, capable of accepting marks</doc>
      </member>
      <member name="ligature"
              value="2"
              c:identifier="HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE"
              glib:nick="ligature">
        <doc xml:space="preserve"
             filename="hb-ot-layout.h"
             line="100">Glyphs that represent ligation of multiple characters</doc>
      </member>
      <member name="mark"
              value="3"
              c:identifier="HB_OT_LAYOUT_GLYPH_CLASS_MARK"
              glib:nick="mark">
        <doc xml:space="preserve"
             filename="hb-ot-layout.h"
             line="101">Non-spacing, combining glyphs that represent marks</doc>
      </member>
      <member name="component"
              value="4"
              c:identifier="HB_OT_LAYOUT_GLYPH_CLASS_COMPONENT"
              glib:nick="component">
        <doc xml:space="preserve"
             filename="hb-ot-layout.h"
             line="102">Spacing glyphs that represent part of a single character</doc>
      </member>
    </enumeration>
    <function name="ot_layout_has_glyph_classes"
              c:identifier="hb_ot_layout_has_glyph_classes">
      <doc xml:space="preserve"
           filename="hb-ot-layout.cc"
           line="259">Tests whether a face has any glyph classes defined in its GDEF table.</doc>
      <source-position filename="hb-ot-layout.h" line="94"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-layout.cc"
             line="265">true if data found, false otherwise</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="261">#hb_face_t to work upon</doc>
          <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">
      <source-position filename="hb-ot-layout.h" line="364"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-layout.cc"
             line="1508">true if the face has GPOS data, false otherwise</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1506">#hb_face_t to work upon</doc>
          <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">
      <doc xml:space="preserve"
           filename="hb-ot-layout.cc"
           line="1323">Tests whether the specified face includes any GSUB substitutions.</doc>
      <source-position filename="hb-ot-layout.h" line="325"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-layout.cc"
             line="1329">true if data found, false otherwise</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1325">#hb_face_t to work upon</doc>
          <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">
      <doc xml:space="preserve"
           filename="hb-ot-layout.cc"
           line="894">Fetches the index of a given feature tag in the specified face's GSUB table
or GPOS table, underneath the specified script and language.</doc>
      <source-position filename="hb-ot-layout.h" line="231"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-layout.cc"
             line="906">true if the feature is found, false otherwise</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="896">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="897">HB_OT_TAG_GSUB or HB_OT_TAG_GPOS</doc>
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="script_index" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="898">The index of the requested script tag</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="language_index" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="899">The index of the requested language tag</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="feature_tag" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="900">#hb_tag_t of the feature tag requested</doc>
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="feature_index"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="901">The index of the requested feature</doc>
          <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">
      <doc xml:space="preserve"
           filename="hb-ot-layout.cc"
           line="822">Fetches a list of all features in the specified face's GSUB table
or GPOS table, underneath the specified script and language. The list
returned will begin at the offset provided.</doc>
      <source-position filename="hb-ot-layout.h" line="213"/>
      <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"
               filename="hb-ot-layout.cc"
               line="824">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="825">HB_OT_TAG_GSUB or HB_OT_TAG_GPOS</doc>
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="script_index" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="826">The index of the requested script tag</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="language_index" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="827">The index of the requested language tag</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="start_offset" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="828">offset of the first feature tag to retrieve</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="feature_count"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full"
                   nullable="1">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="829">Input = the maximum number of feature tags to return;
                Output: the actual number of feature tags returned (may be zero)</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="feature_indexes"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="831">The array of feature indexes found for the query</doc>
          <array length="5" zero-terminated="0" c:type="unsigned int*">
            <type name="guint" c:type="unsigned int"/>
          </array>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_language_get_feature_tags"
              c:identifier="hb_ot_layout_language_get_feature_tags">
      <doc xml:space="preserve"
           filename="hb-ot-layout.cc"
           line="853">Fetches a list of all features in the specified face's GSUB table
or GPOS table, underneath the specified script and language. The list
returned will begin at the offset provided.</doc>
      <source-position filename="hb-ot-layout.h" line="222"/>
      <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"
               filename="hb-ot-layout.cc"
               line="855">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="856">HB_OT_TAG_GSUB or HB_OT_TAG_GPOS</doc>
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="script_index" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="857">The index of the requested script tag</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="language_index" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="858">The index of the requested language tag</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="start_offset" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="859">offset of the first feature tag to retrieve</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="feature_count"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full"
                   nullable="1">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="860">Input = the maximum number of feature tags to return;
                Output = the actual number of feature tags returned (may be zero)</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="feature_tags"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="862">The array of #hb_tag_t feature tags found for the query</doc>
          <array length="5" zero-terminated="0" c:type="hb_tag_t*">
            <type name="tag_t" c:type="hb_tag_t"/>
          </array>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_language_get_required_feature"
              c:identifier="hb_ot_layout_language_get_required_feature"
              version="0.9.30">
      <doc xml:space="preserve"
           filename="hb-ot-layout.cc"
           line="787">Fetches the tag of a requested feature index in the given face's GSUB or GPOS table,
underneath the specified script and language.</doc>
      <source-position filename="hb-ot-layout.h" line="205"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-layout.cc"
             line="799">true if the feature is found, false otherwise</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="789">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="790">HB_OT_TAG_GSUB or HB_OT_TAG_GPOS</doc>
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="script_index" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="791">The index of the requested script tag</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="language_index" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="792">The index of the requested language tag</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="feature_index" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="793">The index of the requested feature</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="feature_tag"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="794">The #hb_tag_t of the requested feature</doc>
          <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">
      <doc xml:space="preserve"
           filename="hb-ot-layout.cc"
           line="757">Fetches the index of a requested feature in the given face's GSUB or GPOS table,
underneath the specified script and language.</doc>
      <source-position filename="hb-ot-layout.h" line="198"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-layout.cc"
             line="768">true if the feature is found, false otherwise</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="759">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="760">HB_OT_TAG_GSUB or HB_OT_TAG_GPOS</doc>
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="script_index" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="761">The index of the requested script tag</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="language_index" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="762">The index of the requested language tag</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="feature_index"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="763">The index of the requested feature</doc>
          <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">
      <doc xml:space="preserve"
           filename="hb-ot-layout.cc"
           line="1207">Fetches a list of all glyphs affected by the specified lookup in the
specified face's GSUB table of GPOS table.</doc>
      <source-position filename="hb-ot-layout.h" line="267"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1209">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1210">HB_OT_TAG_GSUB or HB_OT_TAG_GPOS</doc>
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="lookup_index" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1211">The index of the feature lookup to query</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="glyphs_before"
                   direction="out"
                   caller-allocates="1"
                   transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1212">Array of glyphs preceding the substitution range</doc>
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
        <parameter name="glyphs_input"
                   direction="out"
                   caller-allocates="1"
                   transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1213">Array of input glyphs that would be substituted by the lookup</doc>
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
        <parameter name="glyphs_after"
                   direction="out"
                   caller-allocates="1"
                   transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1214">Array of glyphs following the substition range</doc>
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
        <parameter name="glyphs_output"
                   direction="out"
                   caller-allocates="1"
                   transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1215">Array of glyphs that would be the substitued output of the lookup</doc>
          <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">
      <doc xml:space="preserve"
           filename="hb-ot-layout.cc"
           line="1436">Compute the transitive closure of glyphs needed for a
specified lookup.</doc>
      <source-position filename="hb-ot-layout.h" line="335"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1438">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="lookup_index" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1439">index of the feature lookup to query</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="glyphs"
                   direction="out"
                   caller-allocates="1"
                   transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1440">Array of glyphs comprising the transitive closure of the lookup</doc>
          <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">
      <doc xml:space="preserve"
           filename="hb-ot-layout.cc"
           line="1339">Tests whether a specified lookup in the specified face would
trigger a substitution on the given glyph sequence.</doc>
      <source-position filename="hb-ot-layout.h" line="328"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-layout.cc"
             line="1350">true if a substitution would be triggered, false otherwise</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1341">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="lookup_index" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1342">The index of the lookup to query</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="glyphs" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1343">The sequence of glyphs to query for substitution</doc>
          <type name="codepoint_t" c:type="const hb_codepoint_t*"/>
        </parameter>
        <parameter name="glyphs_length" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1344">The length of the glyph sequence</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="zero_context" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1345">#hb_bool_t indicating whether substitutions should be context-free</doc>
          <type name="bool_t" c:type="hb_bool_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_lookups_substitute_closure"
              c:identifier="hb_ot_layout_lookups_substitute_closure"
              version="1.8.1">
      <doc xml:space="preserve"
           filename="hb-ot-layout.cc"
           line="1460">Compute the transitive closure of glyphs needed for all of the
provided lookups.</doc>
      <source-position filename="hb-ot-layout.h" line="341"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1462">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="lookups" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1463">The set of lookups to query</doc>
          <type name="set_t" c:type="const hb_set_t*"/>
        </parameter>
        <parameter name="glyphs"
                   direction="out"
                   caller-allocates="1"
                   transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1464">Array of glyphs comprising the transitive closure of the lookups</doc>
          <type name="set_t" c:type="hb_set_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_script_find_language"
              c:identifier="hb_ot_layout_script_find_language"
              deprecated="1">
      <doc xml:space="preserve"
           filename="hb-ot-layout.cc"
           line="681">Fetches the index of a given language tag in the specified face's GSUB table
or GPOS table, underneath the specified script tag.</doc>
      <doc-version xml:space="preserve">??</doc-version>
      <doc-deprecated xml:space="preserve">??</doc-deprecated>
      <source-position filename="hb-ot-deprecated.h" line="56"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-layout.cc"
             line="692">true if the language tag is found, false otherwise</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="683">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="684">HB_OT_TAG_GSUB or HB_OT_TAG_GPOS</doc>
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="script_index" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="685">The index of the requested script tag</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="language_tag" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="686">The #hb_tag_t of the requested language</doc>
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="language_index" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="687">The index of the requested language</doc>
          <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">
      <doc xml:space="preserve"
           filename="hb-ot-layout.cc"
           line="652">Fetches a list of language tags in the given face's GSUB or GPOS table, underneath
the specified script index. The list returned will begin at the offset provided.</doc>
      <source-position filename="hb-ot-layout.h" line="182"/>
      <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"
               filename="hb-ot-layout.cc"
               line="654">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="655">HB_OT_TAG_GSUB or HB_OT_TAG_GPOS</doc>
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="script_index" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="656">The index of the requested script tag</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="start_offset" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="657">offset of the first language tag to retrieve</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="language_count"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full"
                   nullable="1">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="658">Input = the maximum number of language tags to return;
                 Output = the actual number of language tags returned (may be zero)</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="language_tags"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="660">Array of language tags found in the table</doc>
          <array length="4" zero-terminated="0" c:type="hb_tag_t*">
            <type name="tag_t" c:type="hb_tag_t"/>
          </array>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_script_select_language"
              c:identifier="hb_ot_layout_script_select_language"
              version="2.0.0">
      <doc xml:space="preserve"
           filename="hb-ot-layout.cc"
           line="714">Fetches the index of a given language tag in the specified face's GSUB table
or GPOS table, underneath the specified script index.</doc>
      <source-position filename="hb-ot-layout.h" line="190"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-layout.cc"
             line="726">true if the language tag is found, false otherwise</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="716">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="717">HB_OT_TAG_GSUB or HB_OT_TAG_GPOS</doc>
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="script_index" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="718">The index of the requested script tag</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="language_count" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="719">The number of languages in the specified script</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="language_tags" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="720">The array of language tags</doc>
          <type name="tag_t" c:type="const hb_tag_t*"/>
        </parameter>
        <parameter name="language_index"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="721">The index of the requested language</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_table_choose_script"
              c:identifier="hb_ot_layout_table_choose_script">
      <doc xml:space="preserve"
           filename="hb-ot-layout.cc"
           line="507">Deprecated since 2.0.0</doc>
      <source-position filename="hb-ot-deprecated.h" line="49"/>
      <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"
               filename="hb-ot-layout.cc"
               line="509">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="510">HB_OT_TAG_GSUB or HB_OT_TAG_GPOS</doc>
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="script_tags" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="511">Array of #hb_tag_t script tags</doc>
          <type name="tag_t" c:type="const hb_tag_t*"/>
        </parameter>
        <parameter name="script_index"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="512">The index of the requested script tag</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="chosen_script"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="513">#hb_tag_t of the script tag requested</doc>
          <type name="tag_t" c:type="hb_tag_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_table_find_feature_variations"
              c:identifier="hb_ot_layout_table_find_feature_variations">
      <doc xml:space="preserve"
           filename="hb-ot-layout.cc"
           line="1259">Fetches a list of feature variations in the specified face's GSUB table
or GPOS table, at the specified variation coordinates.</doc>
      <source-position filename="hb-ot-layout.h" line="304"/>
      <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"
               filename="hb-ot-layout.cc"
               line="1261">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1262">HB_OT_TAG_GSUB or HB_OT_TAG_GPOS</doc>
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="coords" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1263">The variation coordinates to query</doc>
          <type name="gint" c:type="const int*"/>
        </parameter>
        <parameter name="num_coords" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1264">The number of variation coorinates</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="variations_index"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="1265">The array of feature variations found for the query</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_table_find_script"
              c:identifier="hb_ot_layout_table_find_script">
      <doc xml:space="preserve"
           filename="hb-ot-layout.cc"
           line="463">Fetches the index if a given script tag in the specified face's GSUB table
or GPOS table.</doc>
      <source-position filename="hb-ot-layout.h" line="161"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-layout.cc"
             line="473">true if the script is found, false otherwise</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="465">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="466">HB_OT_TAG_GSUB or HB_OT_TAG_GPOS</doc>
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="script_tag" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="467">#hb_tag_t of the script tag requested</doc>
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="script_index"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="468">The index of the requested script tag</doc>
          <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">
      <doc xml:space="preserve"
           filename="hb-ot-layout.cc"
           line="592">Fetches a list of all feature tags in the given face's GSUB or GPOS table.</doc>
      <source-position filename="hb-ot-layout.h" line="175"/>
      <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"
               filename="hb-ot-layout.cc"
               line="594">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="595">HB_OT_TAG_GSUB or HB_OT_TAG_GPOS</doc>
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="start_offset" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="596">offset of the first feature tag to retrieve</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="feature_count"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full"
                   nullable="1">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="597">Input = the maximum number of feature tags to return;
                Output = the actual number of feature tags returned (may be zero)</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="feature_tags"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="599">Array of feature tags found in the table</doc>
          <array length="3" zero-terminated="0" c:type="hb_tag_t*">
            <type name="tag_t" c:type="hb_tag_t"/>
          </array>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_table_get_lookup_count"
              c:identifier="hb_ot_layout_table_get_lookup_count"
              version="0.9.22">
      <doc xml:space="preserve"
           filename="hb-ot-layout.cc"
           line="970">Fetches the total number of lookups enumerated in the specified
face's GSUB table or GPOS table.</doc>
      <source-position filename="hb-ot-layout.h" line="247"/>
      <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"
               filename="hb-ot-layout.cc"
               line="972">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="973">HB_OT_TAG_GSUB or HB_OT_TAG_GPOS</doc>
          <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">
      <doc xml:space="preserve"
           filename="hb-ot-layout.cc"
           line="436">Fetches a list of all scripts enumerated in the specified face's GSUB table
or GPOS table. The list returned will begin at the offset provided.</doc>
      <source-position filename="hb-ot-layout.h" line="154"/>
      <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"
               filename="hb-ot-layout.cc"
               line="438">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="439">HB_OT_TAG_GSUB or HB_OT_TAG_GPOS</doc>
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="start_offset" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="440">offset of the first script tag to retrieve</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="script_count"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full"
                   nullable="1">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="441">Input = the maximum number of script tags to return;
               Output = the actual number of script tags returned (may be zero)</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="script_tags"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="443">The array of #hb_tag_t script tags found for the query</doc>
          <array length="3" zero-terminated="0" c:type="hb_tag_t*">
            <type name="tag_t" c:type="hb_tag_t"/>
          </array>
        </parameter>
      </parameters>
    </function>
    <function name="ot_layout_table_select_script"
              c:identifier="hb_ot_layout_table_select_script"
              version="2.0.0">
      <source-position filename="hb-ot-layout.h" line="167"/>
      <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"
               filename="hb-ot-layout.cc"
               line="532">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="table_tag" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="533">HB_OT_TAG_GSUB or HB_OT_TAG_GPOS</doc>
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="script_count" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="534">Number of script tags in the array</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="script_tags" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="535">Array of #hb_tag_t script tags</doc>
          <type name="tag_t" c:type="const hb_tag_t*"/>
        </parameter>
        <parameter name="script_index"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="536">The index of the requested script</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="chosen_script"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="hb-ot-layout.cc"
               line="537">#hb_tag_t of the requested script</doc>
          <type name="tag_t" c:type="hb_tag_t*"/>
        </parameter>
      </parameters>
    </function>
    <enumeration name="ot_math_constant_t"
                 version="1.3.3"
                 glib:type-name="hb_ot_math_constant_t"
                 glib:get-type="hb_gobject_ot_math_constant_get_type"
                 c:type="hb_ot_math_constant_t">
      <doc xml:space="preserve"
           filename="hb-ot-math.h"
           line="50">The 'MATH' table constants specified at
https://docs.microsoft.com/en-us/typography/opentype/spec/math</doc>
      <member name="script_percent_scale_down"
              value="0"
              c:identifier="HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN"
              glib:nick="script-percent-scale-down">
      </member>
      <member name="script_script_percent_scale_down"
              value="1"
              c:identifier="HB_OT_MATH_CONSTANT_SCRIPT_SCRIPT_PERCENT_SCALE_DOWN"
              glib:nick="script-script-percent-scale-down">
      </member>
      <member name="delimited_sub_formula_min_height"
              value="2"
              c:identifier="HB_OT_MATH_CONSTANT_DELIMITED_SUB_FORMULA_MIN_HEIGHT"
              glib:nick="delimited-sub-formula-min-height">
      </member>
      <member name="display_operator_min_height"
              value="3"
              c:identifier="HB_OT_MATH_CONSTANT_DISPLAY_OPERATOR_MIN_HEIGHT"
              glib:nick="display-operator-min-height">
      </member>
      <member name="math_leading"
              value="4"
              c:identifier="HB_OT_MATH_CONSTANT_MATH_LEADING"
              glib:nick="math-leading">
      </member>
      <member name="axis_height"
              value="5"
              c:identifier="HB_OT_MATH_CONSTANT_AXIS_HEIGHT"
              glib:nick="axis-height">
      </member>
      <member name="accent_base_height"
              value="6"
              c:identifier="HB_OT_MATH_CONSTANT_ACCENT_BASE_HEIGHT"
              glib:nick="accent-base-height">
      </member>
      <member name="flattened_accent_base_height"
              value="7"
              c:identifier="HB_OT_MATH_CONSTANT_FLATTENED_ACCENT_BASE_HEIGHT"
              glib:nick="flattened-accent-base-height">
      </member>
      <member name="subscript_shift_down"
              value="8"
              c:identifier="HB_OT_MATH_CONSTANT_SUBSCRIPT_SHIFT_DOWN"
              glib:nick="subscript-shift-down">
      </member>
      <member name="subscript_top_max"
              value="9"
              c:identifier="HB_OT_MATH_CONSTANT_SUBSCRIPT_TOP_MAX"
              glib:nick="subscript-top-max">
      </member>
      <member name="subscript_baseline_drop_min"
              value="10"
              c:identifier="HB_OT_MATH_CONSTANT_SUBSCRIPT_BASELINE_DROP_MIN"
              glib:nick="subscript-baseline-drop-min">
      </member>
      <member name="superscript_shift_up"
              value="11"
              c:identifier="HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP"
              glib:nick="superscript-shift-up">
      </member>
      <member name="superscript_shift_up_cramped"
              value="12"
              c:identifier="HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP_CRAMPED"
              glib:nick="superscript-shift-up-cramped">
      </member>
      <member name="superscript_bottom_min"
              value="13"
              c:identifier="HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MIN"
              glib:nick="superscript-bottom-min">
      </member>
      <member name="superscript_baseline_drop_max"
              value="14"
              c:identifier="HB_OT_MATH_CONSTANT_SUPERSCRIPT_BASELINE_DROP_MAX"
              glib:nick="superscript-baseline-drop-max">
      </member>
      <member name="sub_superscript_gap_min"
              value="15"
              c:identifier="HB_OT_MATH_CONSTANT_SUB_SUPERSCRIPT_GAP_MIN"
              glib:nick="sub-superscript-gap-min">
      </member>
      <member name="superscript_bottom_max_with_subscript"
              value="16"
              c:identifier="HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPT"
              glib:nick="superscript-bottom-max-with-subscript">
      </member>
      <member name="space_after_script"
              value="17"
              c:identifier="HB_OT_MATH_CONSTANT_SPACE_AFTER_SCRIPT"
              glib:nick="space-after-script">
      </member>
      <member name="upper_limit_gap_min"
              value="18"
              c:identifier="HB_OT_MATH_CONSTANT_UPPER_LIMIT_GAP_MIN"
              glib:nick="upper-limit-gap-min">
      </member>
      <member name="upper_limit_baseline_rise_min"
              value="19"
              c:identifier="HB_OT_MATH_CONSTANT_UPPER_LIMIT_BASELINE_RISE_MIN"
              glib:nick="upper-limit-baseline-rise-min">
      </member>
      <member name="lower_limit_gap_min"
              value="20"
              c:identifier="HB_OT_MATH_CONSTANT_LOWER_LIMIT_GAP_MIN"
              glib:nick="lower-limit-gap-min">
      </member>
      <member name="lower_limit_baseline_drop_min"
              value="21"
              c:identifier="HB_OT_MATH_CONSTANT_LOWER_LIMIT_BASELINE_DROP_MIN"
              glib:nick="lower-limit-baseline-drop-min">
      </member>
      <member name="stack_top_shift_up"
              value="22"
              c:identifier="HB_OT_MATH_CONSTANT_STACK_TOP_SHIFT_UP"
              glib:nick="stack-top-shift-up">
      </member>
      <member name="stack_top_display_style_shift_up"
              value="23"
              c:identifier="HB_OT_MATH_CONSTANT_STACK_TOP_DISPLAY_STYLE_SHIFT_UP"
              glib:nick="stack-top-display-style-shift-up">
      </member>
      <member name="stack_bottom_shift_down"
              value="24"
              c:identifier="HB_OT_MATH_CONSTANT_STACK_BOTTOM_SHIFT_DOWN"
              glib:nick="stack-bottom-shift-down">
      </member>
      <member name="stack_bottom_display_style_shift_down"
              value="25"
              c:identifier="HB_OT_MATH_CONSTANT_STACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWN"
              glib:nick="stack-bottom-display-style-shift-down">
      </member>
      <member name="stack_gap_min"
              value="26"
              c:identifier="HB_OT_MATH_CONSTANT_STACK_GAP_MIN"
              glib:nick="stack-gap-min">
      </member>
      <member name="stack_display_style_gap_min"
              value="27"
              c:identifier="HB_OT_MATH_CONSTANT_STACK_DISPLAY_STYLE_GAP_MIN"
              glib:nick="stack-display-style-gap-min">
      </member>
      <member name="stretch_stack_top_shift_up"
              value="28"
              c:identifier="HB_OT_MATH_CONSTANT_STRETCH_STACK_TOP_SHIFT_UP"
              glib:nick="stretch-stack-top-shift-up">
      </member>
      <member name="stretch_stack_bottom_shift_down"
              value="29"
              c:identifier="HB_OT_MATH_CONSTANT_STRETCH_STACK_BOTTOM_SHIFT_DOWN"
              glib:nick="stretch-stack-bottom-shift-down">
      </member>
      <member name="stretch_stack_gap_above_min"
              value="30"
              c:identifier="HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_ABOVE_MIN"
              glib:nick="stretch-stack-gap-above-min">
      </member>
      <member name="stretch_stack_gap_below_min"
              value="31"
              c:identifier="HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_BELOW_MIN"
              glib:nick="stretch-stack-gap-below-min">
      </member>
      <member name="fraction_numerator_shift_up"
              value="32"
              c:identifier="HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_SHIFT_UP"
              glib:nick="fraction-numerator-shift-up">
      </member>
      <member name="fraction_numerator_display_style_shift_up"
              value="33"
              c:identifier="HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UP"
              glib:nick="fraction-numerator-display-style-shift-up">
      </member>
      <member name="fraction_denominator_shift_down"
              value="34"
              c:identifier="HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_SHIFT_DOWN"
              glib:nick="fraction-denominator-shift-down">
      </member>
      <member name="fraction_denominator_display_style_shift_down"
              value="35"
              c:identifier="HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWN"
              glib:nick="fraction-denominator-display-style-shift-down">
      </member>
      <member name="fraction_numerator_gap_min"
              value="36"
              c:identifier="HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_GAP_MIN"
              glib:nick="fraction-numerator-gap-min">
      </member>
      <member name="fraction_num_display_style_gap_min"
              value="37"
              c:identifier="HB_OT_MATH_CONSTANT_FRACTION_NUM_DISPLAY_STYLE_GAP_MIN"
              glib:nick="fraction-num-display-style-gap-min">
      </member>
      <member name="fraction_rule_thickness"
              value="38"
              c:identifier="HB_OT_MATH_CONSTANT_FRACTION_RULE_THICKNESS"
              glib:nick="fraction-rule-thickness">
      </member>
      <member name="fraction_denominator_gap_min"
              value="39"
              c:identifier="HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_GAP_MIN"
              glib:nick="fraction-denominator-gap-min">
      </member>
      <member name="fraction_denom_display_style_gap_min"
              value="40"
              c:identifier="HB_OT_MATH_CONSTANT_FRACTION_DENOM_DISPLAY_STYLE_GAP_MIN"
              glib:nick="fraction-denom-display-style-gap-min">
      </member>
      <member name="skewed_fraction_horizontal_gap"
              value="41"
              c:identifier="HB_OT_MATH_CONSTANT_SKEWED_FRACTION_HORIZONTAL_GAP"
              glib:nick="skewed-fraction-horizontal-gap">
      </member>
      <member name="skewed_fraction_vertical_gap"
              value="42"
              c:identifier="HB_OT_MATH_CONSTANT_SKEWED_FRACTION_VERTICAL_GAP"
              glib:nick="skewed-fraction-vertical-gap">
      </member>
      <member name="overbar_vertical_gap"
              value="43"
              c:identifier="HB_OT_MATH_CONSTANT_OVERBAR_VERTICAL_GAP"
              glib:nick="overbar-vertical-gap">
      </member>
      <member name="overbar_rule_thickness"
              value="44"
              c:identifier="HB_OT_MATH_CONSTANT_OVERBAR_RULE_THICKNESS"
              glib:nick="overbar-rule-thickness">
      </member>
      <member name="overbar_extra_ascender"
              value="45"
              c:identifier="HB_OT_MATH_CONSTANT_OVERBAR_EXTRA_ASCENDER"
              glib:nick="overbar-extra-ascender">
      </member>
      <member name="underbar_vertical_gap"
              value="46"
              c:identifier="HB_OT_MATH_CONSTANT_UNDERBAR_VERTICAL_GAP"
              glib:nick="underbar-vertical-gap">
      </member>
      <member name="underbar_rule_thickness"
              value="47"
              c:identifier="HB_OT_MATH_CONSTANT_UNDERBAR_RULE_THICKNESS"
              glib:nick="underbar-rule-thickness">
      </member>
      <member name="underbar_extra_descender"
              value="48"
              c:identifier="HB_OT_MATH_CONSTANT_UNDERBAR_EXTRA_DESCENDER"
              glib:nick="underbar-extra-descender">
      </member>
      <member name="radical_vertical_gap"
              value="49"
              c:identifier="HB_OT_MATH_CONSTANT_RADICAL_VERTICAL_GAP"
              glib:nick="radical-vertical-gap">
      </member>
      <member name="radical_display_style_vertical_gap"
              value="50"
              c:identifier="HB_OT_MATH_CONSTANT_RADICAL_DISPLAY_STYLE_VERTICAL_GAP"
              glib:nick="radical-display-style-vertical-gap">
      </member>
      <member name="radical_rule_thickness"
              value="51"
              c:identifier="HB_OT_MATH_CONSTANT_RADICAL_RULE_THICKNESS"
              glib:nick="radical-rule-thickness">
      </member>
      <member name="radical_extra_ascender"
              value="52"
              c:identifier="HB_OT_MATH_CONSTANT_RADICAL_EXTRA_ASCENDER"
              glib:nick="radical-extra-ascender">
      </member>
      <member name="radical_kern_before_degree"
              value="53"
              c:identifier="HB_OT_MATH_CONSTANT_RADICAL_KERN_BEFORE_DEGREE"
              glib:nick="radical-kern-before-degree">
      </member>
      <member name="radical_kern_after_degree"
              value="54"
              c:identifier="HB_OT_MATH_CONSTANT_RADICAL_KERN_AFTER_DEGREE"
              glib:nick="radical-kern-after-degree">
      </member>
      <member name="radical_degree_bottom_raise_percent"
              value="55"
              c:identifier="HB_OT_MATH_CONSTANT_RADICAL_DEGREE_BOTTOM_RAISE_PERCENT"
              glib:nick="radical-degree-bottom-raise-percent">
      </member>
    </enumeration>
    <function name="ot_math_get_constant"
              c:identifier="hb_ot_math_get_constant"
              version="1.3.3">
      <doc xml:space="preserve"
           filename="hb-ot-math.cc"
           line="69">Fetches the specified math constant. For most constants, the value returned
is an #hb_position_t.

However, if the requested constant is #HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN,
#HB_OT_MATH_CONSTANT_SCRIPT_SCRIPT_PERCENT_SCALE_DOWN or
#HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN, then the return value is
an integer between 0 and 100 representing that percentage.</doc>
      <source-position filename="hb-ot-math.h" line="185"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-math.cc"
             line="82">the requested constant or zero</doc>
        <type name="position_t" c:type="hb_position_t"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-math.cc"
               line="71">#hb_font_t to work upon</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="constant" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-math.cc"
               line="72">#hb_ot_math_constant_t the constant to retrieve</doc>
          <type name="ot_math_constant_t" c:type="hb_ot_math_constant_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_math_get_glyph_assembly"
              c:identifier="hb_ot_math_get_glyph_assembly"
              version="1.3.3">
      <doc xml:space="preserve"
           filename="hb-ot-math.cc"
           line="249">Fetches the GlyphAssembly for the specified font, glyph index, and direction.
Returned are a list of #hb_ot_math_glyph_part_t glyph parts that can be
used to draw the glyph and an italics-correction value (if one is defined
in the font).

&lt;note&gt;The @direction parameter is only used to select between horizontal
or vertical directions for the construction. Even though all #hb_direction_t
values are accepted, only the result of #HB_DIRECTION_IS_HORIZONTAL is
considered.&lt;/note&gt;</doc>
      <source-position filename="hb-ot-math.h" line="219"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-math.cc"
             line="270">the total number of parts in the glyph assembly</doc>
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-math.cc"
               line="251">#hb_font_t to work upon</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-math.cc"
               line="252">The index of the glyph to stretch</doc>
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="direction" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-math.cc"
               line="253">direction of the stretching (horizontal or vertical)</doc>
          <type name="direction_t" c:type="hb_direction_t"/>
        </parameter>
        <parameter name="start_offset" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-math.cc"
               line="254">offset of the first glyph part to retrieve</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="parts_count"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="hb-ot-math.cc"
               line="255">Input = maximum number of glyph parts to return;
              Output = actual number of parts returned</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="parts"
                   direction="out"
                   caller-allocates="1"
                   transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-math.cc"
               line="257">the glyph parts returned</doc>
          <array length="4"
                 zero-terminated="0"
                 c:type="hb_ot_math_glyph_part_t*">
            <type name="ot_math_glyph_part_t"
                  c:type="hb_ot_math_glyph_part_t"/>
          </array>
        </parameter>
        <parameter name="italics_correction"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="hb-ot-math.cc"
               line="258">italics correction of the glyph assembly</doc>
          <type name="position_t" c:type="hb_position_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_math_get_glyph_italics_correction"
              c:identifier="hb_ot_math_get_glyph_italics_correction"
              version="1.3.3">
      <doc xml:space="preserve"
           filename="hb-ot-math.cc"
           line="93">Fetches an italics-correction value (if one exists) for the specified
glyph index.</doc>
      <source-position filename="hb-ot-math.h" line="189"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-math.cc"
             line="101">the italics correction of the glyph or zero</doc>
        <type name="position_t" c:type="hb_position_t"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-math.cc"
               line="95">#hb_font_t to work upon</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-math.cc"
               line="96">The glyph index from which to retrieve the value</doc>
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_math_get_glyph_kerning"
              c:identifier="hb_ot_math_get_glyph_kerning"
              version="1.3.3">
      <doc xml:space="preserve"
           filename="hb-ot-math.cc"
           line="156">Fetches the math kerning (cut-ins) value for the specified font, glyph index, and
@kern.

If the MathKern table is found, the function examines it to find a height
value that is greater or equal to @correction_height. If such a height
value is found, corresponding kerning value from the table is returned. If
no such height value is found, the last kerning value is returned.</doc>
      <source-position filename="hb-ot-math.h" line="201"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-math.cc"
             line="171">requested kerning value or zero</doc>
        <type name="position_t" c:type="hb_position_t"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-math.cc"
               line="158">#hb_font_t to work upon</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-math.cc"
               line="159">The glyph index from which to retrieve the value</doc>
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="kern" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-math.cc"
               line="160">The #hb_ot_math_kern_t from which to retrieve the value</doc>
          <type name="ot_math_kern_t" c:type="hb_ot_math_kern_t"/>
        </parameter>
        <parameter name="correction_height" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-math.cc"
               line="161">the correction height to use to determine the kerning.</doc>
          <type name="position_t" c:type="hb_position_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_math_get_glyph_top_accent_attachment"
              c:identifier="hb_ot_math_get_glyph_top_accent_attachment"
              version="1.3.3">
      <doc xml:space="preserve"
           filename="hb-ot-math.cc"
           line="112">Fetches a top-accent-attachment value (if one exists) for the specified
glyph index.

For any glyph that does not have a top-accent-attachment value - that is,
a glyph not covered by the `MathTopAccentAttachment` table (or, when
@font has no `MathTopAccentAttachment` table or no `MATH` table, any
glyph) - the function synthesizes a value, returning the position at
one-half the glyph's advance width.</doc>
      <source-position filename="hb-ot-math.h" line="193"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-math.cc"
             line="126">the top accent attachment of the glyph or 0.5 * the advance
              width of @glyph</doc>
        <type name="position_t" c:type="hb_position_t"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-math.cc"
               line="114">#hb_font_t to work upon</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-math.cc"
               line="115">The glyph index from which to retrieve the value</doc>
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_math_get_glyph_variants"
              c:identifier="hb_ot_math_get_glyph_variants"
              version="1.3.3">
      <doc xml:space="preserve"
           filename="hb-ot-math.cc"
           line="187">Fetches the MathGlyphConstruction for the specified font, glyph index, and
direction. The corresponding list of size variants is returned as a list of
#hb_ot_math_glyph_variant_t structs.

&lt;note&gt;The @direction parameter is only used to select between horizontal
or vertical directions for the construction. Even though all #hb_direction_t
values are accepted, only the result of #HB_DIRECTION_IS_HORIZONTAL is
considered.&lt;/note&gt;</doc>
      <source-position filename="hb-ot-math.h" line="207"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-math.cc"
             line="206">the total number of size variants available or zero</doc>
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-math.cc"
               line="189">#hb_font_t to work upon</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-math.cc"
               line="190">The index of the glyph to stretch</doc>
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="direction" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-math.cc"
               line="191">The direction of the stretching (horizontal or vertical)</doc>
          <type name="direction_t" c:type="hb_direction_t"/>
        </parameter>
        <parameter name="start_offset" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-math.cc"
               line="192">offset of the first variant to retrieve</doc>
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="variants_count"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="hb-ot-math.cc"
               line="193">Input = the maximum number of variants to return;
                          Output = the actual number of variants returned</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="variants"
                   direction="out"
                   caller-allocates="1"
                   transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-math.cc"
               line="195">array of variants returned</doc>
          <array length="4"
                 zero-terminated="0"
                 c:type="hb_ot_math_glyph_variant_t*">
            <type name="ot_math_glyph_variant_t"
                  c:type="hb_ot_math_glyph_variant_t"/>
          </array>
        </parameter>
      </parameters>
    </function>
    <function name="ot_math_get_min_connector_overlap"
              c:identifier="hb_ot_math_get_min_connector_overlap"
              version="1.3.3">
      <doc xml:space="preserve"
           filename="hb-ot-math.cc"
           line="224">Fetches the MathVariants table for the specified font and returns the
minimum overlap of connecting glyphs that are required to draw a glyph
assembly in the specified direction.

&lt;note&gt;The @direction parameter is only used to select between horizontal
or vertical directions for the construction. Even though all #hb_direction_t
values are accepted, only the result of #HB_DIRECTION_IS_HORIZONTAL is
considered.&lt;/note&gt;</doc>
      <source-position filename="hb-ot-math.h" line="215"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-math.cc"
             line="238">requested minimum connector overlap or zero</doc>
        <type name="position_t" c:type="hb_position_t"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-math.cc"
               line="226">#hb_font_t to work upon</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="direction" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-math.cc"
               line="227">direction of the stretching (horizontal or vertical)</doc>
          <type name="direction_t" c:type="hb_direction_t"/>
        </parameter>
      </parameters>
    </function>
    <bitfield name="ot_math_glyph_part_flags_t"
              version="1.3.3"
              glib:type-name="hb_ot_math_glyph_part_flags_t"
              glib:get-type="hb_gobject_ot_math_glyph_part_flags_get_type"
              c:type="hb_ot_math_glyph_part_flags_t">
      <doc xml:space="preserve"
           filename="hb-ot-math.h"
           line="146">Flags for math glyph parts.</doc>
      <member name="extender"
              value="1"
              c:identifier="HB_OT_MATH_GLYPH_PART_FLAG_EXTENDER"
              glib:nick="extender">
      </member>
    </bitfield>
    <record name="ot_math_glyph_part_t"
            c:type="hb_ot_math_glyph_part_t"
            version="1.3.3"
            glib:type-name="hb_ot_math_glyph_part_t"
            glib:get-type="hb_gobject_ot_math_glyph_part_get_type"
            c:symbol-prefix="gobject_ot_math_glyph_part">
      <doc xml:space="preserve"
           filename="hb-ot-math.h"
           line="157">Data type to hold information for a "part" component of a math-variant glyph.
Large variants for stretchable math glyphs (such as parentheses) can be constructed
on the fly from parts.</doc>
      <source-position filename="hb-ot-math.h" line="177"/>
      <field name="glyph" writable="1">
        <doc xml:space="preserve"
             filename="hb-ot-math.h"
             line="159">The glyph index of the variant part</doc>
        <type name="codepoint_t" c:type="hb_codepoint_t"/>
      </field>
      <field name="start_connector_length" writable="1">
        <doc xml:space="preserve"
             filename="hb-ot-math.h"
             line="160">The length of the connector on the starting side of the variant part</doc>
        <type name="position_t" c:type="hb_position_t"/>
      </field>
      <field name="end_connector_length" writable="1">
        <type name="position_t" c:type="hb_position_t"/>
      </field>
      <field name="full_advance" writable="1">
        <doc xml:space="preserve"
             filename="hb-ot-math.h"
             line="162">The total advance of the part</doc>
        <type name="position_t" c:type="hb_position_t"/>
      </field>
      <field name="flags" writable="1">
        <doc xml:space="preserve"
             filename="hb-ot-math.h"
             line="163">#hb_ot_math_glyph_part_flags_t flags for the part</doc>
        <type name="ot_math_glyph_part_flags_t"
              c:type="hb_ot_math_glyph_part_flags_t"/>
      </field>
    </record>
    <record name="ot_math_glyph_variant_t"
            c:type="hb_ot_math_glyph_variant_t"
            version="1.3.3"
            glib:type-name="hb_ot_math_glyph_variant_t"
            glib:get-type="hb_gobject_ot_math_glyph_variant_get_type"
            c:symbol-prefix="gobject_ot_math_glyph_variant">
      <doc xml:space="preserve"
           filename="hb-ot-math.h"
           line="132">Data type to hold math-variant information for a glyph.</doc>
      <source-position filename="hb-ot-math.h" line="144"/>
      <field name="glyph" writable="1">
        <doc xml:space="preserve"
             filename="hb-ot-math.h"
             line="134">The glyph index of the variant</doc>
        <type name="codepoint_t" c:type="hb_codepoint_t"/>
      </field>
      <field name="advance" writable="1">
        <doc xml:space="preserve"
             filename="hb-ot-math.h"
             line="135">The advance width of the variant</doc>
        <type name="position_t" c:type="hb_position_t"/>
      </field>
    </record>
    <function name="ot_math_has_data"
              c:identifier="hb_ot_math_has_data"
              version="1.3.3">
      <doc xml:space="preserve"
           filename="hb-ot-math.cc"
           line="53">Tests whether a face has a `MATH` table.</doc>
      <source-position filename="hb-ot-math.h" line="182"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-math.cc"
             line="59">true if the table is found, false otherwise</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-math.cc"
               line="55">#hb_face_t to test</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_math_is_glyph_extended_shape"
              c:identifier="hb_ot_math_is_glyph_extended_shape"
              version="1.3.3">
      <doc xml:space="preserve"
           filename="hb-ot-math.cc"
           line="138">Tests whether the given glyph index is an extended shape in the face.</doc>
      <source-position filename="hb-ot-math.h" line="197"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-math.cc"
             line="145">true if the glyph is an extended shape, false otherwise</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-math.cc"
               line="140">#hb_face_t to work upon</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="glyph" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-math.cc"
               line="141">The glyph index to test</doc>
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
      </parameters>
    </function>
    <enumeration name="ot_math_kern_t"
                 version="1.3.3"
                 glib:type-name="hb_ot_math_kern_t"
                 glib:get-type="hb_gobject_ot_math_kern_get_type"
                 c:type="hb_ot_math_kern_t">
      <doc xml:space="preserve"
           filename="hb-ot-math.h"
           line="117">The math kerning-table types defined for the four corners
of a glyph.</doc>
      <member name="top_right"
              value="0"
              c:identifier="HB_OT_MATH_KERN_TOP_RIGHT"
              glib:nick="top-right">
      </member>
      <member name="top_left"
              value="1"
              c:identifier="HB_OT_MATH_KERN_TOP_LEFT"
              glib:nick="top-left">
      </member>
      <member name="bottom_right"
              value="2"
              c:identifier="HB_OT_MATH_KERN_BOTTOM_RIGHT"
              glib:nick="bottom-right">
      </member>
      <member name="bottom_left"
              value="3"
              c:identifier="HB_OT_MATH_KERN_BOTTOM_LEFT"
              glib:nick="bottom-left">
      </member>
    </enumeration>
    <record name="ot_name_entry_t" c:type="hb_ot_name_entry_t" version="2.1.0">
      <doc xml:space="preserve"
           filename="hb-ot-name.h"
           line="82">Structure representing a name ID in a particular language.</doc>
      <source-position filename="hb-ot-name.h" line="98"/>
      <field name="name_id" writable="1">
        <doc xml:space="preserve"
             filename="hb-ot-name.h"
             line="84">name ID</doc>
        <type name="ot_name_id_t" c:type="hb_ot_name_id_t"/>
      </field>
      <field name="var" readable="0" private="1">
        <type name="var_int_t" c:type="hb_var_int_t"/>
      </field>
      <field name="language" writable="1">
        <doc xml:space="preserve"
             filename="hb-ot-name.h"
             line="85">language</doc>
        <type name="language_t" c:type="hb_language_t"/>
      </field>
    </record>
    <function name="ot_name_get_utf16"
              c:identifier="hb_ot_name_get_utf16"
              version="2.1.0">
      <doc xml:space="preserve"
           filename="hb-ot-name.cc"
           line="175">Fetches a font name from the OpenType 'name' table.
If @language is #HB_LANGUAGE_INVALID, English ("en") is assumed.
Returns string in UTF-16 encoding.</doc>
      <source-position filename="hb-ot-name.h" line="113"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-name.cc"
             line="188">full length of the requested string, or 0 if not found.</doc>
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-name.cc"
               line="177">font face.</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="name_id" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-name.cc"
               line="178">OpenType name identifier to fetch.</doc>
          <type name="ot_name_id_t" c:type="hb_ot_name_id_t"/>
        </parameter>
        <parameter name="language" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-name.cc"
               line="179">language to fetch the name for.</doc>
          <type name="language_t" c:type="hb_language_t"/>
        </parameter>
        <parameter name="text_size"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full"
                   nullable="1">
          <doc xml:space="preserve"
               filename="hb-ot-name.cc"
               line="180">input size of @text buffer, and output size of
                                  text written to buffer.</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="text"
                   direction="out"
                   caller-allocates="1"
                   transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-name.cc"
               line="182">buffer to write fetched name into.</doc>
          <array length="3" zero-terminated="0" c:type="uint16_t*">
            <type name="guint16" c:type="uint16_t"/>
          </array>
        </parameter>
      </parameters>
    </function>
    <function name="ot_name_get_utf32"
              c:identifier="hb_ot_name_get_utf32"
              version="2.1.0">
      <doc xml:space="preserve"
           filename="hb-ot-name.cc"
           line="201">Fetches a font name from the OpenType 'name' table.
If @language is #HB_LANGUAGE_INVALID, English ("en") is assumed.
Returns string in UTF-32 encoding.</doc>
      <source-position filename="hb-ot-name.h" line="120"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-name.cc"
             line="214">full length of the requested string, or 0 if not found.</doc>
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-name.cc"
               line="203">font face.</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="name_id" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-name.cc"
               line="204">OpenType name identifier to fetch.</doc>
          <type name="ot_name_id_t" c:type="hb_ot_name_id_t"/>
        </parameter>
        <parameter name="language" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-name.cc"
               line="205">language to fetch the name for.</doc>
          <type name="language_t" c:type="hb_language_t"/>
        </parameter>
        <parameter name="text_size"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full"
                   nullable="1">
          <doc xml:space="preserve"
               filename="hb-ot-name.cc"
               line="206">input size of @text buffer, and output size of
                                  text written to buffer.</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="text"
                   direction="out"
                   caller-allocates="1"
                   transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-name.cc"
               line="208">buffer to write fetched name into.</doc>
          <array length="3" zero-terminated="0" c:type="uint32_t*">
            <type name="guint32" c:type="uint32_t"/>
          </array>
        </parameter>
      </parameters>
    </function>
    <function name="ot_name_get_utf8"
              c:identifier="hb_ot_name_get_utf8"
              version="2.1.0">
      <doc xml:space="preserve"
           filename="hb-ot-name.cc"
           line="148">Fetches a font name from the OpenType 'name' table.
If @language is #HB_LANGUAGE_INVALID, English ("en") is assumed.
Returns string in UTF-8 encoding.</doc>
      <source-position filename="hb-ot-name.h" line="106"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-name.cc"
             line="161">full length of the requested string, or 0 if not found.</doc>
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-name.cc"
               line="150">font face.</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="name_id" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-name.cc"
               line="151">OpenType name identifier to fetch.</doc>
          <type name="ot_name_id_t" c:type="hb_ot_name_id_t"/>
        </parameter>
        <parameter name="language" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-name.cc"
               line="152">language to fetch the name for.</doc>
          <type name="language_t" c:type="hb_language_t"/>
        </parameter>
        <parameter name="text_size"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full"
                   nullable="1">
          <doc xml:space="preserve"
               filename="hb-ot-name.cc"
               line="153">input size of @text buffer, and output size of
                                  text written to buffer.</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="text"
                   direction="out"
                   caller-allocates="1"
                   transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-name.cc"
               line="155">buffer to write fetched name into.</doc>
          <array length="3" zero-terminated="0" c:type="char*">
            <type name="utf8" c:type="char"/>
          </array>
        </parameter>
      </parameters>
    </function>
    <function name="ot_name_list_names"
              c:identifier="hb_ot_name_list_names"
              version="2.1.0">
      <doc xml:space="preserve"
           filename="hb-ot-name.cc"
           line="46">Enumerates all available name IDs and language combinations. Returned
array is owned by the @face and should not be modified.  It can be
used as long as @face is alive.</doc>
      <source-position filename="hb-ot-name.h" line="101"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-name.cc"
             line="55">Array of available name entries.</doc>
        <array length="1"
               zero-terminated="0"
               c:type="const hb_ot_name_entry_t*">
          <type name="ot_name_entry_t" c:type="hb_ot_name_entry_t"/>
        </array>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-name.cc"
               line="48">font face.</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="num_entries"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full"
                   optional="1"
                   allow-none="1">
          <doc xml:space="preserve"
               filename="hb-ot-name.cc"
               line="49">number of returned entries.</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_shape_glyphs_closure"
              c:identifier="hb_ot_shape_glyphs_closure"
              version="0.9.2">
      <source-position filename="hb-ot-shape.h" line="40"/>
      <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_tag_from_language"
              c:identifier="hb_ot_tag_from_language">
      <source-position filename="hb-ot-deprecated.h" line="68"/>
      <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">
      <source-position filename="hb-ot-layout.h" line="80"/>
      <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">
      <source-position filename="hb-ot-layout.h" line="77"/>
      <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">
      <source-position filename="hb-ot-deprecated.h" line="63"/>
      <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>
    <function name="ot_tags_from_script_and_language"
              c:identifier="hb_ot_tags_from_script_and_language"
              version="2.0.0">
      <doc xml:space="preserve"
           filename="hb-ot-tag.cc"
           line="333">Converts an #hb_script_t and an #hb_language_t to script and language tags.</doc>
      <source-position filename="hb-ot-layout.h" line="69"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="script" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-tag.cc"
               line="335">an #hb_script_t to convert.</doc>
          <type name="script_t" c:type="hb_script_t"/>
        </parameter>
        <parameter name="language" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-tag.cc"
               line="336">an #hb_language_t to convert.</doc>
          <type name="language_t" c:type="hb_language_t"/>
        </parameter>
        <parameter name="script_count"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve"
               filename="hb-ot-tag.cc"
               line="337">maximum number of script tags to retrieve (IN)
and actual number of script tags retrieved (OUT)</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="script_tags"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full"
                   optional="1"
                   allow-none="1">
          <doc xml:space="preserve"
               filename="hb-ot-tag.cc"
               line="339">array of size at least @script_count to store the
script tag results</doc>
          <type name="tag_t" c:type="hb_tag_t*"/>
        </parameter>
        <parameter name="language_count"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve"
               filename="hb-ot-tag.cc"
               line="341">maximum number of language tags to retrieve
(IN) and actual number of language tags retrieved (OUT)</doc>
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="language_tags"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full"
                   optional="1"
                   allow-none="1">
          <doc xml:space="preserve"
               filename="hb-ot-tag.cc"
               line="343">array of size at least @language_count to store
the language tag results</doc>
          <type name="tag_t" c:type="hb_tag_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_tags_to_script_and_language"
              c:identifier="hb_ot_tags_to_script_and_language"
              version="2.0.0">
      <doc xml:space="preserve"
           filename="hb-ot-tag.cc"
           line="462">Converts a script tag and a language tag to an #hb_script_t and an
#hb_language_t.</doc>
      <source-position filename="hb-ot-layout.h" line="83"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="script_tag" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-tag.cc"
               line="464">a script tag</doc>
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="language_tag" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-tag.cc"
               line="465">a language tag</doc>
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="script"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve"
               filename="hb-ot-tag.cc"
               line="466">the #hb_script_t corresponding to @script_tag (OUT).</doc>
          <type name="script_t" c:type="hb_script_t*"/>
        </parameter>
        <parameter name="language"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve"
               filename="hb-ot-tag.cc"
               line="467">the #hb_language_t corresponding to @script_tag and
@language_tag (OUT).</doc>
          <type name="language_t" c:type="hb_language_t*"/>
        </parameter>
      </parameters>
    </function>
    <bitfield name="ot_var_axis_flags_t"
              version="2.2.0"
              glib:type-name="hb_ot_var_axis_flags_t"
              glib:get-type="hb_gobject_ot_var_axis_flags_get_type"
              c:type="hb_ot_var_axis_flags_t">
      <member name="hidden"
              value="1"
              c:identifier="HB_OT_VAR_AXIS_FLAG_HIDDEN"
              glib:nick="hidden">
        <doc xml:space="preserve"
             filename="hb-ot-var.h"
             line="64">The axis should not be exposed directly in user interfaces.</doc>
      </member>
    </bitfield>
    <record name="ot_var_axis_info_t"
            c:type="hb_ot_var_axis_info_t"
            version="2.2.0">
      <source-position filename="hb-ot-var.h" line="90"/>
      <field name="axis_index" writable="1">
        <type name="guint" c:type="unsigned int"/>
      </field>
      <field name="tag" writable="1">
        <type name="tag_t" c:type="hb_tag_t"/>
      </field>
      <field name="name_id" writable="1">
        <type name="ot_name_id_t" c:type="hb_ot_name_id_t"/>
      </field>
      <field name="flags" writable="1">
        <type name="ot_var_axis_flags_t" c:type="hb_ot_var_axis_flags_t"/>
      </field>
      <field name="min_value" writable="1">
        <type name="gfloat" c:type="float"/>
      </field>
      <field name="default_value" writable="1">
        <type name="gfloat" c:type="float"/>
      </field>
      <field name="max_value" writable="1">
        <type name="gfloat" c:type="float"/>
      </field>
      <field name="reserved" readable="0" private="1">
        <type name="guint" c:type="unsigned int"/>
      </field>
    </record>
    <record name="ot_var_axis_t"
            c:type="hb_ot_var_axis_t"
            version="1.4.2"
            deprecated="1"
            deprecated-version="2.2.0">
      <source-position filename="hb-ot-deprecated.h" line="92"/>
      <field name="tag" writable="1">
        <type name="tag_t" c:type="hb_tag_t"/>
      </field>
      <field name="name_id" writable="1">
        <type name="ot_name_id_t" c:type="hb_ot_name_id_t"/>
      </field>
      <field name="min_value" writable="1">
        <type name="gfloat" c:type="float"/>
      </field>
      <field name="default_value" writable="1">
        <type name="gfloat" c:type="float"/>
      </field>
      <field name="max_value" writable="1">
        <type name="gfloat" c:type="float"/>
      </field>
    </record>
    <function name="ot_var_find_axis"
              c:identifier="hb_ot_var_find_axis"
              version="1.4.2"
              deprecated="1"
              deprecated-version="2.2.0">
      <source-position filename="hb-ot-deprecated.h" line="101"/>
      <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="axis_tag" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="axis_index" transfer-ownership="none">
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="axis_info" transfer-ownership="none">
          <type name="ot_var_axis_t" c:type="hb_ot_var_axis_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_var_find_axis_info"
              c:identifier="hb_ot_var_find_axis_info"
              version="2.2.0">
      <source-position filename="hb-ot-var.h" line="99"/>
      <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="axis_tag" transfer-ownership="none">
          <type name="tag_t" c:type="hb_tag_t"/>
        </parameter>
        <parameter name="axis_info" transfer-ownership="none">
          <type name="ot_var_axis_info_t" c:type="hb_ot_var_axis_info_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_var_get_axes"
              c:identifier="hb_ot_var_get_axes"
              version="1.4.2"
              deprecated="1"
              deprecated-version="2.2.0">
      <source-position filename="hb-ot-deprecated.h" line="95"/>
      <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="start_offset" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="axes_count" transfer-ownership="none">
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="axes_array" transfer-ownership="none">
          <type name="ot_var_axis_t" c:type="hb_ot_var_axis_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_var_get_axis_count"
              c:identifier="hb_ot_var_get_axis_count"
              version="1.4.2">
      <source-position filename="hb-ot-var.h" line="60"/>
      <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>
      </parameters>
    </function>
    <function name="ot_var_get_axis_infos"
              c:identifier="hb_ot_var_get_axis_infos"
              version="2.2.0">
      <source-position filename="hb-ot-var.h" line="93"/>
      <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="start_offset" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="axes_count" transfer-ownership="none">
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="axes_array" transfer-ownership="none">
          <type name="ot_var_axis_info_t" c:type="hb_ot_var_axis_info_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_var_get_named_instance_count"
              c:identifier="hb_ot_var_get_named_instance_count">
      <source-position filename="hb-ot-var.h" line="109"/>
      <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>
      </parameters>
    </function>
    <function name="ot_var_has_data"
              c:identifier="hb_ot_var_has_data"
              version="1.4.2">
      <doc xml:space="preserve"
           filename="hb-ot-var.cc"
           line="53">This function allows to verify the presence of OpenType variation data on the face.</doc>
      <source-position filename="hb-ot-var.h" line="51"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-ot-var.cc"
             line="59">true if face has a `fvar' table and false otherwise</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-ot-var.cc"
               line="55">#hb_face_t to test</doc>
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_var_named_instance_get_design_coords"
              c:identifier="hb_ot_var_named_instance_get_design_coords">
      <source-position filename="hb-ot-var.h" line="120"/>
      <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="instance_index" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="coords_length" transfer-ownership="none">
          <type name="guint" c:type="unsigned int*"/>
        </parameter>
        <parameter name="coords" transfer-ownership="none">
          <type name="gfloat" c:type="float*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_var_named_instance_get_postscript_name_id"
              c:identifier="hb_ot_var_named_instance_get_postscript_name_id">
      <source-position filename="hb-ot-var.h" line="116"/>
      <return-value transfer-ownership="none">
        <type name="ot_name_id_t" c:type="hb_ot_name_id_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="instance_index" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_var_named_instance_get_subfamily_name_id"
              c:identifier="hb_ot_var_named_instance_get_subfamily_name_id">
      <source-position filename="hb-ot-var.h" line="112"/>
      <return-value transfer-ownership="none">
        <type name="ot_name_id_t" c:type="hb_ot_name_id_t"/>
      </return-value>
      <parameters>
        <parameter name="face" transfer-ownership="none">
          <type name="face_t" c:type="hb_face_t*"/>
        </parameter>
        <parameter name="instance_index" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_var_normalize_coords"
              c:identifier="hb_ot_var_normalize_coords"
              version="1.4.2">
      <source-position filename="hb-ot-var.h" line="138"/>
      <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="coords_length" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="design_coords" transfer-ownership="none">
          <type name="gfloat" c:type="const float*"/>
        </parameter>
        <parameter name="normalized_coords" transfer-ownership="none">
          <type name="gint" c:type="int*"/>
        </parameter>
      </parameters>
    </function>
    <function name="ot_var_normalize_variations"
              c:identifier="hb_ot_var_normalize_variations"
              version="1.4.2">
      <source-position filename="hb-ot-var.h" line="131"/>
      <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="variations" transfer-ownership="none">
          <type name="variation_t" c:type="const hb_variation_t*"/>
        </parameter>
        <parameter name="variations_length" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="coords" transfer-ownership="none">
          <type name="gint" c:type="int*"/>
        </parameter>
        <parameter name="coords_length" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
      </parameters>
    </function>
    <callback name="reference_table_func_t" c:type="hb_reference_table_func_t">
      <source-position filename="hb-face.h" line="55"/>
      <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"
           filename="hb-common.cc"
           line="426">Converts an ISO 15924 script tag to a corresponding #hb_script_t.</doc>
      <source-position filename="hb-common.h" line="389"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-common.cc"
             line="432">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"
               filename="hb-common.cc"
               line="428">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"
           filename="hb-common.cc"
           line="471">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>
      <source-position filename="hb-common.h" line="392"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-common.cc"
             line="481">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"
               filename="hb-common.cc"
               line="473">a string representing an
      ISO 15924 tag.</doc>
          <array length="1" zero-terminated="0" c:type="const char*">
            <type name="guint8"/>
          </array>
        </parameter>
        <parameter name="len" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-common.cc"
               line="475">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">
      <source-position filename="hb-common.h" line="398"/>
      <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="masaram_gondi"
              value="1198485101"
              c:identifier="HB_SCRIPT_MASARAM_GONDI"
              glib:nick="masaram-gondi">
      </member>
      <member name="nushu"
              value="1316186229"
              c:identifier="HB_SCRIPT_NUSHU"
              glib:nick="nushu">
      </member>
      <member name="soyombo"
              value="1399814511"
              c:identifier="HB_SCRIPT_SOYOMBO"
              glib:nick="soyombo">
      </member>
      <member name="zanabazar_square"
              value="1516334690"
              c:identifier="HB_SCRIPT_ZANABAZAR_SQUARE"
              glib:nick="zanabazar-square">
      </member>
      <member name="dogra"
              value="1148151666"
              c:identifier="HB_SCRIPT_DOGRA"
              glib:nick="dogra">
      </member>
      <member name="gunjala_gondi"
              value="1198485095"
              c:identifier="HB_SCRIPT_GUNJALA_GONDI"
              glib:nick="gunjala-gondi">
      </member>
      <member name="hanifi_rohingya"
              value="1383032935"
              c:identifier="HB_SCRIPT_HANIFI_ROHINGYA"
              glib:nick="hanifi-rohingya">
      </member>
      <member name="makasar"
              value="1298230113"
              c:identifier="HB_SCRIPT_MAKASAR"
              glib:nick="makasar">
      </member>
      <member name="medefaidrin"
              value="1298490470"
              c:identifier="HB_SCRIPT_MEDEFAIDRIN"
              glib:nick="medefaidrin">
      </member>
      <member name="old_sogdian"
              value="1399809903"
              c:identifier="HB_SCRIPT_OLD_SOGDIAN"
              glib:nick="old-sogdian">
      </member>
      <member name="sogdian"
              value="1399809892"
              c:identifier="HB_SCRIPT_SOGDIAN"
              glib:nick="sogdian">
      </member>
      <member name="elymaic"
              value="1164736877"
              c:identifier="HB_SCRIPT_ELYMAIC"
              glib:nick="elymaic">
      </member>
      <member name="nandinagari"
              value="1315008100"
              c:identifier="HB_SCRIPT_NANDINAGARI"
              glib:nick="nandinagari">
      </member>
      <member name="nyiakeng_puachue_hmong"
              value="1215131248"
              c:identifier="HB_SCRIPT_NYIAKENG_PUACHUE_HMONG"
              glib:nick="nyiakeng-puachue-hmong">
      </member>
      <member name="wancho"
              value="1466132591"
              c:identifier="HB_SCRIPT_WANCHO"
              glib:nick="wancho">
      </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"
           filename="hb-common.cc"
           line="492">See hb_script_from_iso15924_tag().</doc>
      <source-position filename="hb-common.h" line="395"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-common.cc"
             line="498">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"
               filename="hb-common.cc"
               line="494">an #hb_script_t 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"
           filename="hb-buffer.cc"
           line="45">Checks the equality of two #hb_segment_properties_t's.</doc>
      <source-position filename="hb-buffer.h" line="161"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-buffer.cc"
             line="52">%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"
               filename="hb-buffer.cc"
               line="47">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"
               filename="hb-buffer.cc"
               line="48">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"
           filename="hb-buffer.cc"
           line="69">Creates a hash representing @p.</doc>
      <source-position filename="hb-buffer.h" line="165"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-buffer.cc"
             line="75">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"
               filename="hb-buffer.cc"
               line="71">#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"
           filename="hb-buffer.h"
           line="135">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>
      <source-position filename="hb-buffer.h" line="152"/>
      <field name="direction" writable="1">
        <doc xml:space="preserve"
             filename="hb-buffer.h"
             line="137">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"
             filename="hb-buffer.h"
             line="138">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"
             filename="hb-buffer.h"
             line="139">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">
      <source-position filename="hb-set.h" line="86"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-set.cc"
               line="210">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">
      <source-position filename="hb-set.h" line="90"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-set.cc"
               line="226">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">
      <source-position filename="hb-set.h" line="73"/>
      <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"
               filename="hb-set.cc"
               line="146">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">
      <source-position filename="hb-set.h" line="76"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-set.cc"
               line="162">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">
      <source-position filename="hb-set.h" line="48"/>
      <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">
      <source-position filename="hb-set.h" line="95"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-set.cc"
               line="244">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">
      <source-position filename="hb-set.h" line="99"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-set.cc"
               line="260">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">
      <source-position filename="hb-set.h" line="57"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve" filename="hb-set.cc" line="91">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">
      <source-position filename="hb-set.h" line="51"/>
      <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"
           filename="hb-set.cc"
           line="441">Finds the maximum number in the set.</doc>
      <source-position filename="hb-set.h" line="140"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-set.cc"
             line="447">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"
               filename="hb-set.cc"
               line="443">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"
           filename="hb-set.cc"
           line="425">Finds the minimum number in the set.</doc>
      <source-position filename="hb-set.h" line="136"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-set.cc"
             line="431">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"
               filename="hb-set.cc"
               line="427">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"
           filename="hb-set.cc"
           line="409">Returns the number of numbers in the set.</doc>
      <source-position filename="hb-set.h" line="132"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-set.cc"
             line="415">set population.</doc>
        <type name="guint" c:type="unsigned int"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-set.cc"
               line="411">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">
      <source-position filename="hb-set.h" line="67"/>
      <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"
               filename="hb-set.cc"
               line="129">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">
      <source-position filename="hb-set.h" line="82"/>
      <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"
               filename="hb-set.cc"
               line="192">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">
      <source-position filename="hb-set.h" line="120"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-set.cc"
               line="346">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"
              deprecated="1"
              deprecated-version="1.6.1">
      <source-position filename="hb-deprecated.h" line="72"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-set.cc"
               line="395">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">
      <source-position filename="hb-set.h" line="79"/>
      <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"
               filename="hb-set.cc"
               line="176">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">
      <source-position filename="hb-set.h" line="104"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-set.cc"
             line="283">%TRUE if the two sets are equal, %FALSE otherwise.</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-set.cc"
               line="278">a set.</doc>
          <type name="set_t" c:type="const hb_set_t*"/>
        </parameter>
        <parameter name="other" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-set.cc"
               line="279">other set.</doc>
          <type name="set_t" c:type="const hb_set_t*"/>
        </parameter>
      </parameters>
    </function>
    <function name="set_is_subset"
              c:identifier="hb_set_is_subset"
              version="1.8.1">
      <source-position filename="hb-set.h" line="108"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-set.cc"
             line="301">%TRUE if the @set is a subset of (or equal to) @larger_set, %FALSE otherwise.</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-set.cc"
               line="296">a set.</doc>
          <type name="set_t" c:type="const hb_set_t*"/>
        </parameter>
        <parameter name="larger_set" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-set.cc"
               line="297">other set.</doc>
          <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">
      <doc xml:space="preserve"
           filename="hb-set.cc"
           line="457">Gets the next number in @set that is greater than current value of @codepoint.

Set @codepoint to %HB_SET_VALUE_INVALID to get started.</doc>
      <source-position filename="hb-set.h" line="144"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-set.cc"
             line="466">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"
               filename="hb-set.cc"
               line="459">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"
           filename="hb-set.cc"
           line="497">Gets the next consecutive range of numbers in @set that
are greater than current value of @last.

Set @last to %HB_SET_VALUE_INVALID to get started.</doc>
      <source-position filename="hb-set.h" line="154"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-set.cc"
             line="508">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"
               filename="hb-set.cc"
               line="499">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"
               filename="hb-set.cc"
               line="500">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"
               filename="hb-set.cc"
               line="501">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_previous"
              c:identifier="hb_set_previous"
              version="1.8.0">
      <doc xml:space="preserve"
           filename="hb-set.cc"
           line="477">Gets the previous number in @set that is slower than current value of @codepoint.

Set @codepoint to %HB_SET_VALUE_INVALID to get started.</doc>
      <source-position filename="hb-set.h" line="149"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-set.cc"
             line="486">whether there was a previous value.</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-set.cc"
               line="479">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_previous_range"
              c:identifier="hb_set_previous_range"
              version="1.8.0">
      <doc xml:space="preserve"
           filename="hb-set.cc"
           line="520">Gets the previous consecutive range of numbers in @set that
are greater than current value of @last.

Set @first to %HB_SET_VALUE_INVALID to get started.</doc>
      <source-position filename="hb-set.h" line="160"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-set.cc"
             line="531">whether there was a previous range.</doc>
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-set.cc"
               line="522">a set.</doc>
          <type name="set_t" c:type="const hb_set_t*"/>
        </parameter>
        <parameter name="first"
                   direction="inout"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="hb-set.cc"
               line="523">input current first and output first codepoint in the range.</doc>
          <type name="codepoint_t" c:type="hb_codepoint_t*"/>
        </parameter>
        <parameter name="last"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="hb-set.cc"
               line="524">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">
      <source-position filename="hb-set.h" line="54"/>
      <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" filename="hb-set.cc" line="77">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">
      <source-position filename="hb-set.h" line="112"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-set.cc"
               line="314">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">
      <source-position filename="hb-set.h" line="60"/>
      <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"
               filename="hb-set.cc"
               line="107">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">
          <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">
      <source-position filename="hb-set.h" line="124"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-set.cc"
               line="362">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">
      <source-position filename="hb-set.h" line="128"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-set.cc"
               line="378">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">
      <source-position filename="hb-set.h" line="44"/>
    </record>
    <function name="set_union" c:identifier="hb_set_union" version="0.9.2">
      <source-position filename="hb-set.h" line="116"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="set" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-set.cc"
               line="330">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"
           filename="hb-shape.cc"
           line="147">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>
      <source-position filename="hb-shape.h" line="44"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="font" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-shape.cc"
               line="149">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"
               filename="hb-shape.cc"
               line="150">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"
               filename="hb-shape.cc"
               line="151">an array of user
   specified #hb_feature_t or %NULL</doc>
          <array length="3" zero-terminated="0" c:type="const 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"
               filename="hb-shape.cc"
               line="153">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"
           filename="hb-shape.cc"
           line="110">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>
      <source-position filename="hb-shape.h" line="50"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-shape.cc"
             line="124">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"
               filename="hb-shape.cc"
               line="112">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"
               filename="hb-shape.cc"
               line="113">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"
               filename="hb-shape.cc"
               line="114">an array of user
   specified #hb_feature_t or %NULL</doc>
          <array length="3" zero-terminated="0" c:type="const 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"
               filename="hb-shape.cc"
               line="116">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"
               filename="hb-shape.cc"
               line="117">a %NULL-terminated
   array of shapers to use or %NULL</doc>
          <array c:type="const char* const*">
            <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"
           filename="hb-shape.cc"
           line="93">Retrieves the list of shapers supported by HarfBuzz.</doc>
      <source-position filename="hb-shape.h" line="57"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-shape.cc"
             line="98">an array of
   constant strings</doc>
        <array c:type="const char**">
          <type name="utf8"/>
        </array>
      </return-value>
    </function>
    <function name="shape_plan_create"
              c:identifier="hb_shape_plan_create"
              version="0.9.7">
      <source-position filename="hb-shape-plan.h" line="42"/>
      <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="const 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="const char* const*">
            <type name="utf8" c:type="char*"/>
          </array>
        </parameter>
      </parameters>
    </function>
    <function name="shape_plan_create2" c:identifier="hb_shape_plan_create2">
      <source-position filename="hb-shape-plan.h" line="56"/>
      <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">
          <type name="feature_t" c:type="const hb_feature_t*"/>
        </parameter>
        <parameter name="num_user_features" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="coords" transfer-ownership="none">
          <type name="gint" c:type="const int*"/>
        </parameter>
        <parameter name="num_coords" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="shaper_list" transfer-ownership="none">
          <type name="utf8" c:type="const char* const*"/>
        </parameter>
      </parameters>
    </function>
    <function name="shape_plan_create_cached"
              c:identifier="hb_shape_plan_create_cached"
              version="0.9.7">
      <source-position filename="hb-shape-plan.h" line="49"/>
      <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="const 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="const char* const*">
            <type name="utf8" c:type="char*"/>
          </array>
        </parameter>
      </parameters>
    </function>
    <function name="shape_plan_create_cached2"
              c:identifier="hb_shape_plan_create_cached2">
      <source-position filename="hb-shape-plan.h" line="65"/>
      <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">
          <type name="feature_t" c:type="const hb_feature_t*"/>
        </parameter>
        <parameter name="num_user_features" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="coords" transfer-ownership="none">
          <type name="gint" c:type="const int*"/>
        </parameter>
        <parameter name="num_coords" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
        <parameter name="shaper_list" transfer-ownership="none">
          <type name="utf8" c:type="const char* const*"/>
        </parameter>
      </parameters>
    </function>
    <function name="shape_plan_destroy"
              c:identifier="hb_shape_plan_destroy"
              version="0.9.7"
              introspectable="0">
      <source-position filename="hb-shape-plan.h" line="81"/>
      <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"
               filename="hb-shape-plan.cc"
               line="273">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">
      <source-position filename="hb-shape-plan.h" line="96"/>
      <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"
               filename="hb-shape-plan.cc"
               line="350">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"
               filename="hb-shape-plan.cc"
               line="351">a font.</doc>
          <type name="font_t" c:type="hb_font_t*"/>
        </parameter>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-shape-plan.cc"
               line="352">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="const 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">
      <source-position filename="hb-shape-plan.h" line="75"/>
      <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">
      <source-position filename="hb-shape-plan.h" line="103"/>
      <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"
               filename="hb-shape-plan.cc"
               line="333">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">
      <source-position filename="hb-shape-plan.h" line="91"/>
      <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"
               filename="hb-shape-plan.cc"
               line="315">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">
      <source-position filename="hb-shape-plan.h" line="78"/>
      <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"
               filename="hb-shape-plan.cc"
               line="257">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">
      <source-position filename="hb-shape-plan.h" line="84"/>
      <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"
               filename="hb-shape-plan.cc"
               line="291">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">
      <source-position filename="hb-shape-plan.h" line="39"/>
    </record>
    <function name="tag_from_string"
              c:identifier="hb_tag_from_string"
              version="0.9.2">
      <source-position filename="hb-common.h" line="119"/>
      <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="const 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">
      <source-position filename="hb-common.h" line="123"/>
      <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">
      <source-position filename="hb-unicode.h" line="360"/>
      <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">
      <source-position filename="hb-unicode.h" line="230"/>
      <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">
      <source-position filename="hb-unicode.h" line="391"/>
      <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"
               filename="hb-unicode.cc"
               line="390">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">
      <source-position filename="hb-unicode.h" line="243"/>
      <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">
      <source-position filename="hb-unicode.h" line="397"/>
      <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"
               filename="hb-unicode.cc"
               line="412">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"
              deprecated="1"
              deprecated-version="2.0.0">
      <source-position filename="hb-deprecated.h" line="163"/>
      <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"
               filename="hb-unicode.cc"
               line="435">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"
              deprecated="1"
              deprecated-version="2.0.0">
      <doc xml:space="preserve"
           filename="hb-deprecated.h"
           line="111">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>
      <source-position filename="hb-deprecated.h" line="131"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-deprecated.h"
             line="127">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"
               filename="hb-deprecated.h"
               line="113">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"
               filename="hb-deprecated.h"
               line="114">codepoint to decompose</doc>
          <type name="codepoint_t" c:type="hb_codepoint_t"/>
        </parameter>
        <parameter name="decomposed" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-deprecated.h"
               line="115">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"
               filename="hb-deprecated.h"
               line="116">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">
      <source-position filename="hb-unicode.h" line="248"/>
      <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"
              deprecated="1"
              deprecated-version="2.0.0">
      <source-position filename="hb-deprecated.h" line="107"/>
      <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"
              deprecated="1"
              deprecated-version="2.0.0">
      <source-position filename="hb-deprecated.h" line="79"/>
      <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">
      <source-position filename="hb-unicode.h" line="190"/>
      <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">
      <source-position filename="hb-unicode.h" line="199"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-unicode.cc"
               line="234">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">
      <source-position filename="hb-unicode.h" line="186"/>
      <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">
      <source-position filename="hb-unicode.h" line="193"/>
      <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">
      <source-position filename="hb-unicode.h" line="221"/>
      <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"
               filename="hb-unicode.cc"
               line="333">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">
      <source-position filename="hb-unicode.h" line="210"/>
      <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"
               filename="hb-unicode.cc"
               line="281">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">
      <source-position filename="hb-unicode.h" line="218"/>
      <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"
               filename="hb-unicode.cc"
               line="317">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">
      <source-position filename="hb-unicode.h" line="215"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-unicode.cc"
               line="300">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">
      <source-position filename="hb-unicode.h" line="196"/>
      <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"
               filename="hb-unicode.cc"
               line="218">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">
      <source-position filename="hb-unicode.h" line="268"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-unicode.h"
               line="258">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">
      <source-position filename="hb-unicode.h" line="332"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-unicode.h"
               line="322">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"
              deprecated="1"
              deprecated-version="2.0.0">
      <source-position filename="hb-deprecated.h" line="158"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-deprecated.h"
               line="147">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">
      <source-position filename="hb-unicode.h" line="348"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-unicode.h"
               line="338">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"
              deprecated="1"
              deprecated-version="2.0.0">
      <source-position filename="hb-deprecated.h" line="96"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-deprecated.h"
               line="85">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">
      <source-position filename="hb-unicode.h" line="284"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-unicode.h"
               line="274">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">
      <source-position filename="hb-unicode.h" line="300"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-unicode.h"
               line="290">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">
      <source-position filename="hb-unicode.h" line="316"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ufuncs" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="hb-unicode.h"
               line="306">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">
      <source-position filename="hb-unicode.h" line="202"/>
      <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"
               filename="hb-unicode.cc"
               line="257">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">
      <source-position filename="hb-unicode.h" line="179"/>
    </record>
    <function name="unicode_general_category"
              c:identifier="hb_unicode_general_category"
              version="0.9.2">
      <source-position filename="hb-unicode.h" line="369"/>
      <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">
      <source-position filename="hb-unicode.h" line="233"/>
      <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">
      <source-position filename="hb-unicode.h" line="378"/>
      <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">
      <source-position filename="hb-unicode.h" line="236"/>
      <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">
      <source-position filename="hb-unicode.h" line="387"/>
      <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">
      <source-position filename="hb-unicode.h" line="239"/>
      <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">
      <source-position filename="hb-common.h" line="406"/>
      <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">
      <source-position filename="hb-common.h" line="103"/>
      <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" fixed-size="2">
          <type name="guint16" c:type="uint16_t"/>
        </array>
      </field>
      <field name="i16" writable="1">
        <array zero-terminated="0" fixed-size="2">
          <type name="gint16" c:type="int16_t"/>
        </array>
      </field>
      <field name="u8" writable="1">
        <array zero-terminated="0" fixed-size="4">
          <type name="guint8" c:type="uint8_t"/>
        </array>
      </field>
      <field name="i8" writable="1">
        <array zero-terminated="0" fixed-size="4">
          <type name="gint8" c:type="int8_t"/>
        </array>
      </field>
    </union>
    <function name="variation_from_string"
              c:identifier="hb_variation_from_string"
              version="1.4.2">
      <source-position filename="hb-common.h" line="452"/>
      <return-value transfer-ownership="none">
        <type name="bool_t" c:type="hb_bool_t"/>
      </return-value>
      <parameters>
        <parameter name="str" transfer-ownership="none">
          <type name="utf8" c:type="const char*"/>
        </parameter>
        <parameter name="len" transfer-ownership="none">
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="variation" transfer-ownership="none">
          <type name="variation_t" c:type="hb_variation_t*"/>
        </parameter>
      </parameters>
    </function>
    <record name="variation_t" c:type="hb_variation_t" version="1.4.2">
      <source-position filename="hb-common.h" line="449"/>
      <field name="tag" writable="1">
        <type name="tag_t" c:type="hb_tag_t"/>
      </field>
      <field name="value" writable="1">
        <type name="gfloat" c:type="float"/>
      </field>
      <method name="_string"
              c:identifier="hb_variation_to_string"
              moved-to="variation_to_string"
              version="1.4.2">
        <source-position filename="hb-common.h" line="456"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="variation" transfer-ownership="none">
            <type name="variation_t" c:type="hb_variation_t*"/>
          </instance-parameter>
          <parameter name="buf" transfer-ownership="none">
            <type name="utf8" c:type="char*"/>
          </parameter>
          <parameter name="size" transfer-ownership="none">
            <type name="guint" c:type="unsigned int"/>
          </parameter>
        </parameters>
      </method>
    </record>
    <function name="variation_to_string"
              c:identifier="hb_variation_to_string"
              version="1.4.2">
      <source-position filename="hb-common.h" line="456"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="variation" transfer-ownership="none">
          <type name="variation_t" c:type="hb_variation_t*"/>
        </parameter>
        <parameter name="buf" transfer-ownership="none">
          <type name="utf8" c:type="char*"/>
        </parameter>
        <parameter name="size" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
      </parameters>
    </function>
    <function name="version" c:identifier="hb_version" version="0.9.2">
      <doc xml:space="preserve"
           filename="hb-common.cc"
           line="643">Returns library version as three integer components.</doc>
      <source-position filename="hb-version.h" line="51"/>
      <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"
               filename="hb-common.cc"
               line="645">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"
               filename="hb-common.cc"
               line="646">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"
               filename="hb-common.cc"
               line="647">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">
      <source-position filename="hb-version.h" line="59"/>
      <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"
           filename="hb-common.cc"
           line="663">Returns library version as a string with three components.</doc>
      <source-position filename="hb-version.h" line="56"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="hb-common.cc"
             line="668">library version string.</doc>
        <type name="utf8" c:type="const char*"/>
      </return-value>
    </function>
  </namespace>
</repository>
