[name] Start implementing hb_ot_name_get_utf16()

This commit is contained in:
Behdad Esfahbod 2018-10-15 23:09:28 -07:00
parent 740cde8991
commit c2aa409537
3 changed files with 32 additions and 4 deletions

View File

@ -165,8 +165,9 @@ struct name
inline void init (hb_face_t *face)
{
this->blob = hb_sanitize_context_t().reference_table<name> (face);
const name *table = this->blob->as<name> ();
const hb_array_t<NameRecord> &all_names = hb_array_t<NameRecord> (table->nameRecordZ.arrayZ, table->count);
this->table = this->blob->as<name> ();
const hb_array_t<NameRecord> &all_names = hb_array_t<NameRecord> (this->table->nameRecordZ.arrayZ,
this->table->count);
this->names.init ();
@ -204,6 +205,7 @@ struct name
private:
hb_blob_t *blob;
public:
const name *table;
hb_vector_t<hb_ot_name_entry_t> names;
};

View File

@ -48,3 +48,25 @@ hb_ot_name_get_names (hb_face_t *face,
*entries = name.names.arrayZ();
return name.names.len;
}
hb_bool_t
hb_ot_name_get_utf16 (hb_face_t *face,
hb_name_id_t name_id,
hb_language_t language,
unsigned int *text_size /* IN/OUT */,
uint16_t *text /* OUT */)
{
const OT::name_accelerator_t &name = _get_name (face);
unsigned int idx = 0; //XXX
hb_bytes_t bytes = name.table->get_name (idx);
if (*text_size)
{
/* TODO Switch to walking string and validating. */
memcpy (text, bytes.arrayZ, MIN (*text_size * 2, bytes.len));
}
/* XXX Null-terminate. */
*text_size = bytes.len / 2; //TODO
/* TODO Fallback? */
return true; //XXX
}

View File

@ -49,12 +49,14 @@ typedef unsigned int hb_name_id_t;
#define HB_NAME_ID_INVALID 0xFFFF
#if 0
HB_EXTERN hb_bool_t
hb_ot_name_get_utf8 (hb_face_t *face,
Xhb_ot_name_get_utf8 (hb_face_t *face,
hb_name_id_t name_id,
hb_language_t language,
unsigned int *text_size /* IN/OUT */,
char *text /* OUT */);
#endif
HB_EXTERN hb_bool_t
hb_ot_name_get_utf16 (hb_face_t *face,
@ -63,12 +65,14 @@ hb_ot_name_get_utf16 (hb_face_t *face,
unsigned int *text_size /* IN/OUT */,
uint16_t *text /* OUT */);
#if 0
HB_EXTERN hb_bool_t
hb_ot_name_get_utf32 (hb_face_t *face,
Xhb_ot_name_get_utf32 (hb_face_t *face,
hb_name_id_t name_id,
hb_language_t language,
unsigned int *text_size /* IN/OUT */,
uint32_t *text /* OUT */);
#endif
typedef struct hb_ot_name_entry_t