From 82ecaff736e245e117d70b6ec1497508c6eb08d2 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Tue, 13 Nov 2012 13:57:52 -0800 Subject: [PATCH] Add hb_buffer_clear() Which is like _reset(), but does NOT clear unicode-funcs. --- src/hb-buffer-private.hh | 1 + src/hb-buffer.cc | 15 +++++++++++++++ src/hb-buffer.h | 4 ++++ test/api/test-buffer.c | 22 +++++++++++++++++++++- 4 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/hb-buffer-private.hh b/src/hb-buffer-private.hh index c1acffd30..4e92fb5ff 100644 --- a/src/hb-buffer-private.hh +++ b/src/hb-buffer-private.hh @@ -133,6 +133,7 @@ struct hb_buffer_t { /* Methods */ HB_INTERNAL void reset (void); + HB_INTERNAL void clear (void); inline unsigned int backtrack_len (void) const { return have_output? out_len : idx; } diff --git a/src/hb-buffer.cc b/src/hb-buffer.cc index 06b5c05ee..6aff7b9b4 100644 --- a/src/hb-buffer.cc +++ b/src/hb-buffer.cc @@ -142,6 +142,15 @@ hb_buffer_t::reset (void) hb_unicode_funcs_destroy (unicode); unicode = hb_unicode_funcs_get_default (); + clear (); +} + +void +hb_buffer_t::clear (void) +{ + if (unlikely (hb_object_is_inert (this))) + return; + hb_segment_properties_t default_props = _HB_BUFFER_PROPS_DEFAULT; props = default_props; @@ -722,6 +731,12 @@ hb_buffer_reset (hb_buffer_t *buffer) buffer->reset (); } +void +hb_buffer_clear (hb_buffer_t *buffer) +{ + buffer->clear (); +} + hb_bool_t hb_buffer_pre_allocate (hb_buffer_t *buffer, unsigned int size) { diff --git a/src/hb-buffer.h b/src/hb-buffer.h index dc63d1bf6..fbd809cf5 100644 --- a/src/hb-buffer.h +++ b/src/hb-buffer.h @@ -135,6 +135,10 @@ hb_buffer_get_language (hb_buffer_t *buffer); void hb_buffer_reset (hb_buffer_t *buffer); +/* Like reset, but does NOT clear unicode_funcs. */ +void +hb_buffer_clear (hb_buffer_t *buffer); + /* Returns false if allocation failed */ hb_bool_t hb_buffer_pre_allocate (hb_buffer_t *buffer, diff --git a/test/api/test-buffer.c b/test/api/test-buffer.c index 1ddc3d84f..7cc99bdda 100644 --- a/test/api/test-buffer.c +++ b/test/api/test-buffer.c @@ -128,7 +128,27 @@ test_buffer_properties (fixture_t *fixture, gconstpointer user_data) g_assert (hb_buffer_get_language (b) == hb_language_from_string ("Fa", -1)); - /* test reset clears properties */ + + /* test clear clears all properties but unicode_funcs */ + + hb_buffer_clear (b); + + g_assert (hb_buffer_get_unicode_funcs (b) == ufuncs); + g_assert (hb_buffer_get_direction (b) == HB_DIRECTION_INVALID); + g_assert (hb_buffer_get_script (b) == HB_SCRIPT_INVALID); + g_assert (hb_buffer_get_language (b) == NULL); + + + /* test reset clears all properties */ + + hb_buffer_set_direction (b, HB_DIRECTION_RTL); + g_assert (hb_buffer_get_direction (b) == HB_DIRECTION_RTL); + + hb_buffer_set_script (b, HB_SCRIPT_ARABIC); + g_assert (hb_buffer_get_script (b) == HB_SCRIPT_ARABIC); + + hb_buffer_set_language (b, hb_language_from_string ("fa", -1)); + g_assert (hb_buffer_get_language (b) == hb_language_from_string ("Fa", -1)); hb_buffer_reset (b);