Add _hb_buffer_output_glyph() and _hb_buffer_skip_glyph()
authorBehdad Esfahbod <behdad@behdad.org>
Thu, 21 Jul 2011 04:58:29 +0000 (00:58 -0400)
committerBehdad Esfahbod <behdad@behdad.org>
Thu, 21 Jul 2011 04:59:15 +0000 (00:59 -0400)
src/hb-buffer-private.hh
src/hb-buffer.cc
src/hb-ot-shape.cc

index 4fae884..73535d4 100644 (file)
@@ -66,6 +66,13 @@ _hb_buffer_replace_glyph (hb_buffer_t *buffer,
                          hb_codepoint_t glyph_index);
 
 HB_INTERNAL void
+_hb_buffer_output_glyph (hb_buffer_t *buffer,
+                        hb_codepoint_t glyph_index);
+
+HB_INTERNAL void
+_hb_buffer_skip_glyph (hb_buffer_t *buffer);
+
+HB_INTERNAL void
 _hb_buffer_next_glyph (hb_buffer_t *buffer);
 
 
@@ -125,6 +132,9 @@ struct _hb_buffer_t {
   { _hb_buffer_replace_glyphs_be16 (this, num_in, num_out, glyph_data_be); }
   inline void replace_glyph (hb_codepoint_t glyph_index)
   { _hb_buffer_replace_glyph (this, glyph_index); }
+  inline void output_glyph (hb_codepoint_t glyph_index)
+  { _hb_buffer_output_glyph (this, glyph_index); }
+  inline void skip_glyph (void) { _hb_buffer_skip_glyph (this); }
 
   inline void reset_masks (hb_mask_t mask)
   {
index b65ddbb..174d8e8 100644 (file)
@@ -404,8 +404,8 @@ _hb_buffer_replace_glyphs_be16 (hb_buffer_t *buffer,
 }
 
 void
-_hb_buffer_replace_glyph (hb_buffer_t *buffer,
-                         hb_codepoint_t glyph_index)
+_hb_buffer_output_glyph (hb_buffer_t *buffer,
+                        hb_codepoint_t glyph_index)
 {
   hb_glyph_info_t *info;
 
@@ -420,11 +420,24 @@ _hb_buffer_replace_glyph (hb_buffer_t *buffer,
   info = &buffer->out_info[buffer->out_len];
   info->codepoint = glyph_index;
 
-  buffer->i++;
   buffer->out_len++;
 }
 
 void
+_hb_buffer_replace_glyph (hb_buffer_t *buffer,
+                         hb_codepoint_t glyph_index)
+{
+  _hb_buffer_output_glyph (buffer, glyph_index);
+  _hb_buffer_skip_glyph (buffer);
+}
+
+void
+_hb_buffer_skip_glyph (hb_buffer_t *buffer)
+{
+  buffer->i++;
+}
+
+void
 _hb_buffer_next_glyph (hb_buffer_t *buffer)
 {
   if (buffer->have_output)
index 306beb3..33123d4 100644 (file)
@@ -264,7 +264,7 @@ hb_map_glyphs (hb_font_t    *font,
     if (unlikely (is_variation_selector (buffer->info[buffer->i + 1].codepoint))) {
       hb_font_get_glyph (font, buffer->info[buffer->i].codepoint, buffer->info[buffer->i + 1].codepoint, &glyph);
       buffer->replace_glyph (glyph);
-      buffer->i++;
+      buffer->skip_glyph ();
     } else {
       hb_font_get_glyph (font, buffer->info[buffer->i].codepoint, 0, &glyph);
       buffer->replace_glyph (glyph);