From 04cc0a29ee1472c318c36efcd19b9c1a6657d9ea Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Mon, 10 Aug 2009 22:58:56 -0400 Subject: [PATCH] [HB] Flesh out Unicode funcs --- src/hb-object-private.h | 2 +- src/hb-unicode-private.h | 12 +++---- src/hb-unicode.c | 67 +++++++++++++++++++++++++++++++++++----- src/hb-unicode.h | 3 -- 4 files changed, 65 insertions(+), 19 deletions(-) diff --git a/src/hb-object-private.h b/src/hb-object-private.h index 4f4c3de8b..2186e58e5 100644 --- a/src/hb-object-private.h +++ b/src/hb-object-private.h @@ -56,7 +56,7 @@ typedef struct { /* Helper macros */ #define HB_OBJECT_IS_INERT(obj) \ - (HB_REFERENCE_COUNT_IS_INVALID ((obj)->ref_count)) + (HB_UNLIKELY (HB_REFERENCE_COUNT_IS_INVALID ((obj)->ref_count))) #define HB_OBJECT_DO_INIT_EXPR(obj) \ HB_REFERENCE_COUNT_INIT (obj->ref_count, 1) diff --git a/src/hb-unicode-private.h b/src/hb-unicode-private.h index de710839d..3dd528ce5 100644 --- a/src/hb-unicode-private.h +++ b/src/hb-unicode-private.h @@ -40,13 +40,11 @@ HB_BEGIN_DECLS struct _hb_unicode_funcs_t { hb_reference_count_t ref_count; - /* - hb_unicode_get_general_category_func_t general_category_func); - hb_unicode_get_combining_class_func_t combining_class_func); - hb_unicode_get_mirroring_char_func_t mirroring_char_func); - hb_unicode_get_script_func_t script_func); - hb_unicode_get_eastasian_width_func_t eastasian_width_func); - */ + hb_unicode_get_general_category_func_t get_general_category; + hb_unicode_get_combining_class_func_t get_combining_class; + hb_unicode_get_mirroring_char_func_t get_mirroring_char; + hb_unicode_get_script_func_t get_script; + hb_unicode_get_eastasian_width_func_t get_eastasian_width; }; HB_END_DECLS diff --git a/src/hb-unicode.c b/src/hb-unicode.c index ecb41486b..46b90b85a 100644 --- a/src/hb-unicode.c +++ b/src/hb-unicode.c @@ -33,14 +33,13 @@ */ static hb_unicode_funcs_t _hb_unicode_funcs_nil = { - HB_REFERENCE_COUNT_INVALID /* ref_count */ - /* - hb_unicode_get_general_category_func_t general_category_func); - hb_unicode_get_combining_class_func_t combining_class_func); - hb_unicode_get_mirroring_char_func_t mirroring_char_func); - hb_unicode_get_script_func_t script_func); - hb_unicode_get_eastasian_width_func_t eastasian_width_func); - */ + HB_REFERENCE_COUNT_INVALID, /* ref_count */ + + NULL, /*get_general_category */ + NULL, /*get_combining_class */ + NULL, /*get_mirroring_char */ + NULL, /*get_script */ + NULL /*get_eastasian_width */ }; hb_unicode_funcs_t * @@ -87,3 +86,55 @@ hb_unicode_funcs_copy (hb_unicode_funcs_t *other_ufuncs) return ufuncs; } + + +void +hb_unicode_funcs_set_mirroring_char_func (hb_unicode_funcs_t *ufuncs, + hb_unicode_get_mirroring_char_func_t mirroring_char_func) +{ + if (HB_OBJECT_IS_INERT (ufuncs)) + return; + + ufuncs->get_mirroring_char = mirroring_char_func; +} + +void +hb_unicode_funcs_set_general_category_func (hb_unicode_funcs_t *ufuncs, + hb_unicode_get_general_category_func_t general_category_func) +{ + if (HB_OBJECT_IS_INERT (ufuncs)) + return; + + ufuncs->get_general_category = general_category_func; +} + +void +hb_unicode_funcs_set_script_func (hb_unicode_funcs_t *ufuncs, + hb_unicode_get_script_func_t script_func) +{ + if (HB_OBJECT_IS_INERT (ufuncs)) + return; + + ufuncs->get_script = script_func; +} + +void +hb_unicode_funcs_set_combining_class_func (hb_unicode_funcs_t *ufuncs, + hb_unicode_get_combining_class_func_t combining_class_func) +{ + if (HB_OBJECT_IS_INERT (ufuncs)) + return; + + ufuncs->get_combining_class = combining_class_func; +} + +void +hb_unicode_funcs_set_eastasian_width_func (hb_unicode_funcs_t *ufuncs, + hb_unicode_get_eastasian_width_func_t eastasian_width_func) +{ + if (HB_OBJECT_IS_INERT (ufuncs)) + return; + + ufuncs->get_eastasian_width = eastasian_width_func; +} + diff --git a/src/hb-unicode.h b/src/hb-unicode.h index 51b00dbf5..5d8431c40 100644 --- a/src/hb-unicode.h +++ b/src/hb-unicode.h @@ -184,7 +184,6 @@ hb_unicode_funcs_copy (hb_unicode_funcs_t *ufuncs); /* funcs */ -#if 0 typedef hb_codepoint_t (*hb_unicode_get_mirroring_char_func_t) (hb_codepoint_t unicode); typedef hb_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); @@ -212,8 +211,6 @@ void hb_unicode_funcs_set_eastasian_width_func (hb_unicode_funcs_t *ufuncs, hb_unicode_get_eastasian_width_func_t eastasian_width_func); -#endif - HB_END_DECLS