Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/pango/ChangeLog,v
retrieving revision 1.956
diff -u -p -r1.956 ChangeLog
--- ChangeLog	30 Jul 2004 17:48:52 -0000	1.956
+++ ChangeLog	30 Jul 2004 18:26:51 -0000
@@ -1,3 +1,15 @@
+Fri Jul 30 14:05:25 2004  Owen Taylor  <otaylor@redhat.com>
+
+	Improve handling of decomposed two-part vowels 
+	(#121882, Jungshik Shin)
+
+	* modules/indic/indic-ot-class-tables.c (stateTable): 
+	allow a dependent vowel to be followed by another 
+	dependent vowel.
+
+	* modules/indic/indic-ot.c (indic_ot_reorder): Handle
+	multiple vowel matras.
+
 Fri Jul 30 13:33:49 2004  Owen Taylor  <otaylor@redhat.com>
 
 	* modules/indic/indic-ot.c (indic_ot_reorder): Suppress
Index: modules/indic/indic-ot-class-tables.c
===================================================================
RCS file: /cvs/gnome/pango/modules/indic/indic-ot-class-tables.c,v
retrieving revision 1.6
diff -u -p -r1.6 indic-ot-class-tables.c
--- modules/indic/indic-ot-class-tables.c	29 Jul 2004 22:37:39 -0000	1.6
+++ modules/indic/indic-ot-class-tables.c	30 Jul 2004 18:26:51 -0000
@@ -399,7 +399,7 @@ static const gint8 stateTable[][CC_COUNT
     {-1,  6,  1, -1, -1, -1, -1,  5,  4, -1},
     {-1,  6,  1, -1, -1, -1,  2,  5,  4, -1},
     {-1, -1, -1, -1,  3,  2, -1, -1, -1,  8},
-    {-1,  6,  1, -1, -1, -1, -1, -1, -1, -1},
+    {-1,  6,  1, -1, -1, -1, -1,  5, -1, -1},
     {-1,  7,  1, -1, -1, -1, -1, -1, -1, -1},
     {-1, -1,  1, -1, -1, -1, -1, -1, -1, -1},
     {-1, -1, -1, -1,  3,  2, -1, -1, -1, -1}
Index: modules/indic/indic-ot.c
===================================================================
RCS file: /cvs/gnome/pango/modules/indic/indic-ot.c,v
retrieving revision 1.8
diff -u -p -r1.8 indic-ot.c
--- modules/indic/indic-ot.c	30 Jul 2004 17:48:53 -0000	1.8
+++ modules/indic/indic-ot.c	30 Jul 2004 18:26:51 -0000
@@ -71,14 +71,17 @@ static void saveMatra(Output *output, gu
     }
 }
 
-static void noteMatra(Output *output, const IndicOTClassTable *classTable, gunichar matra, guint32 matraIndex, gulong matraTags)
+static void initMatra(Output *output, guint32 matraIndex, gulong matraTags)
 {
-    IndicOTCharClass matraClass = indic_ot_get_char_class(classTable, matra);
-
     output->fMpre = output->fMbelow = output->fMabove = output->fMpost = output->fLengthMark = 0;
     output->fMPreOutIndex = -1;
     output->fMatraIndex = matraIndex;
     output->fMatraTags = matraTags;
+}
+
+static gboolean noteMatra(Output *output, const IndicOTClassTable *classTable, gunichar matra)
+{
+    IndicOTCharClass matraClass = indic_ot_get_char_class(classTable, matra);
 
     if (IS_MATRA(matraClass)) {
         if (IS_SPLIT_MATRA(matraClass)) {
@@ -94,7 +97,10 @@ static void noteMatra(Output *output, co
         } else {
             saveMatra(output, matra, matraClass);
         }
-    }
+	
+	return TRUE;
+    } else
+      return FALSE;
 }
 
 static void noteBaseConsonant(Output *output)
@@ -184,7 +190,10 @@ glong indic_ot_reorder(const gunichar *c
         }
 
         matra = vmabove - 1;
-        noteMatra(&output, class_table, chars[matra], /*matra*/ prev, blwf_p);
+	initMatra(&output, prev, blwf_p);
+	while (noteMatra(&output, class_table, chars[matra]) &&
+	       matra != prev)
+	    matra--;
 
         switch (indic_ot_get_char_class(class_table, chars[prev]) & CF_CLASS_MASK) {
         case CC_RESERVED:
