src/hb-ot-cmap-table.hh | 55 ++++++++++++++++++++++++++++++------------------ src/hb-ot-font.cc | 13 ++--------- 2 files changed, 38 insertions(+), 30 deletions(-)
New commits: commit 56ba998cddbb2ba5d24fb0b02d2bf77a46c0f23f Author: Behdad Esfahbod <[email protected]> Date: Mon Nov 5 19:49:54 2018 -0500 [cmap] Push get_nominal_glyphs down into cmap accelerator diff --git a/src/hb-ot-cmap-table.hh b/src/hb-ot-cmap-table.hh index 2013ae98..399c46bf 100644 --- a/src/hb-ot-cmap-table.hh +++ b/src/hb-ot-cmap-table.hh @@ -1060,6 +1060,27 @@ struct cmap if (unlikely (!this->get_glyph_funcZ)) return false; return this->get_glyph_funcZ (this->get_glyph_data, unicode, glyph); } + inline unsigned int get_nominal_glyphs (unsigned int count, + const hb_codepoint_t *first_unicode, + unsigned int unicode_stride, + hb_codepoint_t *first_glyph, + unsigned int glyph_stride) const + { + if (unlikely (!this->get_glyph_funcZ)) return 0; + + hb_cmap_get_glyph_func_t get_glyph_funcZ = this->get_glyph_funcZ; + const void *get_glyph_data = this->get_glyph_data; + + unsigned int done; + for (done = 0; + done < count && get_glyph_funcZ (get_glyph_data, *first_unicode, first_glyph); + done++) + { + first_unicode = &StructAtOffset<hb_codepoint_t> (first_unicode, unicode_stride); + first_glyph = &StructAtOffset<hb_codepoint_t> (first_glyph, glyph_stride); + } + return done; + } inline bool get_variation_glyph (hb_codepoint_t unicode, hb_codepoint_t variation_selector, diff --git a/src/hb-ot-font.cc b/src/hb-ot-font.cc index 41bea140..3e2f1f65 100644 --- a/src/hb-ot-font.cc +++ b/src/hb-ot-font.cc @@ -76,16 +76,9 @@ hb_ot_get_nominal_glyphs (hb_font_t *font HB_UNUSED, void *user_data HB_UNUSED) { const hb_ot_face_data_t *ot_face = (const hb_ot_face_data_t *) font_data; - const OT::cmap_accelerator_t &cmap = *ot_face->cmap; - unsigned int done; - for (done = 0; - done < count && cmap.get_nominal_glyph (*first_unicode, first_glyph); - done++) - { - first_unicode = &StructAtOffset<hb_codepoint_t> (first_unicode, unicode_stride); - first_glyph = &StructAtOffset<hb_codepoint_t> (first_glyph, glyph_stride); - } - return done; + return ot_face->cmap->get_nominal_glyphs (count, + first_unicode, unicode_stride, + first_glyph, glyph_stride); } static hb_bool_t commit 36d85dce25abd079252d973f804220bf7b97e987 Author: Behdad Esfahbod <[email protected]> Date: Mon Nov 5 19:46:29 2018 -0500 [cmap] Use hb_nonnullptr_t diff --git a/src/hb-ot-cmap-table.hh b/src/hb-ot-cmap-table.hh index bcb50790..2013ae98 100644 --- a/src/hb-ot-cmap-table.hh +++ b/src/hb-ot-cmap-table.hh @@ -1017,22 +1017,20 @@ struct cmap this->blob = hb_sanitize_context_t().reference_table<cmap> (face); const cmap *table = this->blob->as<cmap> (); bool symbol; - subtableZ = table->find_best_subtable (&symbol); - - /* UVS subtable. */ - subtable_uvsZ = &Null(CmapSubtableFormat14); + this->subtable = table->find_best_subtable (&symbol); + this->subtable_uvs = &Null(CmapSubtableFormat14); { const CmapSubtable *st = table->find_subtable (0, 5); if (st && st->u.format == 14) - subtable_uvsZ = &st->u.format14; + subtable_uvs = &st->u.format14; } - this->get_glyph_data = subtableZ; + this->get_glyph_data = subtable; if (unlikely (symbol)) { this->get_glyph_funcZ = get_glyph_from_symbol<CmapSubtable>; } else { - switch (subtableZ->u.format) { + switch (subtable->u.format) { /* Accelerate format 4 and format 12. */ default: this->get_glyph_funcZ = get_glyph_from<CmapSubtable>; @@ -1042,7 +1040,7 @@ struct cmap break; case 4: { - this->format4_accel.init (&subtableZ->u.format4); + this->format4_accel.init (&subtable->u.format4); this->get_glyph_data = &this->format4_accel; this->get_glyph_funcZ = this->format4_accel.get_glyph_func; } @@ -1067,10 +1065,9 @@ struct cmap hb_codepoint_t variation_selector, hb_codepoint_t *glyph) const { - if (unlikely (!this->subtable_uvsZ)) return false; - switch (this->subtable_uvsZ->get_glyph_variant (unicode, - variation_selector, - glyph)) + switch (this->subtable_uvs->get_glyph_variant (unicode, + variation_selector, + glyph)) { case GLYPH_VARIANT_NOT_FOUND: return false; case GLYPH_VARIANT_FOUND: return true; @@ -1082,19 +1079,16 @@ struct cmap inline void collect_unicodes (hb_set_t *out) const { - if (unlikely (!this->subtableZ)) return; - subtableZ->collect_unicodes (out); + subtable->collect_unicodes (out); } inline void collect_variation_selectors (hb_set_t *out) const { - if (unlikely (!this->subtable_uvsZ)) return; - subtable_uvsZ->collect_variation_selectors (out); + subtable_uvs->collect_variation_selectors (out); } inline void collect_variation_unicodes (hb_codepoint_t variation_selector, hb_set_t *out) const { - if (unlikely (!this->subtable_uvsZ)) return; - subtable_uvsZ->collect_variation_unicodes (variation_selector, out); + subtable_uvs->collect_variation_unicodes (variation_selector, out); } protected: @@ -1134,8 +1128,8 @@ struct cmap } private: - const CmapSubtable *subtableZ; - const CmapSubtableFormat14 *subtable_uvsZ; + hb_nonnull_ptr_t<const CmapSubtable> subtable; + hb_nonnull_ptr_t<const CmapSubtableFormat14> subtable_uvs; hb_cmap_get_glyph_func_t get_glyph_funcZ; const void *get_glyph_data; _______________________________________________ HarfBuzz mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/harfbuzz
