Touch up new API

New API:
+hb_ot_layout_feature_get_name_ids()
+hb_ot_layout_feature_get_characters()
This commit is contained in:
Behdad Esfahbod 2018-10-12 16:05:56 -04:00
parent 477bc9aafe
commit c0a6814b49
3 changed files with 19 additions and 15 deletions

View File

@ -1121,7 +1121,6 @@ hb_ot_layout_get_size_params (hb_face_t *face,
* @face: #hb_face_t to work upon * @face: #hb_face_t to work upon
* @table_tag: * @table_tag:
* @feature_index: * @feature_index:
* @feature_tag: ssXX and cvXX tag
* @label_id: (out) (allow-none): The name table name ID that specifies a string * @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.) * 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 * @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 * strings for user-interface labels for the feature
* parameters. (Must be zero if numParameters is zero.) * 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 * Since: REPLACEME
**/ **/
@ -1142,16 +1144,15 @@ hb_bool_t
hb_ot_layout_feature_get_name_ids (hb_face_t *face, hb_ot_layout_feature_get_name_ids (hb_face_t *face,
hb_tag_t table_tag, hb_tag_t table_tag,
unsigned int feature_index, unsigned int feature_index,
hb_tag_t feature_tag,
hb_name_id_t *label_id, /* OUT. May be NULL */ hb_name_id_t *label_id, /* OUT. May be NULL */
hb_name_id_t *tooltip_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 */ hb_name_id_t *sample_id, /* OUT. May be NULL */
unsigned int *num_named_parameters, /* OUT. May be NULL */ unsigned int *num_named_parameters, /* OUT. May be NULL */
hb_name_id_t *first_param_id /* 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); 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::Feature &f = g.get_feature (feature_index);
const OT::FeatureParams &feature_params = f.get_feature_params (); 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:: * hb_ot_layout_feature_get_characters::
* @face: #hb_face_t to work upon * @face: #hb_face_t to work upon
* @feature_tag: cvXX tag
* @table_tag: * @table_tag:
* @feature_index: * @feature_index:
* @start_offset: In case the resulting char_count was equal to its input value, there * @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 * @characters: (out) (allow-none): A buffer pointer. The Unicode Scalar Value
* of the characters for which this feature provides glyph variants. * 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. * Return value: Number of total sample characters in the cvXX feature.
* *
* Since: REPLACEME * Since: REPLACEME
@ -1216,14 +1219,13 @@ unsigned int
hb_ot_layout_feature_get_characters (hb_face_t *face, hb_ot_layout_feature_get_characters (hb_face_t *face,
hb_tag_t table_tag, hb_tag_t table_tag,
unsigned int feature_index, unsigned int feature_index,
hb_tag_t feature_tag,
unsigned int start_offset, unsigned int start_offset,
unsigned int *char_count, /* IN/OUT. May be NULL */ unsigned int *char_count, /* IN/OUT. May be NULL */
hb_codepoint_t *characters /* 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); 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::Feature &f = g.get_feature (feature_index);
const OT::FeatureParams &feature_params = f.get_feature_params (); const OT::FeatureParams &feature_params = f.get_feature_params ();

View File

@ -335,7 +335,6 @@ HB_EXTERN hb_bool_t
hb_ot_layout_feature_get_name_ids (hb_face_t *face, hb_ot_layout_feature_get_name_ids (hb_face_t *face,
hb_tag_t table_tag, hb_tag_t table_tag,
unsigned int feature_index, unsigned int feature_index,
hb_tag_t feature_tag,
hb_name_id_t *label_id /* OUT. May be NULL */, hb_name_id_t *label_id /* OUT. May be NULL */,
hb_name_id_t *tooltip_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 */, 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_ot_layout_feature_get_characters (hb_face_t *face,
hb_tag_t table_tag, hb_tag_t table_tag,
unsigned int feature_index, unsigned int feature_index,
hb_tag_t feature_tag,
unsigned int start_offset, unsigned int start_offset,
unsigned int *char_count /* IN/OUT. May be NULL */, unsigned int *char_count /* IN/OUT. May be NULL */,
hb_codepoint_t *characters /* OUT. May be NULL */); hb_codepoint_t *characters /* OUT. May be NULL */);

View File

@ -53,10 +53,14 @@ main (int argc, char **argv)
font = hb_font_create (face); font = hb_font_create (face);
hb_tag_t cv01 = HB_TAG ('c','v','0','1'); hb_tag_t cv01 = HB_TAG ('c','v','0','1');
unsigned int feature_index = 0; unsigned int feature_index;
// FIXME: See why below doesn't work if (!hb_ot_layout_language_find_feature (face,
// if (!hb_ot_layout_language_find_feature (face, HB_OT_TAG_GSUB, 0, 0, cv01, &feature_index)) HB_OT_TAG_GSUB,
// g_error ("Failed to find feature index"); 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 label_id;
hb_name_id_t tooltip_id; hb_name_id_t tooltip_id;
@ -64,7 +68,7 @@ main (int argc, char **argv)
unsigned int num_named_parameters; unsigned int num_named_parameters;
hb_name_id_t first_param_id; hb_name_id_t first_param_id;
if (!hb_ot_layout_feature_get_name_ids (face, HB_OT_TAG_GSUB, feature_index, 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)) &num_named_parameters, &first_param_id))
g_error ("Failed to get name ids"); g_error ("Failed to get name ids");
@ -79,7 +83,7 @@ main (int argc, char **argv)
unsigned int all_chars; unsigned int all_chars;
all_chars = hb_ot_layout_feature_get_characters (face, HB_OT_TAG_GSUB, feature_index, 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 (all_chars == 2);
g_assert (char_count == 2); g_assert (char_count == 2);