From c0a6814b49e376984a0cae9d385a6f6ba8c73579 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Fri, 12 Oct 2018 16:05:56 -0400 Subject: [PATCH] Touch up new API New API: +hb_ot_layout_feature_get_name_ids() +hb_ot_layout_feature_get_characters() --- src/hb-ot-layout.cc | 16 +++++++++------- src/hb-ot-layout.h | 2 -- test/api/test-ot-nameid.c | 16 ++++++++++------ 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/hb-ot-layout.cc b/src/hb-ot-layout.cc index 4c751e641..1e547a7a2 100644 --- a/src/hb-ot-layout.cc +++ b/src/hb-ot-layout.cc @@ -1121,7 +1121,6 @@ hb_ot_layout_get_size_params (hb_face_t *face, * @face: #hb_face_t to work upon * @table_tag: * @feature_index: - * @feature_tag: ssXX and cvXX tag * @label_id: (out) (allow-none): The ‘name’ table name ID that specifies a string * for a user-interface label for this feature. (May be NULL.) * @tooltip_id: (out) (allow-none): The ‘name’ table name ID that specifies a string @@ -1134,7 +1133,10 @@ hb_ot_layout_get_size_params (hb_face_t *face, * strings for user-interface labels for the feature * parameters. (Must be zero if numParameters is zero.) * - * Return value: true if could find any feature with the tag, false otherwise + * Fetches name indices from feature parameters for "Stylistic Set" ('ssXX') or + * "Character Variant" ('cvXX') features. + * + * Return value: true if data found, false otherwise * * Since: REPLACEME **/ @@ -1142,16 +1144,15 @@ hb_bool_t hb_ot_layout_feature_get_name_ids (hb_face_t *face, hb_tag_t table_tag, unsigned int feature_index, - hb_tag_t feature_tag, hb_name_id_t *label_id, /* OUT. May be NULL */ hb_name_id_t *tooltip_id, /* OUT. May be NULL */ hb_name_id_t *sample_id, /* OUT. May be NULL */ unsigned int *num_named_parameters, /* OUT. May be NULL */ hb_name_id_t *first_param_id /* OUT. May be NULL */) { - static_assert ((OT::FeatureVariations::NOT_FOUND_INDEX == HB_OT_LAYOUT_NO_VARIATIONS_INDEX), ""); const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag); + hb_tag_t feature_tag = g.get_feature_tag (feature_index); const OT::Feature &f = g.get_feature (feature_index); const OT::FeatureParams &feature_params = f.get_feature_params (); @@ -1195,7 +1196,6 @@ hb_ot_layout_feature_get_name_ids (hb_face_t *face, /** * hb_ot_layout_feature_get_characters:: * @face: #hb_face_t to work upon - * @feature_tag: cvXX tag * @table_tag: * @feature_index: * @start_offset: In case the resulting char_count was equal to its input value, there @@ -1208,6 +1208,9 @@ hb_ot_layout_feature_get_name_ids (hb_face_t *face, * @characters: (out) (allow-none): A buffer pointer. The Unicode Scalar Value * of the characters for which this feature provides glyph variants. * + * Fetches characters listed by designer under feature parameters for "Character + * Variant" ("cvXX") features. + * * Return value: Number of total sample characters in the cvXX feature. * * Since: REPLACEME @@ -1216,14 +1219,13 @@ unsigned int hb_ot_layout_feature_get_characters (hb_face_t *face, hb_tag_t table_tag, unsigned int feature_index, - hb_tag_t feature_tag, unsigned int start_offset, unsigned int *char_count, /* IN/OUT. May be NULL */ hb_codepoint_t *characters /* OUT. May be NULL */) { - static_assert ((OT::FeatureVariations::NOT_FOUND_INDEX == HB_OT_LAYOUT_NO_VARIATIONS_INDEX), ""); const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag); + hb_tag_t feature_tag = g.get_feature_tag (feature_index); const OT::Feature &f = g.get_feature (feature_index); const OT::FeatureParams &feature_params = f.get_feature_params (); diff --git a/src/hb-ot-layout.h b/src/hb-ot-layout.h index 001d77b20..a2e5b5155 100644 --- a/src/hb-ot-layout.h +++ b/src/hb-ot-layout.h @@ -335,7 +335,6 @@ HB_EXTERN hb_bool_t hb_ot_layout_feature_get_name_ids (hb_face_t *face, hb_tag_t table_tag, unsigned int feature_index, - hb_tag_t feature_tag, hb_name_id_t *label_id /* OUT. May be NULL */, hb_name_id_t *tooltip_id /* OUT. May be NULL */, hb_name_id_t *sample_id /* OUT. May be NULL */, @@ -347,7 +346,6 @@ HB_EXTERN unsigned int hb_ot_layout_feature_get_characters (hb_face_t *face, hb_tag_t table_tag, unsigned int feature_index, - hb_tag_t feature_tag, unsigned int start_offset, unsigned int *char_count /* IN/OUT. May be NULL */, hb_codepoint_t *characters /* OUT. May be NULL */); diff --git a/test/api/test-ot-nameid.c b/test/api/test-ot-nameid.c index 1389129fe..1205190d2 100644 --- a/test/api/test-ot-nameid.c +++ b/test/api/test-ot-nameid.c @@ -53,10 +53,14 @@ main (int argc, char **argv) font = hb_font_create (face); hb_tag_t cv01 = HB_TAG ('c','v','0','1'); - unsigned int feature_index = 0; - // FIXME: See why below doesn't work - // if (!hb_ot_layout_language_find_feature (face, HB_OT_TAG_GSUB, 0, 0, cv01, &feature_index)) - // g_error ("Failed to find feature index"); + unsigned int feature_index; + if (!hb_ot_layout_language_find_feature (face, + HB_OT_TAG_GSUB, + 0, + HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX, + cv01, + &feature_index)) + g_error ("Failed to find feature index"); hb_name_id_t label_id; hb_name_id_t tooltip_id; @@ -64,7 +68,7 @@ main (int argc, char **argv) unsigned int num_named_parameters; hb_name_id_t first_param_id; if (!hb_ot_layout_feature_get_name_ids (face, HB_OT_TAG_GSUB, feature_index, - cv01, &label_id, &tooltip_id, &sample_id, + &label_id, &tooltip_id, &sample_id, &num_named_parameters, &first_param_id)) g_error ("Failed to get name ids"); @@ -79,7 +83,7 @@ main (int argc, char **argv) unsigned int all_chars; all_chars = hb_ot_layout_feature_get_characters (face, HB_OT_TAG_GSUB, feature_index, - cv01, 0, &char_count, characters); + 0, &char_count, characters); g_assert (all_chars == 2); g_assert (char_count == 2);