#include"hb-aat-layout.hh" #include"hb-aat-layout-ankr-table.hh" #include"hb-aat-layout-bsln-table.hh"// Just so we compile it; unused otherwise. #include"hb-aat-layout-feat-table.hh" #include"hb-aat-layout-just-table.hh"// Just so we compile it; unused otherwise. #include"hb-aat-layout-kerx-table.hh" #include"hb-aat-layout-morx-table.hh" #include"hb-aat-layout-trak-table.hh" #include"hb-aat-ltag-table.hh"
/* * hb_aat_apply_context_t
*/
/* Note: This context is used for kerning, even without AAT, hence the condition. */ #if !defined(HB_NO_AAT) || !defined(HB_NO_OT_KERN)
/** * SECTION:hb-aat-layout * @title: hb-aat-layout * @short_description: Apple Advanced Typography Layout * @include: hb-aat.h * * Functions for querying AAT Layout features in the font face. * * HarfBuzz supports all of the AAT tables used to implement shaping. Other * AAT tables and their associated features are not supported.
**/
/** * hb_aat_layout_find_feature_mapping: * @tag: The requested #hb_tag_t feature tag * * Fetches the AAT feature-and-selector combination that corresponds * to a given OpenType feature tag. * * Return value: the AAT features and selectors corresponding to the * OpenType feature tag queried *
**/ const hb_aat_feature_mapping_t *
hb_aat_layout_find_feature_mapping (hb_tag_t tag)
{ return hb_sorted_array (feature_mappings).bsearch (tag);
} #endif
const AAT::mort& mort = *mapper->face->table.mort->table; if (mort.has_data ())
{
mort.compile_flags (mapper, map); return;
}
}
/** * hb_aat_layout_has_substitution: * @face: #hb_face_t to work upon * * Tests whether the specified face includes any substitutions in the * `morx` or `mort` tables. * * <note>Note: does not examine the `GSUB` table.</note> * * Return value: `true` if data found, `false` otherwise * * Since: 2.3.0
*/
hb_bool_t
hb_aat_layout_has_substitution (hb_face_t *face)
{ return face->table.morx->table->has_data () ||
face->table.mort->table->has_data ();
}
/** * hb_aat_layout_has_positioning: * @face: #hb_face_t to work upon * * Tests whether the specified face includes any positioning information * in the `kerx` table. * * <note>Note: does not examine the `GPOS` table.</note> * * Return value: `true` if data found, `false` otherwise * * Since: 2.3.0
*/
hb_bool_t
hb_aat_layout_has_positioning (hb_face_t *face)
{ return face->table.kerx->table->has_data ();
}
/** * hb_aat_layout_has_tracking: * @face:: #hb_face_t to work upon * * Tests whether the specified face includes any tracking information * in the `trak` table. * * Return value: `true` if data found, `false` otherwise * * Since: 2.3.0
*/
hb_bool_t
hb_aat_layout_has_tracking (hb_face_t *face)
{ return face->table.trak->has_data ();
}
AAT::hb_aat_apply_context_t c (plan, font, buffer);
trak.apply (&c);
}
/** * hb_aat_layout_get_feature_types: * @face: #hb_face_t to work upon * @start_offset: offset of the first feature type to retrieve * @feature_count: (inout) (optional): Input = the maximum number of feature types to return; * Output = the actual number of feature types returned (may be zero) * @features: (out caller-allocates) (array length=feature_count): Array of feature types found * * Fetches a list of the AAT feature types included in the specified face. * * Return value: Number of all available feature types. * * Since: 2.2.0
*/ unsignedint
hb_aat_layout_get_feature_types (hb_face_t *face, unsignedint start_offset, unsignedint *feature_count, /* IN/OUT. May be NULL. */
hb_aat_layout_feature_type_t *features /* OUT. May be NULL. */)
{ return face->table.feat->get_feature_types (start_offset, feature_count, features);
}
/** * hb_aat_layout_feature_type_get_name_id: * @face: #hb_face_t to work upon * @feature_type: The #hb_aat_layout_feature_type_t of the requested feature type * * Fetches the name identifier of the specified feature type in the face's `name` table. * * Return value: Name identifier of the requested feature type * * Since: 2.2.0
*/
hb_ot_name_id_t
hb_aat_layout_feature_type_get_name_id (hb_face_t *face,
hb_aat_layout_feature_type_t feature_type)
{ return face->table.feat->get_feature_name_id (feature_type);
}
/** * hb_aat_layout_feature_type_get_selector_infos: * @face: #hb_face_t to work upon * @feature_type: The #hb_aat_layout_feature_type_t of the requested feature type * @start_offset: offset of the first feature type to retrieve * @selector_count: (inout) (optional): Input = the maximum number of selectors to return; * Output = the actual number of selectors returned (may be zero) * @selectors: (out caller-allocates) (array length=selector_count) (optional): * A buffer pointer. The selectors available for the feature type queries. * @default_index: (out) (optional): The index of the feature's default selector, if any * * Fetches a list of the selectors available for the specified feature in the given face. * * If upon return, @default_index is set to #HB_AAT_LAYOUT_NO_SELECTOR_INDEX, then * the feature type is non-exclusive. Otherwise, @default_index is the index of * the selector that is selected by default. * * Return value: Number of all available feature selectors * * Since: 2.2.0
*/ unsignedint
hb_aat_layout_feature_type_get_selector_infos (hb_face_t *face,
hb_aat_layout_feature_type_t feature_type, unsignedint start_offset, unsignedint *selector_count, /* IN/OUT. May be NULL. */
hb_aat_layout_feature_selector_info_t *selectors, /* OUT. May be NULL. */ unsignedint *default_index /* OUT. May be NULL. */)
{ return face->table.feat->get_selector_infos (feature_type, start_offset, selector_count, selectors, default_index);
}
#endif
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.20 Sekunden
(vorverarbeitet am 2026-04-28)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.