- hb_glyph_info_t *glyph;
-
- if (unlikely (!_hb_buffer_ensure (buffer, buffer->len + 1))) return;
-
- glyph = &buffer->info[buffer->len];
-
- memset (glyph, 0, sizeof (*glyph));
- glyph->codepoint = codepoint;
- glyph->mask = mask;
- glyph->cluster = cluster;
-
- buffer->len++;
-}
-
-/* HarfBuzz-Internal API */
-
-void
-_hb_buffer_clear_output (hb_buffer_t *buffer)
-{
- if (unlikely (hb_object_is_inert (buffer)))
- return;
-
- buffer->have_output = TRUE;
- buffer->have_positions = FALSE;
-
- buffer->out_len = 0;
- buffer->out_info = buffer->info;
-}
-
-void
-_hb_buffer_clear_positions (hb_buffer_t *buffer)
-{
- if (unlikely (hb_object_is_inert (buffer)))
- return;
-
- buffer->have_output = FALSE;
- buffer->have_positions = TRUE;
-
- memset (buffer->pos, 0, sizeof (buffer->pos[0]) * buffer->len);
-}
-
-void
-_hb_buffer_swap (hb_buffer_t *buffer)
-{
- if (unlikely (buffer->in_error)) return;
-
- assert (buffer->have_output);
-
- if (buffer->out_info != buffer->info)
- {
- hb_glyph_info_t *tmp_string;
- tmp_string = buffer->info;
- buffer->info = buffer->out_info;
- buffer->out_info = tmp_string;
- buffer->pos = (hb_glyph_position_t *) buffer->out_info;
- }
-
- unsigned int tmp;
- tmp = buffer->len;
- buffer->len = buffer->out_len;
- buffer->out_len = tmp;
-
- buffer->i = 0;
-}
-
-void
-_hb_buffer_replace_glyphs_be16 (hb_buffer_t *buffer,
- unsigned int num_in,
- unsigned int num_out,
- const uint16_t *glyph_data_be)
-{
- if (buffer->out_info != buffer->info ||
- buffer->out_len + num_out > buffer->i + num_in)
- {
- if (unlikely (!_hb_buffer_ensure_separate (buffer, buffer->out_len + num_out)))
- return;
- }
-
- hb_glyph_info_t orig_info = buffer->info[buffer->i];
- for (unsigned int i = 1; i < num_in; i++)
- {
- hb_glyph_info_t *info = &buffer->info[buffer->i + i];
- orig_info.cluster = MIN (orig_info.cluster, info->cluster);
- }
-
- for (unsigned int i = 0; i < num_out; i++)
- {
- hb_glyph_info_t *info = &buffer->out_info[buffer->out_len + i];
- *info = orig_info;
- info->codepoint = hb_be_uint16 (glyph_data_be[i]);
- }
-
- buffer->i += num_in;
- buffer->out_len += num_out;
-}
-
-void
-_hb_buffer_output_glyph (hb_buffer_t *buffer,
- hb_codepoint_t glyph_index)
-{
- hb_glyph_info_t *info;
-
- if (buffer->out_info != buffer->info)
- {
- if (unlikely (!_hb_buffer_ensure (buffer, buffer->out_len + 1))) return;
- buffer->out_info[buffer->out_len] = buffer->info[buffer->i];
- }
- else if (buffer->out_len != buffer->i)
- buffer->out_info[buffer->out_len] = buffer->info[buffer->i];
-
- info = &buffer->out_info[buffer->out_len];
- info->codepoint = glyph_index;
-
- 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);