Switch Pango to new, defunt, GPOS
diff --git a/src/hb-ot-layout-gpos-private.h b/src/hb-ot-layout-gpos-private.h
index b0b9513..056131b 100644
--- a/src/hb-ot-layout-gpos-private.h
+++ b/src/hb-ot-layout-gpos-private.h
@@ -843,16 +843,24 @@
     if (HB_UNLIKELY (!buffer->in_length))
       return false;
 
-    _hb_buffer_clear_positions (buffer);
+    layout->gpos_info.last = 0xFFFF; /* no last valid glyph for cursive pos. */
+
     buffer->in_pos = 0;
     while (buffer->in_pos < buffer->in_length) {
 
-      if ((~IN_PROPERTIES (buffer->in_pos) & mask) &&
-	  position_once (layout, buffer))
-	ret = true;
-      else
-	_hb_buffer_next_glyph (buffer);
+      bool done;
+      if (~IN_PROPERTIES (buffer->in_pos) & mask) {
+	  done = position_once (layout, buffer);
+	  ret |= done;
+      } else {
+          done = false;
+	  /* Contrary to properties defined in GDEF, user-defined properties
+	     will always stop a possible cursive positioning.                */
+	  layout->gpos_info.last = 0xFFFF;
+      }
 
+      if (!done)
+	buffer->in_pos++;
     }
 
     return ret;
diff --git a/src/hb-ot-layout.cc b/src/hb-ot-layout.cc
index 46f4555..4bb2eb5 100644
--- a/src/hb-ot-layout.cc
+++ b/src/hb-ot-layout.cc
@@ -531,6 +531,19 @@
   return layout->gsub->substitute_lookup (layout, buffer, lookup_index, mask);
 }
 
+/*
+ * GPOS
+ */
+
+hb_bool_t
+hb_ot_layout_position_lookup   (hb_ot_layout_t              *layout,
+				hb_buffer_t                 *buffer,
+			        unsigned int                 lookup_index,
+				hb_ot_layout_feature_mask_t  mask)
+{
+  return layout->gpos->position_lookup (layout, buffer, lookup_index, mask);
+}
+
 
 
 /* TODO dupped, until he old code can be removed */
diff --git a/src/hb-ot-layout.h b/src/hb-ot-layout.h
index f6c0c44..f907b65 100644
--- a/src/hb-ot-layout.h
+++ b/src/hb-ot-layout.h
@@ -207,6 +207,11 @@
 			        unsigned int                 lookup_index,
 				hb_ot_layout_feature_mask_t  mask);
 
+hb_bool_t
+hb_ot_layout_position_lookup   (hb_ot_layout_t              *layout,
+				hb_buffer_t                 *buffer,
+			        unsigned int                 lookup_index,
+				hb_ot_layout_feature_mask_t  mask);