The `PangoOTTag` typedef is used to represent TrueType and OpenType four letter tags inside Pango. Use PANGO_OT_TAG_MAKE() or PANGO_OT_TAG_MAKE_FROM_STRING() macros to create PangoOTTags manually. This is used as the property bit in pango_ot_ruleset_add_feature() when a feature should be applied to all glyphs. Creates a new `PangoOTBuffer` for the given OpenType font. the newly allocated `PangoOTBuffer`, which should be freed with [method@PangoOT.Buffer.destroy]. a `PangoFcFont` Appends a glyph to a `PangoOTBuffer`, with @properties identifying which features should be applied on this glyph. See [method@PangoOT.Ruleset.add_feature]. a `PangoOTBuffer` the glyph index to add, like a `PangoGlyph` the glyph properties the cluster that this glyph belongs to Empties a `PangoOTBuffer`, make it ready to add glyphs to. a `PangoOTBuffer` Destroys a `PangoOTBuffer` and free all associated memory. a `PangoOTBuffer` Gets the glyph array contained in a `PangoOTBuffer`. The glyphs are owned by the buffer and should not be freed, and are only valid as long as buffer is not modified. a `PangoOTBuffer` location to store the array of glyphs location to store the number of glyphs Exports the glyphs in a `PangoOTBuffer` into a `PangoGlyphString`. This is typically used after the OpenType layout processing is over, to convert the resulting glyphs into a generic Pango glyph string. a `PangoOTBuffer` a `PangoGlyphString` Sets whether glyphs will be rendered right-to-left. This setting is needed for proper horizontal positioning of right-to-left scripts. a `PangoOTBuffer` %TRUE for right-to-left text Sets whether characters with a mark class should be forced to zero width. This setting is needed for proper positioning of Arabic accents, but will produce incorrect results with standard OpenType Indic fonts. a `PangoOTBuffer` %TRUE if characters with a mark class should be forced to zero width This is used as the language index in pango_ot_info_find_feature() when the default language system of the script is desired. It is also returned by pango_ot_info_find_language() if the requested language is not found, or the requested language tag was PANGO_OT_TAG_DEFAULT_LANGUAGE. The end result is that one can always call pango_ot_tag_from_language() followed by pango_ot_info_find_language() and pass the result to pango_ot_info_find_feature() without having to worry about falling back to default language system explicitly. The `PangoOTFeatureMap` typedef is used to represent an OpenType feature with the property bit associated with it. The feature tag is represented as a char array instead of a `PangoOTTag` for convenience. feature tag in represented as four-letter ASCII string. the property bit to use for this feature. See pango_ot_ruleset_add_feature() for details. The `PangoOTGlyph` structure represents a single glyph together with information used for OpenType layout processing of the glyph. It contains the following fields. the glyph itself. the properties value, identifying which features should be applied on this glyph. See pango_ot_ruleset_add_feature(). the cluster that this glyph belongs to. a component value, set by the OpenType layout engine. a ligature index value, set by the OpenType layout engine. for Pango internal use Returns the `PangoOTInfo` structure for the given FreeType font face. the `PangoOTInfo` for @face. This object will have the same lifetime as @face. a `FT_Face` Finds the index of a feature. If the feature is not found, sets @feature_index to PANGO_OT_NO_FEATURE, which is safe to pass to [method@PangoOT.Ruleset.add_feature] and similar functions. In the future, this may set @feature_index to an special value that if used in [method@PangoOT.Ruleset.add_feature] will ask Pango to synthesize the requested feature based on Unicode properties and data. However, this function will still return %FALSE in those cases. So, users may want to ignore the return value of this function in certain cases. %TRUE if the feature was found a `PangoOTInfo` the table type to obtain information about the tag of the feature to find the index of the script the index of the language whose features are searched, or %PANGO_OT_DEFAULT_LANGUAGE to use the default language of the script location to store the index of the feature Finds the index of a language and its required feature index. If the language is not found, sets @language_index to %PANGO_OT_DEFAULT_LANGUAGE and the required feature of the default language system is returned in required_feature_index. For best compatibility with some fonts, also searches the language system tag 'dflt' before falling back to the default language system, but that is transparent to the user. The user can simply ignore the return value of this function to automatically fall back to the default language system. %TRUE if the language was found a `PangoOTInfo` the table type to obtain information about the index of the script whose languages are searched the tag of the language to find location to store the index of the language location to store the required feature index of the language Finds the index of a script. If not found, tries to find the 'DFLT' and then 'dflt' scripts and return the index of that in @script_index. If none of those is found either, %PANGO_OT_NO_SCRIPT is placed in @script_index. All other functions taking an input script_index parameter know how to handle %PANGO_OT_NO_SCRIPT, so one can ignore the return value of this function completely and proceed, to enjoy the automatic fallback to the 'DFLT'/'dflt' script. %TRUE if the script was found a `PangoOTInfo` the table type to obtain information about the tag of the script to find location to store the index of the script Obtains the list of features for the given language of the given script. a newly-allocated zero-terminated array containing the tags of the available features a `PangoOTInfo` the table type to obtain information about unused parameter the index of the script to obtain information about the index of the language to list features for, or %PANGO_OT_DEFAULT_LANGUAGE, to list features for the default language of the script Obtains the list of available languages for a given script. a newly-allocated zero-terminated array containing the tags of the available languages a `PangoOTInfo` the table type to obtain information about the index of the script to list languages for unused parameter Obtains the list of available scripts. a newly-allocated zero-terminated array containing the tags of the available scripts a `PangoOTInfo` the table type to obtain information about This is used as a feature index that represent no feature, that is, should be skipped. It may be returned as feature index by pango_ot_info_find_feature() if the feature is not found, and pango_ot_ruleset_add_feature() function automatically skips this value, so no special handling is required by the user. This is used as a script index that represent no script, that is, when the requested script was not found, and a default ('DFLT') script was not found either. It may be returned as script index by pango_ot_info_find_script() if the script or a default script are not found, all other functions taking a script index essentially return if the input script index is this value, so no special handling is required by the user. The `PangoOTRuleset` structure holds a set of features selected from the tables in an OpenType font. A feature is an operation such as adjusting glyph positioning that should be applied to a text feature such as a certain type of accent. A `PangoOTRuleset` is created with [ctor@PangoOT.Ruleset.new], features are added to it with [method@PangoOT.Ruleset.add_feature], then it is applied to a `PangoGlyphString` with [method@PangoOT.Ruleset.position]. Creates a new `PangoOTRuleset` for the given OpenType info. the newly allocated `PangoOTRuleset` a `PangoOTInfo` Creates a new `PangoOTRuleset` for the given OpenType info, script, and language. This function is part of a convenience scheme that highly simplifies using a `PangoOTRuleset` to represent features for a specific pair of script and language. So one can use this function passing in the script and language of interest, and later try to add features to the ruleset by just specifying the feature name or tag, without having to deal with finding script, language, or feature indices manually. In addition to what [ctor@PangoOT.Ruleset.new] does, this function will: * Find the `PangoOTTag` script and language tags associated with @script and @language using [func@PangoOT.tag_from_script] and [func@PangoOT.tag_from_language], * For each of table types %PANGO_OT_TABLE_GSUB and %PANGO_OT_TABLE_GPOS, find the script index of the script tag found and the language system index of the language tag found in that script system, using [method@PangoOT.Info.find_script] and [method@PangoOT.Info.find_language], * For found language-systems, if they have required feature index, add that feature to the ruleset using [method@PangoOT.Ruleset.add_feature], * Remember found script and language indices for both table types, and use them in future [method@PangoOT.Ruleset.maybe_add_feature] and [method@PangoOT.Ruleset.maybe_add_features]. Because of the way return values of [method@PangoOT.Info.find_script] and [method@PangoOT.Info.find_language] are ignored, this function automatically finds and uses the 'DFLT' script and the default language-system. the newly allocated `PangoOTRuleset` a `PangoOTInfo` a `PangoScript` a `PangoLanguage` Creates a new `PangoOTRuleset` for the given OpenType info and matching the given ruleset description. This is a convenience function that calls [ctor@PangoOT.Ruleset.new_for] and adds the static GSUB/GPOS features to the resulting ruleset, followed by adding other features to both GSUB and GPOS. The static feature map members of @desc should be alive as long as @info is. the newly allocated `PangoOTRuleset` a `PangoOTInfo` a `PangoOTRulesetDescription` Returns a ruleset for the given OpenType info and ruleset description. Rulesets are created on demand using [ctor@PangoOT.Ruleset.new_from_description]. The returned ruleset should not be modified or destroyed. The static feature map members of @desc should be alive as long as @info is. the `PangoOTRuleset` for @desc. This object will have the same lifetime as @info. a `PangoOTInfo` a `PangoOTRulesetDescription` Adds a feature to the ruleset. a `PangoOTRuleset` the table type to add a feature to the index of the feature to add the property bit to use for this feature. Used to identify the glyphs that this feature should be applied to, or %PANGO_OT_ALL_GLYPHS if it should be applied to all glyphs. Gets the number of GSUB and GPOS features in the ruleset. Total number of features in the @ruleset a `PangoOTRuleset` location to store number of GSUB features location to store number of GPOS features This is a convenience function that first tries to find the feature using [method@PangoOT.Info.find_feature] and the ruleset script and language passed to [ctor@PangoOT.Ruleset.new_for] and if the feature is found, adds it to the ruleset. If @ruleset was not created using [ctor@PangoOT.Ruleset.new_for], this function does nothing. %TRUE if the feature was found and added to ruleset, %FALSE otherwise a `PangoOTRuleset` the table type to add a feature to the tag of the feature to add the property bit to use for this feature. Used to identify the glyphs that this feature should be applied to, or %PANGO_OT_ALL_GLYPHS if it should be applied to all glyphs. This is a convenience function that for each feature in the feature map array @features converts the feature name to a `PangoOTTag` feature tag using PANGO_OT_TAG_MAKE() and calls [method@PangoOT.Ruleset.maybe_add_feature] on it. The number of features in @features that were found and added to @ruleset a `PangoOTRuleset` the table type to add features to array of feature name and property bits to add number of feature records in @features array Performs the OpenType GPOS positioning on @buffer using the features in @ruleset. a `PangoOTRuleset` a `PangoOTBuffer` Performs the OpenType GSUB substitution on @buffer using the features in @ruleset. a `PangoOTRuleset` a `PangoOTBuffer` The `PangoOTRuleset` structure holds all the information needed to build a complete `PangoOTRuleset` from an OpenType font. The main use of this struct is to act as the key for a per-font hash of rulesets. The user populates a ruleset description and gets the ruleset using pango_ot_ruleset_get_for_description() or create a new one using pango_ot_ruleset_new_from_description(). a `PangoScript` a `PangoLanguage` static map of GSUB features length of @static_gsub_features, or 0. static map of GPOS features length of @static_gpos_features, or 0. map of extra features to add to both GSUB and GPOS. Unlike the static maps, this pointer need not live beyond the life of function calls taking this struct. length of @other_features, or 0. Creates a copy of @desc, which should be freed with [method@PangoOT.RulesetDescription.free]. Primarily used internally by [func@PangoOT.Ruleset.get_for_description] to cache rulesets for ruleset descriptions. the newly allocated `PangoOTRulesetDescription` ruleset description to copy Compares two ruleset descriptions for equality. Two ruleset descriptions are considered equal if the rulesets they describe are provably identical. This means that their script, language, and all feature sets should be equal. For static feature sets, the array addresses are compared directly, while for other features, the list of features is compared one by one.(Two ruleset descriptions may result in identical rulesets being created, but still compare %FALSE.) %TRUE if two ruleset descriptions are identical, %FALSE otherwise a ruleset description a ruleset description Frees a ruleset description allocated by pango_ot_ruleset_description_copy(). an allocated `PangoOTRulesetDescription` Computes a hash of a `PangoOTRulesetDescription` structure suitable to be used, for example, as an argument to g_hash_table_new(). the hash value a ruleset description Creates a `PangoOTTag` from four characters. This is similar and compatible with the FT_MAKE_TAG() macro from FreeType. First character. Second character. Third character. Fourth character. Creates a `PangoOTTag` from a string. The string should be at least four characters long (pad with space characters if needed), and need not be nul-terminated. This is a convenience wrapper around PANGO_OT_TAG_MAKE(), but cannot be used in certain situations, for example, as a switch expression, as it dereferences pointers. The string representation of the tag. The PangoOTTableType enumeration values are used to identify the various OpenType tables in the pango_ot_info_… functions. The GSUB table. The GPOS table. Finds the OpenType language-system tag best describing @language. `PangoOTTag` best matching @language or %PANGO_OT_TAG_DEFAULT_LANGUAGE if none found or if @language is %NULL. A `PangoLanguage` Finds the OpenType script tag corresponding to @script. The %PANGO_SCRIPT_COMMON, %PANGO_SCRIPT_INHERITED, and %PANGO_SCRIPT_UNKNOWN scripts are mapped to the OpenType 'DFLT' script tag that is also defined as %PANGO_OT_TAG_DEFAULT_SCRIPT. Note that multiple `PangoScript` values may map to the same OpenType script tag. In particular, %PANGO_SCRIPT_HIRAGANA and %PANGO_SCRIPT_KATAKANA both map to the OT tag 'kana'. `PangoOTTag` corresponding to @script or %PANGO_OT_TAG_DEFAULT_SCRIPT if none found. A `PangoScript` Finds a `PangoLanguage` corresponding to @language_tag. `PangoLanguage` best matching @language_tag or `PangoLanguage` corresponding to the string "xx" if none found. A `PangoOTTag` OpenType language-system tag Finds the `PangoScript` corresponding to @script_tag. The 'DFLT' script tag is mapped to %PANGO_SCRIPT_COMMON. Note that an OpenType script tag may correspond to multiple `PangoScript` values. In such cases, the `PangoScript` value with the smallest value is returned. In particular, %PANGO_SCRIPT_HIRAGANA and %PANGO_SCRIPT_KATAKANA both map to the OT tag 'kana'. This function will return %PANGO_SCRIPT_HIRAGANA for 'kana'. `PangoScript` corresponding to @script_tag or %PANGO_SCRIPT_UNKNOWN if none found. A `PangoOTTag` OpenType script tag