• Eli Zaretskii's avatar
    Add HarfBuzz font backend for MS-Windows · fba3687d
    Eli Zaretskii authored
    * 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.
    fba3687d
w32uniscribe.c 63 KB