[API] Add hb_ot_layout_substitute_start/finish()
diff --git a/src/hb-ot-layout.cc b/src/hb-ot-layout.cc
index 8398bba..0d34e11 100644
--- a/src/hb-ot-layout.cc
+++ b/src/hb-ot-layout.cc
@@ -440,6 +440,14 @@
   return &_get_gsub (face) != &Null(GSUB);
 }
 
+void
+hb_ot_layout_substitute_start (hb_buffer_t  *buffer)
+{
+  unsigned int count = buffer->len;
+  for (unsigned int i = 0; i < count; i++)
+    buffer->info[i].var1.u32 = buffer->info[i].var2.u32 = 0;
+}
+
 hb_bool_t
 hb_ot_layout_substitute_lookup (hb_face_t    *face,
 				hb_buffer_t  *buffer,
@@ -449,6 +457,11 @@
   return _get_gsub (face).substitute_lookup (face, buffer, lookup_index, mask);
 }
 
+void
+hb_ot_layout_substitute_finish (hb_buffer_t  *buffer)
+{
+}
+
 
 /*
  * GPOS
diff --git a/src/hb-ot-layout.h b/src/hb-ot-layout.h
index a6dbc61..5257244 100644
--- a/src/hb-ot-layout.h
+++ b/src/hb-ot-layout.h
@@ -165,12 +165,20 @@
 hb_bool_t
 hb_ot_layout_has_substitution (hb_face_t *face);
 
+/* Should be called before all the substitute_lookup's are done. */
+void
+hb_ot_layout_substitute_start (hb_buffer_t  *buffer);
+
 hb_bool_t
 hb_ot_layout_substitute_lookup (hb_face_t    *face,
 				hb_buffer_t  *buffer,
 				unsigned int  lookup_index,
 				hb_mask_t     mask);
 
+/* Should be called after all the substitute_lookup's are done */
+void
+hb_ot_layout_substitute_finish (hb_buffer_t  *buffer);
+
 /*
  * GPOS
  */