[name] Start implementing hb_ot_name_get_utf16()
authorBehdad Esfahbod <behdad@behdad.org>
Tue, 16 Oct 2018 06:09:28 +0000 (23:09 -0700)
committerBehdad Esfahbod <behdad@behdad.org>
Sat, 27 Oct 2018 04:22:26 +0000 (21:22 -0700)
src/hb-ot-name-table.hh
src/hb-ot-name.cc
src/hb-ot-name.h

index 37a2d42..3d7b731 100644 (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;
   };
 
index 85995f8..b5143d3 100644 (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
+}
index 4c0db0f..013ce8d 100644 (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