use hb_buffer_set_unicode_funcs

This commit is contained in:
Vincent Wei
2020-07-23 16:55:01 +08:00
parent b3d6c70a45
commit 358c940763
4 changed files with 41 additions and 37 deletions
+3 -3
View File
@@ -1217,7 +1217,7 @@ BOOL font_InitFreetypeLibrary (void)
goto error_library;
}
#if 0 // def _MGCOMPLEX_SCRIPTS
#ifdef _MGCOMPLEX_SCRIPTS
__mg_init_harzbuff_funcs();
#endif
@@ -1229,7 +1229,7 @@ error_ftc_manager:
#endif /* _MGFONT_TTF_CACHE */
#if 0 // def _MGCOMPLEX_SCRIPTS
#ifdef _MGCOMPLEX_SCRIPTS
__mg_init_harzbuff_funcs();
#endif
@@ -1258,7 +1258,7 @@ void font_TermFreetypeLibrary (void)
FT_DESTROY_LOCK(&ft_lock);
#if 0 // def _MGCOMPLEX_SCRIPTS
#ifdef _MGCOMPLEX_SCRIPTS
__mg_term_harzbuff_funcs();
#endif
}
+1 -1
View File
@@ -163,7 +163,7 @@ extern void __mg_ttc_sys_deinit(void);
extern TTFCACHEINFO *__mg_ttc_search(HCACHE hCache, Glyph32 gv, int *size);
extern void __mg_ttc_refer(HCACHE hCache);
#if 0 // def _MGCOMPLEX_SCRIPTS
#ifdef _MGCOMPLEX_SCRIPTS
extern void __mg_init_harzbuff_funcs(void);
extern void __mg_term_harzbuff_funcs(void);
#endif
+26 -33
View File
@@ -120,55 +120,48 @@ hb_minigui_unicode_decompose (hb_unicode_funcs_t *ufuncs,
return UCharDecompose(ab, a, b);
}
static hb_unicode_funcs_t *_funcs;
hb_unicode_funcs_t *hb_ext_get_unicode_funcs(void)
{
if (_funcs)
return _funcs;
_funcs = hb_unicode_funcs_create (NULL);
hb_unicode_funcs_set_combining_class_func (_funcs,
hb_minigui_unicode_combining_class, NULL, NULL);
hb_unicode_funcs_set_general_category_func (_funcs,
hb_minigui_unicode_general_category, NULL, NULL);
hb_unicode_funcs_set_mirroring_func (_funcs,
hb_minigui_unicode_mirroring, NULL, NULL);
hb_unicode_funcs_set_script_func (_funcs,
hb_minigui_unicode_script, NULL, NULL);
hb_unicode_funcs_set_compose_func (_funcs,
hb_minigui_unicode_compose, NULL, NULL);
hb_unicode_funcs_set_decompose_func (_funcs,
hb_minigui_unicode_decompose, NULL, NULL);
hb_unicode_funcs_make_immutable (_funcs);
return _funcs;
}
#if 0
typedef hb_unicode_funcs_t *(*hb_get_unicode_funcs) (void);
extern hb_get_unicode_funcs __hb_extern_get_unicode_funcs;
/* extern hb_unicode_funcs_t *__mg_hb_unifuncs */
hb_unicode_funcs_t *__mg_hb_unifuncs;
void __mg_init_harzbuff_funcs(void)
{
_DBG_PRINTF("%s: called\n", __FUNCTION__);
__hb_extern_get_unicode_funcs = get_unicode_funcs;
if (__mg_hb_unifuncs)
return;
__mg_hb_unifuncs = hb_unicode_funcs_create (NULL);
hb_unicode_funcs_set_combining_class_func (__mg_hb_unifuncs,
hb_minigui_unicode_combining_class, NULL, NULL);
hb_unicode_funcs_set_general_category_func (__mg_hb_unifuncs,
hb_minigui_unicode_general_category, NULL, NULL);
hb_unicode_funcs_set_mirroring_func (__mg_hb_unifuncs,
hb_minigui_unicode_mirroring, NULL, NULL);
hb_unicode_funcs_set_script_func (__mg_hb_unifuncs,
hb_minigui_unicode_script, NULL, NULL);
hb_unicode_funcs_set_compose_func (__mg_hb_unifuncs,
hb_minigui_unicode_compose, NULL, NULL);
hb_unicode_funcs_set_decompose_func (__mg_hb_unifuncs,
hb_minigui_unicode_decompose, NULL, NULL);
hb_unicode_funcs_make_immutable (__mg_hb_unifuncs);
return;
}
void __mg_term_harzbuff_funcs(void)
{
_DBG_PRINTF("%s: called\n", __FUNCTION__);
if (_funcs) {
hb_unicode_funcs_destroy(_funcs);
if (__mg_hb_unifuncs) {
hb_unicode_funcs_destroy(__mg_hb_unifuncs);
}
else {
_ERR_PRINTF("%s: hb_unicode_funcs_t object is NULL\n",
__FUNCTION__);
}
}
#endif
#endif /* defined(_MGCHARSET_UNICODE) && defined(_MGCOMPLEX_SCRIPTS) */
+11
View File
@@ -75,6 +75,9 @@
#include <hb.h>
#include <hb-ft.h>
/* __mg_hb_unifuncs is implemented in src/font/harzbuff-minigui-funcs.c */
extern hb_unicode_funcs_t *__mg_hb_unifuncs;
// define _CACHED_HB_FONT if you want use the cached HB fonts
#define _CACHED_HB_FONT 1
@@ -216,6 +219,14 @@ static BOOL shape_layout_run(SEInstance* inst,
if (hb_buf == NULL)
goto error;
/* use our own unicode functions */
if (__mg_hb_unifuncs) {
hb_buffer_set_unicode_funcs(hb_buf, __mg_hb_unifuncs);
}
else {
_DBG_PRINTF("Unicode functions for HarfBuzz does not initialized\n");
}
hb_buffer_set_content_type(hb_buf, HB_BUFFER_CONTENT_TYPE_UNICODE);
for (i = 0; i < run->len; i++) {
hb_buffer_add(hb_buf, run->ucs[i], i);