From 8751de50831338ce550601c34c17d152ad89c1fd Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Thu, 18 Jul 2013 16:29:50 -0400 Subject: [PATCH] Followup fix for 3f9e2dced298c3d00f31b2dfc38685bb071a3a22 During GSUB, if a ligation happens, subsequence context input matching matches the new indexing. During GPOS however, the indices never change. So just go one by one. Fixes 'dist' positioning with mmrtext.ttf and the following sequence: U+1014,U+1039,U+1011,U+1014,U+1039,U+1011,U+1014,U+1039,U+1011 Reported by Jonathan Kew. --- src/hb-ot-layout-gsubgpos-private.hh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/hb-ot-layout-gsubgpos-private.hh b/src/hb-ot-layout-gsubgpos-private.hh index 2b95009..9ac99fe 100644 --- a/src/hb-ot-layout-gsubgpos-private.hh +++ b/src/hb-ot-layout-gsubgpos-private.hh @@ -1009,6 +1009,8 @@ static inline bool apply_lookup (hb_apply_context_t *c, unsigned int i = 0; if (lookupCount && 0 == lookupRecord->sequenceIndex) { + unsigned int old_pos = c->buffer->idx; + /* Apply a lookup */ bool done = c->recurse (lookupRecord->lookupListIndex); @@ -1020,6 +1022,8 @@ static inline bool apply_lookup (hb_apply_context_t *c, goto not_applied; else { + if (c->table_index == 1) + c->buffer->idx = old_pos + 1; /* Reinitialize iterator. */ hb_apply_context_t::skipping_forward_iterator_t tmp (c, c->buffer->idx - 1, count - i); tmp.set_syllable (syllable); @@ -1041,6 +1045,8 @@ static inline bool apply_lookup (hb_apply_context_t *c, if (lookupCount && i == lookupRecord->sequenceIndex) { + unsigned int old_pos = c->buffer->idx; + /* Apply a lookup */ bool done = c->recurse (lookupRecord->lookupListIndex); @@ -1052,6 +1058,8 @@ static inline bool apply_lookup (hb_apply_context_t *c, goto not_applied2; else { + if (c->table_index == 1) + c->buffer->idx = old_pos + 1; /* Reinitialize iterator. */ hb_apply_context_t::skipping_forward_iterator_t tmp (c, c->buffer->idx - 1, count - i); tmp.set_syllable (syllable); -- 2.7.4