From: Behdad Esfahbod Date: Sun, 31 Jul 2011 21:51:50 +0000 (-0400) Subject: [Indic] Stop looking for base upon seeing joiners X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5e72071062c015237b79fbd0521341a63166a204;p=platform%2Fupstream%2FlibHarfBuzzSharp.git [Indic] Stop looking for base upon seeing joiners Not sure where this is documented, but I remember this being the desired behavior. test-shape-complex failures are down from 48 to 46. Meh. --- diff --git a/src/hb-ot-shape-complex-indic.cc b/src/hb-ot-shape-complex-indic.cc index ddcdb00..8800d2f 100644 --- a/src/hb-ot-shape-complex-indic.cc +++ b/src/hb-ot-shape-complex-indic.cc @@ -439,11 +439,15 @@ found_consonant_syllable (const hb_ot_map_t *map, hb_buffer_t *buffer, hb_mask_t * base consonants. */ - unsigned int base = 0; + unsigned int base = end; /* -> starting from the end of the syllable, move backwards */ i = end; - unsigned int limit = start + (info[start].indic_category() == OT_Ra ? 2 : 0); + unsigned int limit = start; + if (info[start].indic_category() == OT_Ra && start + 2 <= end) { + limit += 2; + base = start; + }; do { i--; /* -> until a consonant is found */ @@ -476,6 +480,9 @@ found_consonant_syllable (const hb_ot_map_t *map, hb_buffer_t *buffer, hb_mask_t * be the base. */ base = i; } + else + if (is_joiner (info[i])) + break; } while (i > limit); if (base < start) base = start; /* Just in case... */