@ -40,45 +40,67 @@ HB_BEGIN_DECLS
*/
static unsigned int
hb_unicode_get_ combining_class_nil ( hb_unicode_funcs_t * ufuncs HB_UNUSED ,
hb_codepoint_t unicode HB_UNUSED ,
void * user_data HB_UNUSED )
hb_unicode_combining_class_nil ( hb_unicode_funcs_t * ufuncs HB_UNUSED ,
hb_codepoint_t unicode HB_UNUSED ,
void * user_data HB_UNUSED )
{
return 0 ;
}
static unsigned int
hb_unicode_get_ eastasian_width_nil ( hb_unicode_funcs_t * ufuncs HB_UNUSED ,
hb_codepoint_t unicode HB_UNUSED ,
void * user_data HB_UNUSED )
hb_unicode_eastasian_width_nil ( hb_unicode_funcs_t * ufuncs HB_UNUSED ,
hb_codepoint_t unicode HB_UNUSED ,
void * user_data HB_UNUSED )
{
return 1 ;
}
static hb_unicode_general_category_t
hb_unicode_get_ge neral_category_nil ( hb_unicode_funcs_t * ufuncs HB_UNUSED ,
hb_codepoint_t unicode HB_UNUSED ,
void * user_data HB_UNUSED )
hb_unicode_general_category_nil ( hb_unicode_funcs_t * ufuncs HB_UNUSED ,
hb_codepoint_t unicode HB_UNUSED ,
void * user_data HB_UNUSED )
{
return HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER ;
}
static hb_codepoint_t
hb_unicode_get_ mirroring_nil ( hb_unicode_funcs_t * ufuncs HB_UNUSED ,
hb_codepoint_t unicode HB_UNUSED ,
void * user_data HB_UNUSED )
hb_unicode_mirroring_nil ( hb_unicode_funcs_t * ufuncs HB_UNUSED ,
hb_codepoint_t unicode HB_UNUSED ,
void * user_data HB_UNUSED )
{
return unicode ;
}
static hb_script_t
hb_unicode_get_ script_nil ( hb_unicode_funcs_t * ufuncs HB_UNUSED ,
hb_codepoint_t unicode HB_UNUSED ,
void * user_data HB_UNUSED )
hb_unicode_script_nil ( hb_unicode_funcs_t * ufuncs HB_UNUSED ,
hb_codepoint_t unicode HB_UNUSED ,
void * user_data HB_UNUSED )
{
return HB_SCRIPT_UNKNOWN ;
}
static hb_bool_t
hb_unicode_compose_nil ( hb_unicode_funcs_t * ufuncs ,
hb_codepoint_t a HB_UNUSED ,
hb_codepoint_t b HB_UNUSED ,
hb_codepoint_t * ab HB_UNUSED ,
void * user_data HB_UNUSED )
{
/* TODO handle Hangul jamo here? */
return FALSE ;
}
static hb_bool_t
hb_unicode_decompose_nil ( hb_unicode_funcs_t * ufuncs ,
hb_codepoint_t ab HB_UNUSED ,
hb_codepoint_t * a HB_UNUSED ,
hb_codepoint_t * b HB_UNUSED ,
void * user_data HB_UNUSED )
{
/* TODO handle Hangul jamo here? */
return FALSE ;
}
hb_unicode_funcs_t _hb_unicode_funcs_nil = {
HB_OBJECT_HEADER_STATIC ,
@ -86,7 +108,7 @@ hb_unicode_funcs_t _hb_unicode_funcs_nil = {
NULL , /* parent */
TRUE , /* immutable */
{
# define HB_UNICODE_FUNC_IMPLEMENT(name) hb_unicode_get_ ##name##_nil,
# define HB_UNICODE_FUNC_IMPLEMENT(name) hb_unicode_##name##_nil,
HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS
# undef HB_UNICODE_FUNC_IMPLEMENT
}
@ -113,7 +135,7 @@ hb_unicode_funcs_create (hb_unicode_funcs_t *parent)
hb_unicode_funcs_make_immutable ( parent ) ;
ufuncs - > parent = hb_unicode_funcs_reference ( parent ) ;
ufuncs - > get = parent - > get ;
ufuncs - > func = parent - > func ;
/* We can safely copy user_data from parent since we hold a reference
* onto it and it ' s immutable . We should not copy the destroy notifiers
@ -193,7 +215,7 @@ hb_unicode_funcs_get_parent (hb_unicode_funcs_t *ufuncs)
\
void \
hb_unicode_funcs_set_ # # name # # _func ( hb_unicode_funcs_t * ufuncs , \
hb_unicode_get_ # # name # # _func_t func , \
hb_unicode_ # # name # # _func_t func , \
void * user_data , \
hb_destroy_func_t destroy ) \
{ \
@ -204,11 +226,11 @@ hb_unicode_funcs_set_##name##_func (hb_unicode_funcs_t *ufuncs, \
ufuncs - > destroy . name ( ufuncs - > user_data . name ) ; \
\
if ( func ) { \
ufuncs - > get . name = func ; \
ufuncs - > func . name = func ; \
ufuncs - > user_data . name = user_data ; \
ufuncs - > destroy . name = destroy ; \
} else { \
ufuncs - > get . name = ufuncs - > parent - > get . name ; \
ufuncs - > func . name = ufuncs - > parent - > func . name ; \
ufuncs - > user_data . name = ufuncs - > parent - > user_data . name ; \
ufuncs - > destroy . name = NULL ; \
} \
@ -221,13 +243,30 @@ hb_unicode_funcs_set_##name##_func (hb_unicode_funcs_t *ufuncs, \
# define HB_UNICODE_FUNC_IMPLEMENT(return_type, name) \
\
return_type \
hb_unicode_get_ # # name ( hb_unicode_funcs_t * ufuncs , \
hb_codepoint_t unicode ) \
hb_unicode_ # # name ( hb_unicode_funcs_t * ufuncs , \
hb_codepoint_t unicode ) \
{ \
return ufuncs - > get . name ( ufuncs , unicode , ufuncs - > user_data . name ) ; \
return ufuncs - > func . name ( ufuncs , unicode , ufuncs - > user_data . name ) ; \
}
HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
# undef HB_UNICODE_FUNC_IMPLEMENT
hb_bool_t
hb_unicode_compose ( hb_unicode_funcs_t * ufuncs ,
hb_codepoint_t a ,
hb_codepoint_t b ,
hb_codepoint_t * ab )
{
return ufuncs - > func . compose ( ufuncs , a , b , ab , ufuncs - > user_data . compose ) ;
}
hb_bool_t
hb_unicode_decompose ( hb_unicode_funcs_t * ufuncs ,
hb_codepoint_t ab ,
hb_codepoint_t * a ,
hb_codepoint_t * b )
{
return ufuncs - > func . decompose ( ufuncs , ab , a , b , ufuncs - > user_data . decompose ) ;
}
HB_END_DECLS