diff options
author | Eli Zaretskii <eliz@gnu.org> | 2019-05-31 11:30:36 +0300 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2019-05-31 11:30:36 +0300 |
commit | fba3687db414306da780d1faeb13fe947d2e6da6 (patch) | |
tree | 5518fa631be611f8534bc67ed0a9140788a39650 /src/chartab.c | |
parent | b40dde705af4d53853de6185a2468153b442dc9a (diff) | |
download | emacs-fba3687db414306da780d1faeb13fe947d2e6da6.tar.gz |
Add HarfBuzz font backend for MS-Windows
* src/w32uniscribe.c [HAVE_HARFBUZZ]: Include math.h and
hb.h.
(bswap_32): Define for GCC 4.3.0 and later; else include
<byteswap.h> from Gnulib.
(struct uniscribe_font_info): Extend for HarfBuzz; 'cache' is
now a 'void *' (all users changed).
[HAVE_HARFBUZZ]: Define typedefs for HarfBuzz functions to be
loaded dynamically from the HarfBuzz DLL. Define macros to
call those functions via function pointers.
(uniscribe_open) [HAVE_HARFBUZZ]: Use the HarfBuzz font driver
if the type of the font entity is 'harfbuzz'.
(uniscribe_close) [HAVE_HARFBUZZ]: For fonts using the
HarfBuzz backend, call hb_font_destroy to free memory used for
the cached hb_font data.
(uniscribe_shape): Fix assignment of character codepoints to
glyphs from a single cluster.
(w32hb_list, w32hb_match, free_cb, w32hb_get_font_table)
(w32hb_get_font, w32hb_encode_char, w32hb_begin_font)
(w32uni_combining, w32uni_general, w32uni_mirroring)
(get_hb_unicode_funcs, w32hb_shape)
(w32hb_combining_capability, load_harfbuzz_funcs)
[HAVE_HARFBUZZ]: New functions.
(syms_of_w32uniscribe_for_pdumper) [HAVE_HARFBUZZ]: Load the
HarfBuzz DLL and register the HarfBuzz backend with its
functions.
* src/w32font.c (syms_of_w32font) <Qharfbuzz>: New DEFSYM.
* src/w32fns.c (Fx_create_frame, w32_create_tip_frame)
[HAVE_HARFBUZZ]: Register the harfbuzz font backend.
* src/lisp.h (get_unicode_property): Declare prototype.
* src/font.h (harfbuzz_font_driver) [HAVE_NTGUI]: Declare.
* src/chartab.c (get_unicode_property): New function, body
taken from get-unicode-property-internal.
(Fget_unicode_property_internal): Call get_unicode_property
after validating input.
* doc/lispref/frames.texi (Font and Color Parameters):
* doc/emacs/msdos.texi (Windows Fonts): Document support for
HarfBuzz text shaping on MS-Windows.
* configure.ac (HAVE_HARFBUZZ): Move out of the X-specific
part, and consider HarfBuzz also for HAVE_W32 systems.
Require HarfBuzz v1.2.3 for w32.
Diffstat (limited to 'src/chartab.c')
-rw-r--r-- | src/chartab.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/chartab.c b/src/chartab.c index 16017f4a49a..bf8e34b2529 100644 --- a/src/chartab.c +++ b/src/chartab.c @@ -1321,22 +1321,25 @@ and put an element value. */) return Fcdr (Fassq (prop, Vchar_code_property_alist)); } +Lisp_Object +get_unicode_property (Lisp_Object char_table, int ch) +{ + Lisp_Object val = CHAR_TABLE_REF (char_table, ch); + uniprop_decoder_t decoder = uniprop_get_decoder (char_table); + return (decoder ? decoder (char_table, val) : val); +} + DEFUN ("get-unicode-property-internal", Fget_unicode_property_internal, Sget_unicode_property_internal, 2, 2, 0, doc: /* Return an element of CHAR-TABLE for character CH. CHAR-TABLE must be what returned by `unicode-property-table-internal'. */) (Lisp_Object char_table, Lisp_Object ch) { - Lisp_Object val; - uniprop_decoder_t decoder; - CHECK_CHAR_TABLE (char_table); CHECK_CHARACTER (ch); if (! UNIPROP_TABLE_P (char_table)) error ("Invalid Unicode property table"); - val = CHAR_TABLE_REF (char_table, XFIXNUM (ch)); - decoder = uniprop_get_decoder (char_table); - return (decoder ? decoder (char_table, val) : val); + return get_unicode_property (char_table, XFIXNUM (ch)); } DEFUN ("put-unicode-property-internal", Fput_unicode_property_internal, |