src/hb-buffer-private.hh | 2 ++ src/hb-ot-layout-gpos-table.hh | 15 ++++++++------- src/hb-ot-shape.cc | 7 +++++++ 3 files changed, 17 insertions(+), 7 deletions(-)
New commits: commit e95eb23a4ee920eab1e2f4eec9cf490bb431452c Author: Behdad Esfahbod <beh...@behdad.org> Date: Wed Nov 4 22:55:11 2015 -0800 Don't try zeroing marks by GDEF if there are no non-ASCII This one is a hack, but should be ok. diff --git a/src/hb-ot-shape.cc b/src/hb-ot-shape.cc index 8d4b169..36b1297 100644 --- a/src/hb-ot-shape.cc +++ b/src/hb-ot-shape.cc @@ -638,6 +638,10 @@ zero_mark_widths_by_unicode (hb_buffer_t *buffer, bool adjust_offsets) static inline void zero_mark_widths_by_gdef (hb_buffer_t *buffer, bool adjust_offsets) { + /* This one is a hack; Technically GDEF can mark ASCII glyphs as marks, but we don't listen. */ + if (!(buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_NON_ASCII)) + return; + unsigned int count = buffer->len; hb_glyph_info_t *info = buffer->info; for (unsigned int i = 0; i < count; i++) commit 7fa54ed75aa30ae1d6ee9136ccb83b630c24fb65 Author: Behdad Esfahbod <beh...@behdad.org> Date: Wed Nov 4 22:54:49 2015 -0800 Don't try zeroing mark attachments by Unicode if there's no non-ASCII diff --git a/src/hb-ot-shape.cc b/src/hb-ot-shape.cc index 4b2732b..8d4b169 100644 --- a/src/hb-ot-shape.cc +++ b/src/hb-ot-shape.cc @@ -621,6 +621,9 @@ zero_mark_width (hb_glyph_position_t *pos) static inline void zero_mark_widths_by_unicode (hb_buffer_t *buffer, bool adjust_offsets) { + if (!(buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_NON_ASCII)) + return; + unsigned int count = buffer->len; hb_glyph_info_t *info = buffer->info; for (unsigned int i = 0; i < count; i++) commit 550bd14d2b21ec2a2b509ff42f4df4341dbf2d46 Author: Behdad Esfahbod <beh...@behdad.org> Date: Wed Nov 4 22:58:58 2015 -0800 Actually commit changes for previous commit diff --git a/src/hb-buffer-private.hh b/src/hb-buffer-private.hh index 8550517..53c6780 100644 --- a/src/hb-buffer-private.hh +++ b/src/hb-buffer-private.hh @@ -46,6 +46,8 @@ enum hb_buffer_scratch_flags_t { HB_BUFFER_SCRATCH_FLAG_HAS_NON_ASCII = 0x00000001u, HB_BUFFER_SCRATCH_FLAG_HAS_DEFAULT_IGNORABLES = 0x00000002u, HB_BUFFER_SCRATCH_FLAG_HAS_SPACE_FALLBACK = 0x00000004u, + HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_CURSIVE = 0x00000008u, + HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT = 0x00000010u, }; template <> class hb_mark_as_flags_t<hb_buffer_scratch_flags_t> {}; diff --git a/src/hb-ot-layout-gpos-table.hh b/src/hb-ot-layout-gpos-table.hh index 3bb0913..8bb9107 100644 --- a/src/hb-ot-layout-gpos-table.hh +++ b/src/hb-ot-layout-gpos-table.hh @@ -426,6 +426,7 @@ struct MarkArray : ArrayOf<MarkRecord> /* Array of MarkRecords--in Coverage orde o.x_offset = base_x - mark_x; o.y_offset = base_y - mark_y; o.attach_lookback() = buffer->idx - glyph_pos; + buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT; buffer->idx++; return_trace (true); @@ -993,6 +994,7 @@ struct CursivePosFormat1 reverse_cursive_minor_offset (pos, child, c->direction, parent); pos[child].cursive_chain() = parent - child; + buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_CURSIVE; if (likely (HB_DIRECTION_IS_HORIZONTAL (c->direction))) pos[child].y_offset = y_offset; else @@ -1599,15 +1601,14 @@ GPOS::position_finish (hb_font_t *font HB_UNUSED, hb_buffer_t *buffer) hb_direction_t direction = buffer->props.direction; /* Handle cursive connections */ - for (unsigned int i = 0; i < len; i++) - fix_cursive_minor_offset (pos, i, direction); - - if (!(buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_NON_ASCII)) - return; + if (buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_CURSIVE) + for (unsigned int i = 0; i < len; i++) + fix_cursive_minor_offset (pos, i, direction); /* Handle attachments */ - for (unsigned int i = 0; i < len; i++) - fix_mark_attachment (pos, i, direction); + if (buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT) + for (unsigned int i = 0; i < len; i++) + fix_mark_attachment (pos, i, direction); } _______________________________________________ HarfBuzz mailing list HarfBuzz@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/harfbuzz