[Indic] Improve matra vs consonant ordering

Another 1.5% down.
diff --git a/src/hb-ot-shape-complex-indic-private.hh b/src/hb-ot-shape-complex-indic-private.hh
index e60b00a..8ba37d3 100644
--- a/src/hb-ot-shape-complex-indic-private.hh
+++ b/src/hb-ot-shape-complex-indic-private.hh
@@ -62,11 +62,19 @@
 
 /* Visual positions in a syllable from left to right. */
 enum indic_position_t {
+  POS_LEFT_MATRA = 0,
+
   POS_PRE = 1,
   POS_BASE = 2,
   POS_ABOVE = 3,
   POS_BELOW = 4,
-  POS_POST = 5
+  POS_POST = 5,
+
+  POS_MATRAS = 6,
+
+  POS_REPH = 7,
+
+  POS_SMVD = 8
 };
 
 /* Categories used in IndicSyllabicCategory.txt from UCD */
@@ -100,10 +108,10 @@
 enum indic_matra_category_t {
   INDIC_MATRA_CATEGORY_NOT_APPLICABLE		= POS_BASE,
 
-  INDIC_MATRA_CATEGORY_LEFT			= POS_PRE - 1, /* Move *before* existing "pre" chars */
-  INDIC_MATRA_CATEGORY_TOP			= POS_ABOVE,
-  INDIC_MATRA_CATEGORY_BOTTOM			= POS_BELOW,
-  INDIC_MATRA_CATEGORY_RIGHT			= POS_POST,
+  INDIC_MATRA_CATEGORY_LEFT			= POS_LEFT_MATRA,
+  INDIC_MATRA_CATEGORY_TOP			= POS_MATRAS,
+  INDIC_MATRA_CATEGORY_BOTTOM			= POS_MATRAS,
+  INDIC_MATRA_CATEGORY_RIGHT			= POS_MATRAS,
 
   /* We don't really care much about these since we decompose them
    * in the generic pre-shaping layer.  They will only be used if
@@ -114,13 +122,13 @@
    * TODO: There are some split matras without Unicode decompositions.
    * We have to figure out what to do with them.
    */
-  INDIC_MATRA_CATEGORY_BOTTOM_AND_RIGHT		= 8 + INDIC_MATRA_CATEGORY_BOTTOM,
-  INDIC_MATRA_CATEGORY_LEFT_AND_RIGHT		= 8 + INDIC_MATRA_CATEGORY_LEFT,
-  INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM		= 8 + INDIC_MATRA_CATEGORY_BOTTOM,
-  INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM_AND_RIGHT	= 8 + INDIC_MATRA_CATEGORY_BOTTOM,
-  INDIC_MATRA_CATEGORY_TOP_AND_LEFT		= 8 + INDIC_MATRA_CATEGORY_LEFT,
-  INDIC_MATRA_CATEGORY_TOP_AND_LEFT_AND_RIGHT	= 8 + INDIC_MATRA_CATEGORY_LEFT,
-  INDIC_MATRA_CATEGORY_TOP_AND_RIGHT		= 8 + INDIC_MATRA_CATEGORY_RIGHT,
+  INDIC_MATRA_CATEGORY_BOTTOM_AND_RIGHT		= POS_MATRAS,
+  INDIC_MATRA_CATEGORY_LEFT_AND_RIGHT		= POS_LEFT_MATRA,
+  INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM		= POS_MATRAS,
+  INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM_AND_RIGHT	= POS_MATRAS,
+  INDIC_MATRA_CATEGORY_TOP_AND_LEFT		= POS_LEFT_MATRA,
+  INDIC_MATRA_CATEGORY_TOP_AND_LEFT_AND_RIGHT	= POS_LEFT_MATRA,
+  INDIC_MATRA_CATEGORY_TOP_AND_RIGHT		= POS_MATRAS,
 
   INDIC_MATRA_CATEGORY_INVISIBLE		= INDIC_MATRA_CATEGORY_NOT_APPLICABLE,
   INDIC_MATRA_CATEGORY_OVERSTRUCK		= INDIC_MATRA_CATEGORY_NOT_APPLICABLE,
diff --git a/src/hb-ot-shape-complex-indic.cc b/src/hb-ot-shape-complex-indic.cc
index 9b2732a..e4ae50f 100644
--- a/src/hb-ot-shape-complex-indic.cc
+++ b/src/hb-ot-shape-complex-indic.cc
@@ -173,7 +173,7 @@
     unsigned int type = get_indic_categories (buffer->info[i].codepoint);
 
     buffer->info[i].indic_category() = type & 0x0F;
-    buffer->info[i].indic_position() = (type >> 4) & 7;
+    buffer->info[i].indic_position() = type >> 4;
 
     if (buffer->info[i].indic_category() == OT_C) {
       buffer->info[i].indic_position() = consonant_position (buffer->info[i].codepoint);
@@ -181,7 +181,7 @@
 	buffer->info[i].indic_category() = OT_Ra;
     } else if (buffer->info[i].indic_category() == OT_SM ||
 	       buffer->info[i].indic_category() == OT_VD) {
-      buffer->info[i].indic_position() = POS_POST;
+      buffer->info[i].indic_position() = POS_SMVD;
     } else if (unlikely (buffer->info[i].codepoint == 0x200C))
       buffer->info[i].indic_category() = OT_ZWNJ;
     else if (unlikely (buffer->info[i].codepoint == 0x200D))
@@ -330,7 +330,7 @@
       start + 3 <= end &&
       !is_joiner (info[start + 2]))
    {
-    info[start].indic_position() = POS_POST + 1;
+    info[start].indic_position() = POS_REPH;
     info[start].mask = mask_array[RPHF];
    }
 
diff --git a/src/indic.cc b/src/indic.cc
index 6c6e05a..e00311d 100644
--- a/src/indic.cc
+++ b/src/indic.cc
@@ -40,7 +40,7 @@
     unsigned int position = type >> 4;
 
     hb_codepoint_t a, b;
-    if ((position & 8) && !hb_unicode_decompose (funcs, u, &a, &b))
+    if (!hb_unicode_decompose (funcs, u, &a, &b))
       printf ("U+%04X\n", u);
   }
 }