From 9b359e9b7c20a134363f2383902519d73d130e68 Mon Sep 17 00:00:00 2001 From: Tor Lillqvist Date: Tue, 3 Oct 2000 19:04:34 +0000 Subject: pango/pango.def Add new entry points. 2000-10-03 Tor Lillqvist * pango/pango.def * pango/pangoft2.def: Add new entry points. * pango/pango-coverage.c (pango_coverage_set): Remove unnecessary loop calling memset() with same parameters 64 times ;-) * pango/makefile.mingw.in (PANGO_OBJS): Add pango-tabs.o. Some small changes that have been laying around on my disk. The Win32 and FT2 backends aren't "production quality" yet. For speedup, need to cache at least the coverage info. * pango/pangoft2.c (pango_ft2_get_coverage): New function. * modules/basic/basic-win32.c: Use "BasicScriptEngineLangWin32" to be unique. * modules/basic/basic-ft2.c: Add comments explaining what Unicode ranges the table entries covers. Use "BasicScriptEngineLangFT2" to be unique. (basic_engine_get_coverage): Test calling pango_ft2_get_coverage(). (basic_engine_ft2_new): Set corect engine type. Not that this apparently is used for anything, the X11 basic shaper module also sets its type as TYPE_LANG. * examples/viewer-ft2.c (split_paragraphs): Just end the string upon encountering an invalid character. Don't return. --- ChangeLog | 31 ++++++++++++++++++ ChangeLog.pre-1-0 | 31 ++++++++++++++++++ ChangeLog.pre-1-10 | 31 ++++++++++++++++++ ChangeLog.pre-1-2 | 31 ++++++++++++++++++ ChangeLog.pre-1-4 | 31 ++++++++++++++++++ ChangeLog.pre-1-6 | 31 ++++++++++++++++++ ChangeLog.pre-1-8 | 31 ++++++++++++++++++ examples/viewer-ft2.c | 3 +- modules/basic/basic-ft2.c | 79 ++++++++++++++++++++++++++++++++++++++------- modules/basic/basic-win32.c | 4 +-- pango/makefile.mingw.in | 1 + pango/pango-coverage.c | 3 +- pango/pango.def | 12 +++++++ pango/pangoft2-fontcache.c | 2 +- pango/pangoft2.c | 44 +++++++++++++++++++++++++ pango/pangoft2.def | 1 + 16 files changed, 348 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7e4577a4..9b046645 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,34 @@ +2000-10-03 Tor Lillqvist + + * pango/pango.def + * pango/pangoft2.def: Add new entry points. + + * pango/pango-coverage.c (pango_coverage_set): Remove unnecessary + loop calling memset() with same parameters 64 times ;-) + + * pango/makefile.mingw.in (PANGO_OBJS): Add pango-tabs.o. + + Some small changes that have been laying around on my disk. The + Win32 and FT2 backends aren't "production quality" yet. For + speedup, need to cache at least the coverage info. + + * pango/pangoft2.c (pango_ft2_get_coverage): New function. + + * modules/basic/basic-win32.c: Use "BasicScriptEngineLangWin32" to + be unique. + + * modules/basic/basic-ft2.c: Add comments explaining what Unicode + ranges the table entries covers. Use "BasicScriptEngineLangFT2" to + be unique. + (basic_engine_get_coverage): Test calling + pango_ft2_get_coverage(). + (basic_engine_ft2_new): Set corect engine type. Not that this + apparently is used for anything, the X11 basic shaper module also + sets its type as TYPE_LANG. + + * examples/viewer-ft2.c (split_paragraphs): Just end the string + upon encountering an invalid character. Don't return. + 2000-09-29 Martin Baulig * Makefile.am (pkgconfigdir): Set this to `$(libexecdir)/pkgconfig'; diff --git a/ChangeLog.pre-1-0 b/ChangeLog.pre-1-0 index 7e4577a4..9b046645 100644 --- a/ChangeLog.pre-1-0 +++ b/ChangeLog.pre-1-0 @@ -1,3 +1,34 @@ +2000-10-03 Tor Lillqvist + + * pango/pango.def + * pango/pangoft2.def: Add new entry points. + + * pango/pango-coverage.c (pango_coverage_set): Remove unnecessary + loop calling memset() with same parameters 64 times ;-) + + * pango/makefile.mingw.in (PANGO_OBJS): Add pango-tabs.o. + + Some small changes that have been laying around on my disk. The + Win32 and FT2 backends aren't "production quality" yet. For + speedup, need to cache at least the coverage info. + + * pango/pangoft2.c (pango_ft2_get_coverage): New function. + + * modules/basic/basic-win32.c: Use "BasicScriptEngineLangWin32" to + be unique. + + * modules/basic/basic-ft2.c: Add comments explaining what Unicode + ranges the table entries covers. Use "BasicScriptEngineLangFT2" to + be unique. + (basic_engine_get_coverage): Test calling + pango_ft2_get_coverage(). + (basic_engine_ft2_new): Set corect engine type. Not that this + apparently is used for anything, the X11 basic shaper module also + sets its type as TYPE_LANG. + + * examples/viewer-ft2.c (split_paragraphs): Just end the string + upon encountering an invalid character. Don't return. + 2000-09-29 Martin Baulig * Makefile.am (pkgconfigdir): Set this to `$(libexecdir)/pkgconfig'; diff --git a/ChangeLog.pre-1-10 b/ChangeLog.pre-1-10 index 7e4577a4..9b046645 100644 --- a/ChangeLog.pre-1-10 +++ b/ChangeLog.pre-1-10 @@ -1,3 +1,34 @@ +2000-10-03 Tor Lillqvist + + * pango/pango.def + * pango/pangoft2.def: Add new entry points. + + * pango/pango-coverage.c (pango_coverage_set): Remove unnecessary + loop calling memset() with same parameters 64 times ;-) + + * pango/makefile.mingw.in (PANGO_OBJS): Add pango-tabs.o. + + Some small changes that have been laying around on my disk. The + Win32 and FT2 backends aren't "production quality" yet. For + speedup, need to cache at least the coverage info. + + * pango/pangoft2.c (pango_ft2_get_coverage): New function. + + * modules/basic/basic-win32.c: Use "BasicScriptEngineLangWin32" to + be unique. + + * modules/basic/basic-ft2.c: Add comments explaining what Unicode + ranges the table entries covers. Use "BasicScriptEngineLangFT2" to + be unique. + (basic_engine_get_coverage): Test calling + pango_ft2_get_coverage(). + (basic_engine_ft2_new): Set corect engine type. Not that this + apparently is used for anything, the X11 basic shaper module also + sets its type as TYPE_LANG. + + * examples/viewer-ft2.c (split_paragraphs): Just end the string + upon encountering an invalid character. Don't return. + 2000-09-29 Martin Baulig * Makefile.am (pkgconfigdir): Set this to `$(libexecdir)/pkgconfig'; diff --git a/ChangeLog.pre-1-2 b/ChangeLog.pre-1-2 index 7e4577a4..9b046645 100644 --- a/ChangeLog.pre-1-2 +++ b/ChangeLog.pre-1-2 @@ -1,3 +1,34 @@ +2000-10-03 Tor Lillqvist + + * pango/pango.def + * pango/pangoft2.def: Add new entry points. + + * pango/pango-coverage.c (pango_coverage_set): Remove unnecessary + loop calling memset() with same parameters 64 times ;-) + + * pango/makefile.mingw.in (PANGO_OBJS): Add pango-tabs.o. + + Some small changes that have been laying around on my disk. The + Win32 and FT2 backends aren't "production quality" yet. For + speedup, need to cache at least the coverage info. + + * pango/pangoft2.c (pango_ft2_get_coverage): New function. + + * modules/basic/basic-win32.c: Use "BasicScriptEngineLangWin32" to + be unique. + + * modules/basic/basic-ft2.c: Add comments explaining what Unicode + ranges the table entries covers. Use "BasicScriptEngineLangFT2" to + be unique. + (basic_engine_get_coverage): Test calling + pango_ft2_get_coverage(). + (basic_engine_ft2_new): Set corect engine type. Not that this + apparently is used for anything, the X11 basic shaper module also + sets its type as TYPE_LANG. + + * examples/viewer-ft2.c (split_paragraphs): Just end the string + upon encountering an invalid character. Don't return. + 2000-09-29 Martin Baulig * Makefile.am (pkgconfigdir): Set this to `$(libexecdir)/pkgconfig'; diff --git a/ChangeLog.pre-1-4 b/ChangeLog.pre-1-4 index 7e4577a4..9b046645 100644 --- a/ChangeLog.pre-1-4 +++ b/ChangeLog.pre-1-4 @@ -1,3 +1,34 @@ +2000-10-03 Tor Lillqvist + + * pango/pango.def + * pango/pangoft2.def: Add new entry points. + + * pango/pango-coverage.c (pango_coverage_set): Remove unnecessary + loop calling memset() with same parameters 64 times ;-) + + * pango/makefile.mingw.in (PANGO_OBJS): Add pango-tabs.o. + + Some small changes that have been laying around on my disk. The + Win32 and FT2 backends aren't "production quality" yet. For + speedup, need to cache at least the coverage info. + + * pango/pangoft2.c (pango_ft2_get_coverage): New function. + + * modules/basic/basic-win32.c: Use "BasicScriptEngineLangWin32" to + be unique. + + * modules/basic/basic-ft2.c: Add comments explaining what Unicode + ranges the table entries covers. Use "BasicScriptEngineLangFT2" to + be unique. + (basic_engine_get_coverage): Test calling + pango_ft2_get_coverage(). + (basic_engine_ft2_new): Set corect engine type. Not that this + apparently is used for anything, the X11 basic shaper module also + sets its type as TYPE_LANG. + + * examples/viewer-ft2.c (split_paragraphs): Just end the string + upon encountering an invalid character. Don't return. + 2000-09-29 Martin Baulig * Makefile.am (pkgconfigdir): Set this to `$(libexecdir)/pkgconfig'; diff --git a/ChangeLog.pre-1-6 b/ChangeLog.pre-1-6 index 7e4577a4..9b046645 100644 --- a/ChangeLog.pre-1-6 +++ b/ChangeLog.pre-1-6 @@ -1,3 +1,34 @@ +2000-10-03 Tor Lillqvist + + * pango/pango.def + * pango/pangoft2.def: Add new entry points. + + * pango/pango-coverage.c (pango_coverage_set): Remove unnecessary + loop calling memset() with same parameters 64 times ;-) + + * pango/makefile.mingw.in (PANGO_OBJS): Add pango-tabs.o. + + Some small changes that have been laying around on my disk. The + Win32 and FT2 backends aren't "production quality" yet. For + speedup, need to cache at least the coverage info. + + * pango/pangoft2.c (pango_ft2_get_coverage): New function. + + * modules/basic/basic-win32.c: Use "BasicScriptEngineLangWin32" to + be unique. + + * modules/basic/basic-ft2.c: Add comments explaining what Unicode + ranges the table entries covers. Use "BasicScriptEngineLangFT2" to + be unique. + (basic_engine_get_coverage): Test calling + pango_ft2_get_coverage(). + (basic_engine_ft2_new): Set corect engine type. Not that this + apparently is used for anything, the X11 basic shaper module also + sets its type as TYPE_LANG. + + * examples/viewer-ft2.c (split_paragraphs): Just end the string + upon encountering an invalid character. Don't return. + 2000-09-29 Martin Baulig * Makefile.am (pkgconfigdir): Set this to `$(libexecdir)/pkgconfig'; diff --git a/ChangeLog.pre-1-8 b/ChangeLog.pre-1-8 index 7e4577a4..9b046645 100644 --- a/ChangeLog.pre-1-8 +++ b/ChangeLog.pre-1-8 @@ -1,3 +1,34 @@ +2000-10-03 Tor Lillqvist + + * pango/pango.def + * pango/pangoft2.def: Add new entry points. + + * pango/pango-coverage.c (pango_coverage_set): Remove unnecessary + loop calling memset() with same parameters 64 times ;-) + + * pango/makefile.mingw.in (PANGO_OBJS): Add pango-tabs.o. + + Some small changes that have been laying around on my disk. The + Win32 and FT2 backends aren't "production quality" yet. For + speedup, need to cache at least the coverage info. + + * pango/pangoft2.c (pango_ft2_get_coverage): New function. + + * modules/basic/basic-win32.c: Use "BasicScriptEngineLangWin32" to + be unique. + + * modules/basic/basic-ft2.c: Add comments explaining what Unicode + ranges the table entries covers. Use "BasicScriptEngineLangFT2" to + be unique. + (basic_engine_get_coverage): Test calling + pango_ft2_get_coverage(). + (basic_engine_ft2_new): Set corect engine type. Not that this + apparently is used for anything, the X11 basic shaper module also + sets its type as TYPE_LANG. + + * examples/viewer-ft2.c (split_paragraphs): Just end the string + upon encountering an invalid character. Don't return. + 2000-09-29 Martin Baulig * Makefile.am (pkgconfigdir): Set this to `$(libexecdir)/pkgconfig'; diff --git a/examples/viewer-ft2.c b/examples/viewer-ft2.c index e7e24bd1..ba820f3f 100644 --- a/examples/viewer-ft2.c +++ b/examples/viewer-ft2.c @@ -118,8 +118,7 @@ split_paragraphs (char *text) if (wc == (gunichar)-1) { fprintf (stderr, "%s: Invalid character in input\n", g_get_prgname ()); - g_list_foreach (result, (GFunc)g_free, NULL); - return NULL; + wc = 0; } if (!*p || !wc || wc == '\n') { diff --git a/modules/basic/basic-ft2.c b/modules/basic/basic-ft2.c index 086ba420..2faa9788 100644 --- a/modules/basic/basic-ft2.c +++ b/modules/basic/basic-ft2.c @@ -27,23 +27,79 @@ #include static PangoEngineRange basic_ranges[] = { - /* Language characters */ - { 0x0000, 0x02af, "*" }, + /* Basic Latin, Latin-1 Supplement, Latin Extended-A, Latin Extended-B, + * IPA Extensions + */ + { 0x0000, 0x02af, "*" }, + + /* Spacing Modifier Letters */ { 0x02b0, 0x02ff, "" }, + + /* Not covered: Combining Diacritical Marks */ + + /* Greek, Cyrillic, Armenian */ { 0x0380, 0x058f, "*" }, - { 0x0591, 0x05f4, "*" }, /* Hebrew */ - { 0x060c, 0x06f9, "" }, /* Arabic */ - { 0x0e01, 0x0e5b, "" }, /* Thai */ + + /* Hebrew */ + { 0x0591, 0x05f4, "*" }, + + /* Arabic */ + { 0x060c, 0x06f9, "" }, + + /* Not covered: Syriac, Thaana, Devanagari, Bengali, Gurmukhi, Gujarati, + * Oriya, Tamil, Telugu, Kannada, Malayalam, Sinhala + */ + + /* Thai */ + { 0x0e01, 0x0e5b, "" }, + + /* Not covered: Lao, Tibetan, Myanmar, Georgian, Hangul Jamo, Ethiopic, + * Cherokee, Unified Canadian Aboriginal Syllabics, Ogham, Runic, + * Khmer, Mongolian + */ + + /* Latin Extended Additional, Greek Extended */ { 0x1e00, 0x1fff, "*" }, + + /* General Punctuation, Superscripts and Subscripts, Currency Symbols, + * Combining Marks for Symbols, Letterlike Symbols, Number Forms, + * Arrows, Mathematical Operators, Miscellaneous Technical, + * Control Pictures, Optical Character Recognition, Enclosed Alphanumerics, + * Box Drawing, Block Elements, Geometric Shapes, Miscellaneous Symbols, + * Dingbats, Braille Patterns, CJK Radicals Supplement, Kangxi Radicals, + * Ideographic Description Characters, CJK Symbols and Punctuation, + * Hiragana, Katakana, Bopomofo, Hangul Compatibility Jamo, Kanbun, + * Bopomofo Extended, Enclosed CJK Letters and Months, CJK Compatibility, + * CJK Unified Ideographs Extension A, CJK Unified Ideographs + */ { 0x2000, 0x9fff, "*" }, + + /* Not covered: Yi Syllables, Yi Radicals */ + + /* Hangul Syllables */ { 0xac00, 0xd7a3, "kr" }, + + /* Not covered: Private Use */ + + /* CJK Compatibility Ideographs (partly) */ { 0xf900, 0xfa0b, "kr" }, + + /* Not covered: CJK Compatibility Ideographs (partly), + * Alphabetic Presentation Forms, Arabic Presentation Forms-A, + * Combining Half Marks, CJK Compatibility Forms, + * Small Form Variants, Arabic Presentation Forms-B, + * Specials + */ + + /* Halfwidth and Fullwidth Forms (partly) */ { 0xff00, 0xffe3, "*" } + + /* Not covered: Halfwidth and Fullwidth Forms, Specials */ }; static PangoEngineInfo script_engines[] = { { - "BasicScriptEngineLang", + "BasicScriptEngineLangFT2", PANGO_ENGINE_TYPE_LANG, PANGO_RENDER_TYPE_NONE, basic_ranges, G_N_ELEMENTS(basic_ranges) @@ -261,10 +317,13 @@ basic_engine_get_coverage (PangoFont *font, PangoCoverage *result = pango_coverage_new (); gunichar wc; +#if 0 for (wc = 0; wc < 65536; wc++) if (find_char (font, wc)) pango_coverage_set (result, wc, PANGO_COVERAGE_EXACT); - +#else + result = pango_ft2_get_coverage (font, lang); +#endif return result; } @@ -276,7 +335,7 @@ basic_engine_ft2_new (void) result = g_new (PangoEngineShape, 1); result->engine.id = "BasicScriptEngine"; - result->engine.type = PANGO_ENGINE_TYPE_LANG; + result->engine.type = PANGO_ENGINE_TYPE_SHAPE; result->engine.length = sizeof (result); result->script_shape = basic_engine_shape; result->get_coverage = basic_engine_get_coverage; @@ -304,8 +363,7 @@ MODULE_ENTRY(script_engine_list) (PangoEngineInfo **engines, PangoEngine * MODULE_ENTRY(script_engine_load) (const char *id) { - g_print ("basic-ft2: LOAD\n"); - if (!strcmp (id, "BasicScriptEngineLang")) + if (!strcmp (id, "BasicScriptEngineLangFT2")) return basic_engine_lang_new (); else if (!strcmp (id, "BasicScriptEngineFT2")) return basic_engine_ft2_new (); @@ -316,5 +374,4 @@ MODULE_ENTRY(script_engine_load) (const char *id) void MODULE_ENTRY(script_engine_unload) (PangoEngine *engine) { - g_print ("basic-ft2: UNLOAD\n"); } diff --git a/modules/basic/basic-win32.c b/modules/basic/basic-win32.c index ea4f6f0f..66082ee8 100644 --- a/modules/basic/basic-win32.c +++ b/modules/basic/basic-win32.c @@ -41,7 +41,7 @@ static PangoEngineRange basic_ranges[] = { static PangoEngineInfo script_engines[] = { { - "BasicScriptEngineLang", + "BasicScriptEngineLangWin32", PANGO_ENGINE_TYPE_LANG, PANGO_RENDER_TYPE_NONE, basic_ranges, G_N_ELEMENTS(basic_ranges) @@ -298,7 +298,7 @@ MODULE_ENTRY(script_engine_list) (PangoEngineInfo **engines, PangoEngine * MODULE_ENTRY(script_engine_load) (const char *id) { - if (!strcmp (id, "BasicScriptEngineLang")) + if (!strcmp (id, "BasicScriptEngineLangWin32")) return basic_engine_lang_new (); else if (!strcmp (id, "BasicScriptEngineWin32")) return basic_engine_win32_new (); diff --git a/pango/makefile.mingw.in b/pango/makefile.mingw.in index 3bcc4beb..1e1fb33a 100644 --- a/pango/makefile.mingw.in +++ b/pango/makefile.mingw.in @@ -31,6 +31,7 @@ PANGO_OBJS = \ pango-fontmap.o \ pango-item.o \ pango-layout.o \ + pango-tabs.o \ pango-utils.o \ reorder-items.o \ shape.o diff --git a/pango/pango-coverage.c b/pango/pango-coverage.c index 6a031fb3..c0c10145 100644 --- a/pango/pango-coverage.c +++ b/pango/pango-coverage.c @@ -237,8 +237,7 @@ void pango_coverage_set (PangoCoverage *coverage, (coverage->blocks[block_index].level << 4) | (coverage->blocks[block_index].level << 6); - for (i=0; i<64; i++) - memset (data, byte, 64); + memset (data, byte, 64); } i = index % 256; diff --git a/pango/pango.def b/pango/pango.def index 982162c5..0037f85f 100644 --- a/pango/pango.def +++ b/pango/pango.def @@ -97,6 +97,7 @@ EXPORTS pango_layout_get_pixel_size pango_layout_get_size pango_layout_get_spacing + pango_layout_get_tabs pango_layout_get_type pango_layout_get_width pango_layout_index_to_pos @@ -115,6 +116,7 @@ EXPORTS pango_layout_set_indent pango_layout_set_justify pango_layout_set_spacing + pango_layout_set_tabs pango_layout_set_text pango_layout_set_width pango_layout_xy_to_index @@ -132,4 +134,14 @@ EXPORTS pango_shape pango_skip_space pango_split_file_list + pango_tab_array_copy + pango_tab_array_free + pango_tab_array_get_size + pango_tab_array_get_tab + pango_tab_array_get_tabs + pango_tab_array_new + pango_tab_array_new_with_positions + pango_tab_array_get_positions_in_pixels + pango_tab_array_resize + pango_tab_array_set_tab pango_trim_string diff --git a/pango/pangoft2-fontcache.c b/pango/pangoft2-fontcache.c index ddfc114c..fa58adbe 100644 --- a/pango/pangoft2-fontcache.c +++ b/pango/pangoft2-fontcache.c @@ -28,7 +28,7 @@ /* Number of fonts to retain after they are not otherwise referenced. */ -#define CACHE_SIZE 3 +#define CACHE_SIZE 10 typedef struct _CacheEntry CacheEntry; diff --git a/pango/pangoft2.c b/pango/pangoft2.c index fe55178c..01f138b5 100644 --- a/pango/pangoft2.c +++ b/pango/pangoft2.c @@ -749,6 +749,50 @@ pango_ft2_has_glyph (PangoFont *font, return TRUE; } +PangoCoverage * +pango_ft2_get_coverage (PangoFont *font, + const char *lang) +{ + PangoFT2Font *ft2font = (PangoFT2Font *)font; + PangoCoverage *result = pango_coverage_new (); + PangoCoverage *tmp; + PangoGlyph glyph; + FT_Face face; + gunichar wc; + int i; + GTimeVal tv0, tv1; + + for (i = 1; i <= ft2font->n_fonts; i++) + { + g_get_current_time (&tv0); + tmp = pango_coverage_new (); + face = pango_ft2_get_face (font, i); + g_get_current_time (&tv1); + if (tv1.tv_usec < tv0.tv_usec) + tv1.tv_sec--, tv1.tv_usec += 1000000L; + g_print ("after pango_ft2_get_face: %ld.%06ld s\n", tv1.tv_sec - tv0.tv_sec, tv1.tv_usec - tv0.tv_usec); + for (wc = 0; wc < 65536; wc++) + { + glyph = PANGO_FT2_MAKE_GLYPH (i, wc); + if (FT_Get_Char_Index (face, wc)) + pango_coverage_set (tmp, wc, PANGO_COVERAGE_EXACT); + if ((wc%3000)==1) { + g_get_current_time (&tv1); + if (tv1.tv_usec < tv0.tv_usec) + tv1.tv_sec--, tv1.tv_usec += 1000000L; + g_print ("after %d loops: %ld.%06ld s\n", wc, tv1.tv_sec - tv0.tv_sec, tv1.tv_usec - tv0.tv_usec);} + } + g_get_current_time (&tv1); + if (tv1.tv_usec < tv0.tv_usec) + tv1.tv_sec--, tv1.tv_usec += 1000000L; + g_print ("after loop for %s: %ld.%06ld s\n", face->family_name, tv1.tv_sec - tv0.tv_sec, tv1.tv_usec - tv0.tv_usec); + pango_coverage_max (result, tmp); + pango_coverage_unref (tmp); + } + + return result; +} + /** * pango_ft2_font_subfont_open_args: * @font: a #PangoFont which must be from the FT2 backend diff --git a/pango/pangoft2.def b/pango/pangoft2.def index 2bb3134b..bab9698e 100644 --- a/pango/pangoft2.def +++ b/pango/pangoft2.def @@ -10,6 +10,7 @@ EXPORTS pango_ft2_fontmap_dump pango_ft2_ft_strerror pango_ft2_get_context + pango_ft2_get_coverage pango_ft2_get_unknown_glyph pango_ft2_has_glyph pango_ft2_load_font -- cgit v1.2.1