[morx] Remove deleted-glyph at the end of processing
authorBehdad Esfahbod <behdad@behdad.org>
Fri, 26 Oct 2018 00:36:33 +0000 (17:36 -0700)
committerBehdad Esfahbod <behdad@behdad.org>
Fri, 26 Oct 2018 00:39:54 +0000 (17:39 -0700)
src/hb-aat-layout-morx-table.hh

index c663fcc..a3077e5 100644 (file)
@@ -998,6 +998,22 @@ struct morx
     }
   }
 
+  inline static void remove_deleted_glyphs (hb_buffer_t *buffer)
+  {
+    if (unlikely (!buffer->successful)) return;
+
+    buffer->clear_output ();
+    for (buffer->idx = 0; buffer->idx < buffer->len && buffer->successful;)
+    {
+      if (unlikely (buffer->cur().codepoint == DELETED_GLYPH))
+        buffer->skip_glyph ();
+      else
+        buffer->next_glyph ();
+    }
+    if (likely (buffer->successful))
+      buffer->swap_buffers ();
+  }
+
   inline void apply (hb_aat_apply_context_t *c) const
   {
     if (unlikely (!c->buffer->successful)) return;
@@ -1010,6 +1026,7 @@ struct morx
       if (unlikely (!c->buffer->successful)) return;
       chain = &StructAfter<Chain> (*chain);
     }
+    remove_deleted_glyphs (c->buffer);
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const