[meta] hb_ot_metadata_get_entries, tags iteration API
This commit is contained in:
parent
3ac03bd67c
commit
bc65ebbce7
|
@ -42,6 +42,8 @@ struct DataMap
|
||||||
{
|
{
|
||||||
int cmp (hb_tag_t a) const { return tag.cmp (a); }
|
int cmp (hb_tag_t a) const { return tag.cmp (a); }
|
||||||
|
|
||||||
|
hb_tag_t get_tag () const { return tag; }
|
||||||
|
|
||||||
hb_blob_t *reference_entry (hb_blob_t *meta_blob) const
|
hb_blob_t *reference_entry (hb_blob_t *meta_blob) const
|
||||||
{ return hb_blob_create_sub_blob (meta_blob, dataZ, dataLength); }
|
{ return hb_blob_create_sub_blob (meta_blob, dataZ, dataLength); }
|
||||||
|
|
||||||
|
@ -76,6 +78,21 @@ struct meta
|
||||||
hb_blob_t *reference_entry (hb_tag_t tag) const
|
hb_blob_t *reference_entry (hb_tag_t tag) const
|
||||||
{ return table->dataMaps.lsearch (tag, Null (DataMap)).reference_entry (table.get_blob ()); }
|
{ return table->dataMaps.lsearch (tag, Null (DataMap)).reference_entry (table.get_blob ()); }
|
||||||
|
|
||||||
|
unsigned int get_entries (unsigned int start_offset,
|
||||||
|
unsigned int *count,
|
||||||
|
hb_ot_metadata_t *entries) const
|
||||||
|
{
|
||||||
|
unsigned int entries_count = table->dataMaps.len;
|
||||||
|
if (count && *count)
|
||||||
|
{
|
||||||
|
unsigned int len = hb_min (entries_count - start_offset, *count);
|
||||||
|
for (unsigned int i = 0; i < len; i++)
|
||||||
|
entries[i] = (hb_ot_metadata_t) table->dataMaps[i + start_offset].get_tag ();
|
||||||
|
*count = len;
|
||||||
|
}
|
||||||
|
return table->dataMaps.len;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
hb_blob_ptr_t<meta> table;
|
hb_blob_ptr_t<meta> table;
|
||||||
};
|
};
|
||||||
|
|
|
@ -38,9 +38,29 @@
|
||||||
**/
|
**/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* hb_ot_meta_reference_entry:
|
* hb_ot_metadata_reference_entry:
|
||||||
|
* @face: a face object
|
||||||
|
* @start_offset: iteration's start offset
|
||||||
|
* @entries_count:(inout) (allow-none): buffer size as input, filled size as output
|
||||||
|
* @entries: (out caller-allocates) (array length=entries_count): entries tags buffer
|
||||||
|
*
|
||||||
|
* Return value: Number of all available feature types.
|
||||||
|
*
|
||||||
|
* Since: REPLACEME
|
||||||
|
**/
|
||||||
|
unsigned int
|
||||||
|
hb_ot_metadata_get_entries (hb_face_t *face,
|
||||||
|
unsigned int start_offset,
|
||||||
|
unsigned int *entries_count, /* IN/OUT. May be NULL. */
|
||||||
|
hb_ot_metadata_t *entries /* OUT. May be NULL. */)
|
||||||
|
{
|
||||||
|
return face->table.meta->get_entries (start_offset, entries_count, entries);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hb_ot_metadata_reference_entry:
|
||||||
* @face: a #hb_face_t object.
|
* @face: a #hb_face_t object.
|
||||||
* @meta_tag: tag of metadata you like to have.
|
* @metadata_tag: tag of metadata you like to have.
|
||||||
*
|
*
|
||||||
* It fetches metadata entry of a given tag from a font.
|
* It fetches metadata entry of a given tag from a font.
|
||||||
*
|
*
|
||||||
|
@ -49,9 +69,9 @@
|
||||||
* Since: REPLACEME
|
* Since: REPLACEME
|
||||||
**/
|
**/
|
||||||
hb_blob_t *
|
hb_blob_t *
|
||||||
hb_ot_metadata_reference_entry (hb_face_t *face, hb_ot_metadata_t meta_tag)
|
hb_ot_metadata_reference_entry (hb_face_t *face, hb_ot_metadata_t metadata_tag)
|
||||||
{
|
{
|
||||||
return face->table.meta->reference_entry (meta_tag);
|
return face->table.meta->reference_entry (metadata_tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -49,8 +49,14 @@ typedef enum {
|
||||||
HB_OT_METADATA_SUPPORTED_LANGUAGES = HB_TAG ('s','l','n','g')
|
HB_OT_METADATA_SUPPORTED_LANGUAGES = HB_TAG ('s','l','n','g')
|
||||||
} hb_ot_metadata_t;
|
} hb_ot_metadata_t;
|
||||||
|
|
||||||
|
HB_EXTERN unsigned int
|
||||||
|
hb_ot_metadata_get_entries (hb_face_t *face,
|
||||||
|
unsigned int start_offset,
|
||||||
|
unsigned int *entries_count, /* IN/OUT. May be NULL. */
|
||||||
|
hb_ot_metadata_t *entries /* OUT. May be NULL. */);
|
||||||
|
|
||||||
HB_EXTERN hb_blob_t *
|
HB_EXTERN hb_blob_t *
|
||||||
hb_ot_metadata_reference_entry (hb_face_t *face, hb_ot_metadata_t tag);
|
hb_ot_metadata_reference_entry (hb_face_t *face, hb_ot_metadata_t metadata_tag);
|
||||||
|
|
||||||
HB_END_DECLS
|
HB_END_DECLS
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,31 @@
|
||||||
|
|
||||||
/* Unit tests for hb-ot-metadata.h */
|
/* Unit tests for hb-ot-metadata.h */
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_ot_metadata_get_entries (void)
|
||||||
|
{
|
||||||
|
hb_face_t *face = hb_test_open_font_file ("fonts/meta.ttf");
|
||||||
|
hb_ot_metadata_t entries[2];
|
||||||
|
|
||||||
|
unsigned int entries_count = 2;
|
||||||
|
g_assert_cmpint (hb_ot_metadata_get_entries (face, 0, &entries_count, entries), ==, 5);
|
||||||
|
g_assert_cmpint (entries_count, ==, 2);
|
||||||
|
g_assert_cmpint (entries[0], ==, HB_TAG ('a','p','p','l'));
|
||||||
|
g_assert_cmpint (entries[1], ==, HB_TAG ('b','i','l','d'));
|
||||||
|
|
||||||
|
entries_count = 1;
|
||||||
|
g_assert_cmpint (hb_ot_metadata_get_entries (face, 2, &entries_count, entries), ==, 5);
|
||||||
|
g_assert_cmpint (entries_count, ==, 1);
|
||||||
|
g_assert_cmpint (entries[0], ==, HB_TAG ('d','l','n','g'));
|
||||||
|
|
||||||
|
entries_count = 2;
|
||||||
|
g_assert_cmpint (hb_ot_metadata_get_entries (face, 4, &entries_count, entries), ==, 5);
|
||||||
|
g_assert_cmpint (entries_count, ==, 1);
|
||||||
|
g_assert_cmpint (entries[0], ==, HB_TAG ('s','l','n','g'));
|
||||||
|
|
||||||
|
hb_face_destroy (face);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_ot_metadata_reference_entry (void)
|
test_ot_metadata_reference_entry (void)
|
||||||
{
|
{
|
||||||
|
@ -53,6 +78,7 @@ int
|
||||||
main (int argc, char **argv)
|
main (int argc, char **argv)
|
||||||
{
|
{
|
||||||
hb_test_init (&argc, &argv);
|
hb_test_init (&argc, &argv);
|
||||||
|
hb_test_add (test_ot_metadata_get_entries);
|
||||||
hb_test_add (test_ot_metadata_reference_entry);
|
hb_test_add (test_ot_metadata_reference_entry);
|
||||||
return hb_test_run ();
|
return hb_test_run ();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue