[Indic] Handle Vowel syllables
authorBehdad Esfahbod <behdad@behdad.org>
Thu, 10 May 2012 10:07:33 +0000 (12:07 +0200)
committerBehdad Esfahbod <behdad@behdad.org>
Thu, 10 May 2012 10:21:30 +0000 (12:21 +0200)
Reusing the consonant logic!

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

index 7bf282e..681391e 100644 (file)
@@ -83,8 +83,7 @@ enum indic_position_t {
   POS_SMVD
 };
 
-/* Categories used in IndicSyllabicCategory.txt from UCD */
-/* The assignments are guesswork */
+/* Categories used in IndicSyllabicCategory.txt from UCD. */
 enum indic_syllabic_category_t {
   INDIC_SYLLABIC_CATEGORY_OTHER                        = OT_X,
 
index dff464b..c1d731c 100644 (file)
@@ -67,7 +67,10 @@ is_joiner (const hb_glyph_info_t &info)
 static bool
 is_consonant (const hb_glyph_info_t &info)
 {
-  return !!(FLAG (info.indic_category()) & (FLAG (OT_C) | FLAG (OT_Ra)));
+  /* Note: We treat Vowels as if they were consonants.  This is safe because Vowels
+   * cannot happen in a consonant syllable.  The plus side however is, we can call the
+   * consonant syllable logic from the vowel syllable function and get it all right! */
+  return !!(FLAG (info.indic_category()) & (FLAG (OT_C) | FLAG (OT_Ra) | FLAG (OT_V)));
 }
 
 static const struct {
@@ -417,10 +420,8 @@ static void
 initial_reordering_vowel_syllable (const hb_ot_map_t *map, hb_buffer_t *buffer, hb_mask_t *mask_array,
                                   unsigned int start, unsigned int end)
 {
-  /* TODO
-   * Not clear to me how this should work.  Do the matras move to before the
-   * independent vowel?  No idea.
-   */
+  /* We made the vowels look like consonants.  So let's call the consonant logic! */
+  initial_reordering_consonant_syllable (map, buffer, mask_array, start, end);
 }
 
 static void