Add hb_buffer_reset() and hb_buffer_set_length()

This commit is contained in:
Behdad Esfahbod 2011-04-13 15:49:06 -04:00
parent 69ea23cb5d
commit c910bec863
2 changed files with 45 additions and 1 deletions

View File

@ -1,6 +1,7 @@
/*
* Copyright (C) 1998-2004 David Turner and Werner Lemberg
* Copyright (C) 2004,2007,2009,2010 Red Hat, Inc.
* Copyright (C) 2011 Google, Inc.
*
* This is part of HarfBuzz, a text shaping library.
*
@ -23,6 +24,7 @@
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*
* Red Hat Author(s): Owen Taylor, Behdad Esfahbod
* Google Author(s): Behdad Esfahbod
*/
#include "hb-buffer-private.hh"
@ -226,6 +228,17 @@ hb_buffer_get_language (hb_buffer_t *buffer)
}
void
hb_buffer_reset (hb_buffer_t *buffer)
{
hb_buffer_clear (buffer);
buffer->props = _hb_buffer_nil.props;
hb_unicode_funcs_destroy (buffer->unicode);
buffer->unicode = _hb_buffer_nil.unicode;
}
void
hb_buffer_clear (hb_buffer_t *buffer)
{
@ -434,6 +447,24 @@ _hb_buffer_set_masks (hb_buffer_t *buffer,
/* Public API again */
hb_bool_t
hb_buffer_set_length (hb_buffer_t *buffer,
unsigned int length)
{
if (!hb_buffer_ensure (buffer, length))
return FALSE;
/* Wipe the new space */
if (length > buffer->len) {
memset (buffer->info + buffer->len, 0, sizeof (buffer->info[0]) * (length - buffer->len));
if (buffer->have_positions)
memset (buffer->pos + buffer->len, 0, sizeof (buffer->pos[0]) * (length - buffer->len));
}
buffer->len = length;
return TRUE;
}
unsigned int
hb_buffer_get_length (hb_buffer_t *buffer)
{

View File

@ -1,6 +1,7 @@
/*
* Copyright (C) 1998-2004 David Turner and Werner Lemberg
* Copyright (C) 2004,2007,2009 Red Hat, Inc.
* Copyright (C) 2011 Google, Inc.
*
* This is part of HarfBuzz, a text shaping library.
*
@ -23,6 +24,7 @@
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*
* Red Hat Author(s): Owen Taylor, Behdad Esfahbod
* Google Author(s): Behdad Esfahbod
*/
#ifndef HB_BUFFER_H
@ -95,6 +97,12 @@ hb_language_t
hb_buffer_get_language (hb_buffer_t *buffer);
/* Resets the buffer. Afterwards it's as if it was just created,
* except that it has a larger buffer allocated perhaps... */
void
hb_buffer_reset (hb_buffer_t *buffer);
/* Clears buffer glyphs, but doesn't touch other buffer attributes. */
void
hb_buffer_clear (hb_buffer_t *buffer);
@ -142,12 +150,17 @@ hb_buffer_add_utf32 (hb_buffer_t *buffer,
unsigned int item_length);
/* Getting glyphs out of the buffer */
/* Clears any new items added at the end */
hb_bool_t
hb_buffer_set_length (hb_buffer_t *buffer,
unsigned int length);
/* Return value valid as long as buffer not modified */
unsigned int
hb_buffer_get_length (hb_buffer_t *buffer);
/* Getting glyphs out of the buffer */
/* Return value valid as long as buffer not modified */
hb_glyph_info_t *
hb_buffer_get_glyph_infos (hb_buffer_t *buffer);