From 2f94f6de9d64f9fd89284dac171e166e7d721dcd Mon Sep 17 00:00:00 2001 From: Robert Pluim Date: Fri, 2 Jun 2023 13:54:56 +0200 Subject: [PATCH] Make VS-15 and VS-16 compositions work correctly There is a conflict between forward matching and backward matching composition rules involving the same codepoint, which can cause the backward matching ones not to be invoked. Ensure that VS-15 (U+FE0E) and VS-16 (U+FE0F) are composed by forward matching rules instead in order to avoid this issue. * admin/unidata/emoji-zwj.awk: Add rules for CHAR+VS-15 and CHAR+VS-16. * lisp/composite.el: remove backward matching rule for VS-15. (Bug#63731) --- admin/unidata/emoji-zwj.awk | 3 ++- lisp/composite.el | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/admin/unidata/emoji-zwj.awk b/admin/unidata/emoji-zwj.awk index 7d2ff6cb900..f13f796bcac 100644 --- a/admin/unidata/emoji-zwj.awk +++ b/admin/unidata/emoji-zwj.awk @@ -106,7 +106,8 @@ END { for (elt in ch) { - printf("(#x%s .\n,(eval-when-compile (regexp-opt\n'(\n%s\n))))\n", elt, vec[elt]) + entries = sprintf("%s\n\"\\N{U+%s}\\N{U+FE0E}\"\n\"\\N{U+%s}\\N{U+FE0F}\"", vec[elt], elt, elt) + printf("(#x%s .\n,(eval-when-compile (regexp-opt\n'(\n%s\n))))\n", elt, entries) } print "))" print " (set-char-table-range composition-function-table" diff --git a/lisp/composite.el b/lisp/composite.el index fb8b76114f4..9710c3c371b 100644 --- a/lisp/composite.el +++ b/lisp/composite.el @@ -861,7 +861,7 @@ and the second is a glyph for a variation selector." ;; handled in font_range, we end up choosing the Emoji presentation ;; rather than the Text presentation. (let ((elt '([".." 1 compose-gstring-for-variation-glyph]))) - (set-char-table-range composition-function-table '(#xFE00 . #xFE0E) elt) + (set-char-table-range composition-function-table '(#xFE00 . #xFE0D) elt) (set-char-table-range composition-function-table '(#xE0100 . #xE01EF) elt)) (defun auto-compose-chars (func from to font-object string direction) -- 2.39.2