[Indic] Stop searching for base if a post form is found before below form
authorBehdad Esfahbod <behdad@behdad.org>
Fri, 20 Jul 2012 22:38:27 +0000 (18:38 -0400)
committerBehdad Esfahbod <behdad@behdad.org>
Fri, 20 Jul 2012 22:55:15 +0000 (18:55 -0400)
Improves Bengali and Gurmukhi.  Malayalam regressed a bit.  We will deal
with that later.

src/hb-ot-shape-complex-indic.cc

index b5ad4ae..ad55f77 100644 (file)
@@ -505,6 +505,7 @@ initial_reordering_consonant_syllable (const hb_ot_map_t *map, hb_buffer_t *buff
     {
       /* -> starting from the end of the syllable, move backwards */
       unsigned int i = end;
+      bool seen_below = false;
       do {
        i--;
        /* -> until a consonant is found */
@@ -513,11 +514,13 @@ initial_reordering_consonant_syllable (const hb_ot_map_t *map, hb_buffer_t *buff
          /* -> that does not have a below-base or post-base form
           * (post-base forms have to follow below-base forms), */
          if (info[i].indic_position() != POS_BELOW_C &&
-             info[i].indic_position() != POS_POST_C)
+             (info[i].indic_position() != POS_POST_C || seen_below))
          {
            base = i;
            break;
          }
+         if (info[i].indic_position() == POS_BELOW_C)
+           seen_below = true;
 
          /* -> or that is not a pre-base reordering Ra,
           *