[API] unicode: rework virtual functions for subclassing Unicode data providers can now be subclassed, including support for chain-up. The interface should now be nicely bindable, as well. Also fix glib unicode funcs that where broken after hb_script_t changes. Nicely caught by the test-unicode.c added in this commit.
diff --git a/src/hb-unicode.h b/src/hb-unicode.h index fb8fe97..792ad54 100644 --- a/src/hb-unicode.h +++ b/src/hb-unicode.h
@@ -1,5 +1,6 @@ /* * Copyright (C) 2009 Red Hat, Inc. + * Copyright © 2011 Codethink Limited * * This is part of HarfBuzz, a text shaping library. * @@ -22,6 +23,7 @@ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. * * Red Hat Author(s): Behdad Esfahbod + * Codethink Author(s): Ryan Lortie */ #ifndef HB_UNICODE_H @@ -39,7 +41,7 @@ typedef struct _hb_unicode_funcs_t hb_unicode_funcs_t; hb_unicode_funcs_t * -hb_unicode_funcs_create (void); +hb_unicode_funcs_create (hb_unicode_funcs_t *parent_funcs); hb_unicode_funcs_t * hb_unicode_funcs_reference (hb_unicode_funcs_t *ufuncs); @@ -51,7 +53,7 @@ hb_unicode_funcs_destroy (hb_unicode_funcs_t *ufuncs); hb_unicode_funcs_t * -hb_unicode_funcs_copy (hb_unicode_funcs_t *ufuncs); +hb_unicode_funcs_get_parent (hb_unicode_funcs_t *ufuncs); void hb_unicode_funcs_make_immutable (hb_unicode_funcs_t *ufuncs); @@ -63,57 +65,55 @@ * funcs */ - /* typedefs */ -typedef hb_codepoint_t (*hb_unicode_get_mirroring_func_t) (hb_codepoint_t unicode); -typedef hb_unicode_general_category_t (*hb_unicode_get_general_category_func_t) (hb_codepoint_t unicode); -typedef hb_script_t (*hb_unicode_get_script_func_t) (hb_codepoint_t unicode); -typedef unsigned int (*hb_unicode_get_combining_class_func_t) (hb_codepoint_t unicode); -typedef unsigned int (*hb_unicode_get_eastasian_width_func_t) (hb_codepoint_t unicode); - +typedef hb_codepoint_t (*hb_unicode_get_mirroring_func_t) (hb_unicode_funcs_t *ufuncs, + hb_codepoint_t unicode, + void *user_data); +typedef hb_unicode_general_category_t (*hb_unicode_get_general_category_func_t) (hb_unicode_funcs_t *ufuncs, + hb_codepoint_t unicode, + void *user_data); +typedef hb_script_t (*hb_unicode_get_script_func_t) (hb_unicode_funcs_t *ufuncs, + hb_codepoint_t unicode, + void *user_data); +typedef unsigned int (*hb_unicode_get_combining_class_func_t) (hb_unicode_funcs_t *ufuncs, + hb_codepoint_t unicode, + void *user_data); +typedef unsigned int (*hb_unicode_get_eastasian_width_func_t) (hb_unicode_funcs_t *ufuncs, + hb_codepoint_t unicode, + void *user_data); /* setters */ void hb_unicode_funcs_set_mirroring_func (hb_unicode_funcs_t *ufuncs, - hb_unicode_get_mirroring_func_t mirroring_func); + hb_unicode_get_mirroring_func_t mirroring_func, + void *user_data, + hb_destroy_func_t destroy); void hb_unicode_funcs_set_general_category_func (hb_unicode_funcs_t *ufuncs, - hb_unicode_get_general_category_func_t general_category_func); + hb_unicode_get_general_category_func_t general_category_func, + void *user_data, + hb_destroy_func_t destroy); void hb_unicode_funcs_set_script_func (hb_unicode_funcs_t *ufuncs, - hb_unicode_get_script_func_t script_func); + hb_unicode_get_script_func_t script_func, + void *user_data, + hb_destroy_func_t destroy); void hb_unicode_funcs_set_combining_class_func (hb_unicode_funcs_t *ufuncs, - hb_unicode_get_combining_class_func_t combining_class_func); + hb_unicode_get_combining_class_func_t combining_class_func, + void *user_data, + hb_destroy_func_t destroy); void hb_unicode_funcs_set_eastasian_width_func (hb_unicode_funcs_t *ufuncs, - hb_unicode_get_eastasian_width_func_t eastasian_width_func); - - -/* getters */ - -/* These never return NULL. Return fallback defaults instead. */ - -hb_unicode_get_mirroring_func_t -hb_unicode_funcs_get_mirroring_func (hb_unicode_funcs_t *ufuncs); - -hb_unicode_get_general_category_func_t -hb_unicode_funcs_get_general_category_func (hb_unicode_funcs_t *ufuncs); - -hb_unicode_get_script_func_t -hb_unicode_funcs_get_script_func (hb_unicode_funcs_t *ufuncs); - -hb_unicode_get_combining_class_func_t -hb_unicode_funcs_get_combining_class_func (hb_unicode_funcs_t *ufuncs); - -hb_unicode_get_eastasian_width_func_t -hb_unicode_funcs_get_eastasian_width_func (hb_unicode_funcs_t *ufuncs); + hb_unicode_get_eastasian_width_func_t eastasian_width_func, + void *user_data, + hb_destroy_func_t destroy); /* accessors */