diff options
author | Eli Zaretskii <eliz@gnu.org> | 2018-12-29 16:35:09 +0200 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2018-12-29 16:35:09 +0200 |
commit | 48776b70115edf3775df19d80f734048dadff198 (patch) | |
tree | 10a7e72a45bbbdf8dbfed4afce59fc9a5b975110 /src/font.h | |
parent | 1a80b5d9b8cfa0e523b596db5d1e7e6074dbee46 (diff) | |
download | emacs-48776b70115edf3775df19d80f734048dadff198.tar.gz |
Provide text directionality and language to HarfBuzz shaper
* lisp/language/tv-util.el (tai-viet-composition-function):
* lisp/language/ethio-util.el (ethio-composition-function):
* lisp/language/japanese.el (compose-gstring-for-variation-glyph):
* lisp/language/thai-util.el (thai-composition-function):
* lisp/language/misc-lang.el (arabic-shape-gstring):
* lisp/language/lao-util.el (lao-composition-function):
* lisp/language/hebrew.el (hebrew-shape-gstring):
* lisp/composite.el (compose-gstring-for-graphic)
(compose-gstring-for-dotted-circle, auto-compose-chars)
(compose-gstring-for-terminal): Accept 2nd argument DIRECTION; all
callers changed.
* src/composite.c (composition_reseat_it): Call
auto-composition-function with one more argument DIRECTION.
(syms_of_composite) <auto-composition-function>: Update the doc
string.
* src/ftfont.c (ftfont_shape_by_hb): Compute language and
direction, and set buffer properties accordingly.
* src/composite.c (autocmp_chars):
* src/w32uniscribe.c (uniscribe_shape):
* src/xftfont.c (xftfont_shape):
* src/ftfont.c (ftfont_shape, ftfont_shape_by_hb):
* src/font.c (Ffont_shape_gstring): Accept an additional argument
DIRECTION.
* src/macfont.m (lgstring_direction): New enum.
(mac_font_shape_1, mac_screen_font_shape, mac_font_shape):
Accept an additional argument specifying text direction. All
callers changed.
* src/font.c (syms_of_font): New symbols QL2R and QR2L.
* src/font.h (shape): Accept new argument DIRECTION. All
implementations changed. (Bug#33729)
(ftfont_shape): Update prototype.
Diffstat (limited to 'src/font.h')
-rw-r--r-- | src/font.h | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/font.h b/src/font.h index 1741b3f3964..52bdaa38899 100644 --- a/src/font.h +++ b/src/font.h @@ -700,7 +700,11 @@ struct font_driver Return the number of output codes. If none of the features are applicable to the input data, return 0. If GSTRING-OUT is too - short, return -1. */ + short, return -1. + + Note: This method is currently not implemented by any font + back-end, and is only called by 'font-drive-otf' and + 'font-otf-alternates', which are themselves ifdef'ed away. */ int (*otf_drive) (struct font *font, Lisp_Object features, Lisp_Object gstring_in, int from, int to, Lisp_Object gstring_out, int idx, bool alternate_subst); @@ -723,6 +727,9 @@ struct font_driver (N+1)th element of GSTRING is nil, input of shaping is from the 1st to (N)th elements. In each input glyph, FROM, TO, CHAR, and CODE are already set. + DIRECTION is either L2R or R2L, or nil if unknown. During + redisplay, this comes from applying the UBA, is passed from + composition_reseat_it, and is used by the HarfBuzz shaper. This function updates all fields of the input glyphs. If the output glyphs (M) are more than the input glyphs (N), (N+1)th @@ -730,7 +737,7 @@ struct font_driver a new glyph object and storing it in GSTRING. If (M) is greater than the length of GSTRING, nil should be return. In that case, this function is called again with the larger GSTRING. */ - Lisp_Object (*shape) (Lisp_Object lgstring); + Lisp_Object (*shape) (Lisp_Object lgstring, Lisp_Object direction); /* Optional. @@ -887,7 +894,7 @@ extern Lisp_Object ftfont_list_family (struct frame *); extern Lisp_Object ftfont_match (struct frame *, Lisp_Object); extern Lisp_Object ftfont_open (struct frame *, Lisp_Object, int); extern Lisp_Object ftfont_otf_capability (struct font *); -extern Lisp_Object ftfont_shape (Lisp_Object); +extern Lisp_Object ftfont_shape (Lisp_Object, Lisp_Object); extern unsigned ftfont_encode_char (struct font *, int); extern void ftfont_close (struct font *); extern void ftfont_filter_properties (Lisp_Object, Lisp_Object); |