diff options
| author | Robert Pluim | 2023-06-02 13:54:56 +0200 |
|---|---|---|
| committer | Robert Pluim | 2023-06-02 14:13:43 +0200 |
| commit | 2f94f6de9d64f9fd89284dac171e166e7d721dcd (patch) | |
| tree | 3e409c2ac97dd840037b754b0ee0d605bf03755c | |
| parent | 753f8aa1f14c2ff5d86b086230d600eb9bb5d8bc (diff) | |
| download | emacs-2f94f6de9d64f9fd89284dac171e166e7d721dcd.tar.gz emacs-2f94f6de9d64f9fd89284dac171e166e7d721dcd.zip | |
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)
| -rw-r--r-- | admin/unidata/emoji-zwj.awk | 3 | ||||
| -rw-r--r-- | 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 { | |||
| 106 | 106 | ||
| 107 | for (elt in ch) | 107 | for (elt in ch) |
| 108 | { | 108 | { |
| 109 | printf("(#x%s .\n,(eval-when-compile (regexp-opt\n'(\n%s\n))))\n", elt, vec[elt]) | 109 | entries = sprintf("%s\n\"\\N{U+%s}\\N{U+FE0E}\"\n\"\\N{U+%s}\\N{U+FE0F}\"", vec[elt], elt, elt) |
| 110 | printf("(#x%s .\n,(eval-when-compile (regexp-opt\n'(\n%s\n))))\n", elt, entries) | ||
| 110 | } | 111 | } |
| 111 | print "))" | 112 | print "))" |
| 112 | print " (set-char-table-range composition-function-table" | 113 | 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." | |||
| 861 | ;; handled in font_range, we end up choosing the Emoji presentation | 861 | ;; handled in font_range, we end up choosing the Emoji presentation |
| 862 | ;; rather than the Text presentation. | 862 | ;; rather than the Text presentation. |
| 863 | (let ((elt '([".." 1 compose-gstring-for-variation-glyph]))) | 863 | (let ((elt '([".." 1 compose-gstring-for-variation-glyph]))) |
| 864 | (set-char-table-range composition-function-table '(#xFE00 . #xFE0E) elt) | 864 | (set-char-table-range composition-function-table '(#xFE00 . #xFE0D) elt) |
| 865 | (set-char-table-range composition-function-table '(#xE0100 . #xE01EF) elt)) | 865 | (set-char-table-range composition-function-table '(#xE0100 . #xE01EF) elt)) |
| 866 | 866 | ||
| 867 | (defun auto-compose-chars (func from to font-object string direction) | 867 | (defun auto-compose-chars (func from to font-object string direction) |