[HB] Flesh out Unicode funcs
authorBehdad Esfahbod <behdad@behdad.org>
Tue, 11 Aug 2009 02:58:56 +0000 (22:58 -0400)
committerBehdad Esfahbod <behdad@behdad.org>
Mon, 2 Nov 2009 19:40:38 +0000 (14:40 -0500)
src/hb-object-private.h
src/hb-unicode-private.h
src/hb-unicode.c
src/hb-unicode.h

index 4f4c3de..2186e58 100644 (file)
@@ -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)
index de71083..3dd528c 100644 (file)
@@ -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
index ecb4148..46b90b8 100644 (file)
  */
 
 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;
+}
+
index 51b00db..5d8431c 100644 (file)
@@ -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