提交 3608a684 编写于 作者: B Behdad Esfahbod

[ot] Hook up cmap table to hb_ot_font_funcs()

上级 c8a47452
...@@ -193,14 +193,18 @@ struct cmap ...@@ -193,14 +193,18 @@ struct cmap
{ {
static const hb_tag_t tableTag = HB_OT_TAG_cmap; static const hb_tag_t tableTag = HB_OT_TAG_cmap;
inline unsigned int find_subtable (unsigned int platform_id, inline const CmapSubtable *find_subtable (unsigned int platform_id,
unsigned int encoding_id) const unsigned int encoding_id) const
{ {
EncodingRecord key; EncodingRecord key;
key.platformID.set (platform_id); key.platformID.set (platform_id);
key.encodingID.set (encoding_id); key.encodingID.set (encoding_id);
return encodingRecord.search (key); int result = encodingRecord.search (key);
if (result == -1)
return NULL;
return &(this+encodingRecord[result].subtable);
} }
inline bool sanitize (hb_sanitize_context_t *c) { inline bool sanitize (hb_sanitize_context_t *c) {
......
...@@ -42,6 +42,9 @@ struct hb_ot_font_t ...@@ -42,6 +42,9 @@ struct hb_ot_font_t
unsigned int num_hmetrics; unsigned int num_hmetrics;
const OT::hmtx *hmtx; const OT::hmtx *hmtx;
hb_blob_t *hmtx_blob; hb_blob_t *hmtx_blob;
const OT::CmapSubtable *cmap;
hb_blob_t *cmap_blob;
}; };
...@@ -69,15 +72,25 @@ _hb_ot_font_create (hb_font_t *font) ...@@ -69,15 +72,25 @@ _hb_ot_font_create (hb_font_t *font)
free (ot_font); free (ot_font);
return NULL; return NULL;
} }
ot_font->hmtx = OT::Sanitizer<OT::hmtx>::lock_instance (ot_font->hmtx_blob); ot_font->hmtx = OT::Sanitizer<OT::hmtx>::lock_instance (ot_font->hmtx_blob);
ot_font->cmap_blob = OT::Sanitizer<OT::cmap>::sanitize (font->face->reference_table (HB_OT_TAG_cmap));
const OT::cmap *cmap = OT::Sanitizer<OT::cmap>::lock_instance (ot_font->cmap_blob);
const OT::CmapSubtable *subtable = NULL;
if (!subtable) subtable = cmap->find_subtable (0, 3);
if (!subtable) subtable = cmap->find_subtable (3, 1);
if (!subtable) subtable = &OT::Null(OT::CmapSubtable);
ot_font->cmap = subtable;
return ot_font; return ot_font;
} }
static void static void
_hb_ot_font_destroy (hb_ot_font_t *ot_font) _hb_ot_font_destroy (hb_ot_font_t *ot_font)
{ {
hb_blob_destroy (ot_font->cmap_blob);
hb_blob_destroy (ot_font->hmtx_blob); hb_blob_destroy (ot_font->hmtx_blob);
free (ot_font); free (ot_font);
...@@ -93,24 +106,16 @@ hb_ot_get_glyph (hb_font_t *font HB_UNUSED, ...@@ -93,24 +106,16 @@ hb_ot_get_glyph (hb_font_t *font HB_UNUSED,
void *user_data HB_UNUSED) void *user_data HB_UNUSED)
{ {
#if 0 const hb_ot_font_t *ot_font = (const hb_ot_font_t *) font_data;
FT_Face ft_face = (FT_Face) font_data;
#ifdef HAVE_FT_FACE_GETCHARVARIANTINDEX if (unlikely (variation_selector))
if (unlikely (variation_selector)) { return false;
*glyph = FT_Face_GetCharVariantIndex (ft_face, unicode, variation_selector);
return *glyph != 0;
}
#endif
*glyph = FT_Get_Char_Index (ft_face, unicode); return ot_font->cmap->get_glyph (unicode, glyph);
return *glyph != 0;
#endif
return true;
} }
static hb_position_t static hb_position_t
hb_ot_get_glyph_h_advance (hb_font_t *font, hb_ot_get_glyph_h_advance (hb_font_t *font HB_UNUSED,
void *font_data, void *font_data,
hb_codepoint_t glyph, hb_codepoint_t glyph,
void *user_data HB_UNUSED) void *user_data HB_UNUSED)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册