unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Better emoji support
@ 2021-07-10  9:19 Eli Zaretskii
  2021-07-10  9:24 ` Robert Pluim
  0 siblings, 1 reply; 73+ messages in thread
From: Eli Zaretskii @ 2021-07-10  9:19 UTC (permalink / raw)
  To: Robert Pluim; +Cc: emacs-devel

Robert,

Can we please finalize the changes discussed in

  https://lists.gnu.org/archive/html/emacs-devel/2020-03/msg00016.html
  https://debbugs.gnu.org/cgi/bugreport.cgi?bug=39799

and land that on master?  AFAIR, we had almost everything figured out
and patches (almost) ready to be installed?  What is left to do before
this can land?

TIA



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-07-10  9:19 Better emoji support Eli Zaretskii
@ 2021-07-10  9:24 ` Robert Pluim
  2021-07-10  9:37   ` Eli Zaretskii
  0 siblings, 1 reply; 73+ messages in thread
From: Robert Pluim @ 2021-07-10  9:24 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

>>>>> On Sat, 10 Jul 2021 12:19:55 +0300, Eli Zaretskii <eliz@gnu.org> said:

    Eli> Robert,
    Eli> Can we please finalize the changes discussed in

    Eli>   https://lists.gnu.org/archive/html/emacs-devel/2020-03/msg00016.html
    Eli>   https://debbugs.gnu.org/cgi/bugreport.cgi?bug=39799

    Eli> and land that on master?  AFAIR, we had almost everything figured out
    Eli> and patches (almost) ready to be installed?  What is left to do before
    Eli> this can land?

Hi Eli,

I need to

- clean up the awk script (it currently does more than it needs to)
- test that the resulting changes do the right thing

Iʼll work on that this week

Robert
-- 



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-07-10  9:24 ` Robert Pluim
@ 2021-07-10  9:37   ` Eli Zaretskii
  2021-07-10  9:45     ` Robert Pluim
  0 siblings, 1 reply; 73+ messages in thread
From: Eli Zaretskii @ 2021-07-10  9:37 UTC (permalink / raw)
  To: Robert Pluim; +Cc: emacs-devel

> From: Robert Pluim <rpluim@gmail.com>
> Cc: emacs-devel@gnu.org
> Date: Sat, 10 Jul 2021 11:24:29 +0200
> 
> >>>>> On Sat, 10 Jul 2021 12:19:55 +0300, Eli Zaretskii <eliz@gnu.org> said:
> 
>     Eli> Robert,
>     Eli> Can we please finalize the changes discussed in
> 
>     Eli>   https://lists.gnu.org/archive/html/emacs-devel/2020-03/msg00016.html
>     Eli>   https://debbugs.gnu.org/cgi/bugreport.cgi?bug=39799
> 
>     Eli> and land that on master?  AFAIR, we had almost everything figured out
>     Eli> and patches (almost) ready to be installed?  What is left to do before
>     Eli> this can land?
> 
> Hi Eli,
> 
> I need to
> 
> - clean up the awk script (it currently does more than it needs to)
> - test that the resulting changes do the right thing
> 
> Iʼll work on that this week

Great, thanks.

I thought we also decided to introduce a new script, 'emoji', to make
the fontset definition and customizations easier.  Was I dreaming?
Because I cannot seem to be able to find that part in the patches
posted to those two threads.



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-07-10  9:37   ` Eli Zaretskii
@ 2021-07-10  9:45     ` Robert Pluim
  2021-07-10  9:48       ` Eli Zaretskii
  0 siblings, 1 reply; 73+ messages in thread
From: Robert Pluim @ 2021-07-10  9:45 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 1248 bytes --]

>>>>> On Sat, 10 Jul 2021 12:37:09 +0300, Eli Zaretskii <eliz@gnu.org> said:

    Eli> I thought we also decided to introduce a new script, 'emoji', to make
    Eli> the fontset definition and customizations easier.  Was I dreaming?
    Eli> Because I cannot seem to be able to find that part in the patches
    Eli> posted to those two threads.

My version has the following. If more is needed tell me. Iʼve attached
the latest version.

diff --git a/lisp/international/fontset.el b/lisp/international/fontset.el
index 3deaff9677..6cd95af76f 100644
--- a/lisp/international/fontset.el
+++ b/lisp/international/fontset.el
@@ -272,7 +272,8 @@ font-encoding-charset-alist
         (indic-siyaq-number #x1ec71)
         (ottoman-siyaq-number #x1ed01)
 	(mahjong-tile #x1F000)
-	(domino-tile #x1F030)))
+	(domino-tile #x1F030)
+        (emoji #x1F300 #x1F600 #xFE0F)))
 
 (defvar otf-script-alist)
 
@@ -763,7 +764,8 @@ setup-default-fontset
 		    counting-rod-numeral
 		    adlam
 		    mahjong-tile
-		    domino-tile))
+		    domino-tile
+                    emoji))
     (set-fontset-font "fontset-default"
 		      script (font-spec :registry "iso10646-1" :script script)
 		      nil 'append))

Robert
-- 

[-- Attachment #2: 0001-emoji-using-blocks.txt.patch --]
[-- Type: text/x-diff, Size: 114867 bytes --]

From 49ba40e7d164140e3dcb7af3949d221ef11bbbeb Mon Sep 17 00:00:00 2001
From: Robert Pluim <rpluim@gmail.com>
Date: Mon, 19 Oct 2020 15:46:19 +0200
Subject: [PATCH] emoji using blocks.txt
To: emacs-devel@gnu.org

---
 admin/unidata/Makefile.in     |    6 +-
 admin/unidata/blocks.awk      |   32 +-
 admin/unidata/emoji-data.txt  | 1261 +++++++++++++++++++++++++++++++++
 etc/NEWS                      |   11 +
 lisp/international/fontset.el |    9 +-
 5 files changed, 1310 insertions(+), 9 deletions(-)
 create mode 100644 admin/unidata/emoji-data.txt

diff --git a/admin/unidata/Makefile.in b/admin/unidata/Makefile.in
index 357b812678..c57803e922 100644
--- a/admin/unidata/Makefile.in
+++ b/admin/unidata/Makefile.in
@@ -81,8 +81,10 @@ charscript.el:
 
 blocks = ${srcdir}/blocks.awk
 
-${unidir}/charscript.el: ${srcdir}/Blocks.txt ${blocks}
-	$(AM_V_GEN)$(AWK) -f ${blocks} < $< > $@
+${unidir}/charscript.el: ${blocks}
+
+${unidir}/charscript.el: ${srcdir}/Blocks.txt ${srcdir}/emoji-data.txt
+	$(AM_V_GEN)$(AWK) -f ${blocks} $^ > $@
 
 
 .PHONY: clean bootstrap-clean distclean maintainer-clean gen-clean
diff --git a/admin/unidata/blocks.awk b/admin/unidata/blocks.awk
index 4ecb233fe7..0d162ac6a1 100755
--- a/admin/unidata/blocks.awk
+++ b/admin/unidata/blocks.awk
@@ -55,8 +55,11 @@ BEGIN {
     alias["enclosed alphanumerics"] = "symbol"
     alias["box drawing"] = "symbol"
     alias["block elements"] = "symbol"
-    alias["miscellaneous symbols"] = "symbol"
-    alias["symbols for legacy computing"] = "symbol"
+    alias["miscellaneous symbols and pictographs"] = "emoji"
+    alias["symbols and pictographs extended-a"] = "emoji"
+    alias["symbols for legacy computing"] = "emoji"
+    alias["emoticons"] = "emoji"
+    alias["variation selectors"] = "emoji"
     alias["cjk strokes"] = "cjk-misc"
     alias["cjk symbols and punctuation"] = "cjk-misc"
     alias["halfwidth and fullwidth forms"] = "cjk-misc"
@@ -101,7 +104,8 @@ function name2alias(name   , w, w2) {
     else if (name ~ /cuneiform number/) return "cuneiform-numbers-and-punctuation"
     else if (name ~ /cuneiform/) return "cuneiform"
     else if (name ~ /mathematical alphanumeric symbol/) return "mathematical"
-    else if (name ~ /punctuation|mathematical|arrows|currency|superscript|small form variants|geometric|dingbats|enclosed|alchemical|pictograph|emoticon|transport/) return "symbol"
+    else if (name ~ /transport|supplemental symbols/) return "emoji"
+    else if (name ~ /punctuation|mathematical|arrows|currency|superscript|small form variants|geometric|dingbats|enclosed|alchemical|pictograph/) return "symbol"
     else if (name ~ /canadian aboriginal/) return "canadian-aboriginal"
     else if (name ~ /katakana|hiragana/) return "kana"
     else if (name ~ /myanmar/) return "burmese"
@@ -131,7 +135,7 @@ function name2alias(name   , w, w2) {
     return name
 }
 
-/^[0-9A-F]/ {
+FILENAME == "Blocks.txt" && /^[0-9A-F]/ {
     sep = index($1, "..")
     len = length($1)
     s = substr($1,1,sep-1)
@@ -202,6 +206,24 @@ function name2alias(name   , w, w2) {
     }
 }
 
+FILENAME == "emoji-data.txt" && /^[0-9A-F].*; Emoji_Presentation / {
+    sep = index($1, "..")
+    len = length($1)
+    if (sep > 0)  {
+        s = substr($1,1,sep-1)
+        e = substr($1,sep+2,len-sep-1)
+    } else {
+        s = $1
+        e = $1
+    }
+    $1 = ""
+    i++
+    start[i] = s
+    end[i] = e
+    alt[i] = "emoji"
+    name[i] = "Autogenerated emoji"
+}
+
 END {
     print ";;; charscript.el --- character script table  -*- lexical-binding:t -*-"
     print ";;; Automatically generated from admin/unidata/Blocks.txt"
@@ -223,6 +245,6 @@ END {
     print "    (or (memq (nth 2 elt) script-list)"
     print "	(setq script-list (cons (nth 2 elt) script-list))))"
     print "  (set-char-table-extra-slot char-script-table 0 (nreverse script-list)))"
-    print ""
+    print "\n"
     print "(provide 'charscript)"
 }
diff --git a/admin/unidata/emoji-data.txt b/admin/unidata/emoji-data.txt
new file mode 100644
index 0000000000..0b7d74cfb4
--- /dev/null
+++ b/admin/unidata/emoji-data.txt
@@ -0,0 +1,1261 @@
+# emoji-data.txt
+# Date: 2020-01-28, 20:52:38 GMT
+# © 2020 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# Emoji Data for UTS #51
+# Version: 13.0
+#
+# For documentation and usage, see http://www.unicode.org/reports/tr51
+#
+# Format:
+# <codepoint(s)> ; <property> # <comments>
+# Note: there is no guarantee as to the structure of whitespace or comments
+#
+# Characters and sequences are listed in code point order. Users should be shown a more natural order.
+# See the CLDR collation order for Emoji.
+
+
+# ================================================
+
+# All omitted code points have Emoji=No
+# @missing: 0000..10FFFF  ; Emoji ; No
+
+0023          ; Emoji                # E0.0   [1] (#️)       number sign
+002A          ; Emoji                # E0.0   [1] (*️)       asterisk
+0030..0039    ; Emoji                # E0.0  [10] (0️..9️)    digit zero..digit nine
+00A9          ; Emoji                # E0.6   [1] (©️)       copyright
+00AE          ; Emoji                # E0.6   [1] (®️)       registered
+203C          ; Emoji                # E0.6   [1] (‼️)       double exclamation mark
+2049          ; Emoji                # E0.6   [1] (⁉️)       exclamation question mark
+2122          ; Emoji                # E0.6   [1] (™️)       trade mark
+2139          ; Emoji                # E0.6   [1] (ℹ️)       information
+2194..2199    ; Emoji                # E0.6   [6] (↔️..↙️)    left-right arrow..down-left arrow
+21A9..21AA    ; Emoji                # E0.6   [2] (↩️..↪️)    right arrow curving left..left arrow curving right
+231A..231B    ; Emoji                # E0.6   [2] (⌚..⌛)    watch..hourglass done
+2328          ; Emoji                # E1.0   [1] (⌨️)       keyboard
+23CF          ; Emoji                # E1.0   [1] (⏏️)       eject button
+23E9..23EC    ; Emoji                # E0.6   [4] (⏩..⏬)    fast-forward button..fast down button
+23ED..23EE    ; Emoji                # E0.7   [2] (⏭️..⏮️)    next track button..last track button
+23EF          ; Emoji                # E1.0   [1] (⏯️)       play or pause button
+23F0          ; Emoji                # E0.6   [1] (⏰)       alarm clock
+23F1..23F2    ; Emoji                # E1.0   [2] (⏱️..⏲️)    stopwatch..timer clock
+23F3          ; Emoji                # E0.6   [1] (⏳)       hourglass not done
+23F8..23FA    ; Emoji                # E0.7   [3] (⏸️..⏺️)    pause button..record button
+24C2          ; Emoji                # E0.6   [1] (Ⓜ️)       circled M
+25AA..25AB    ; Emoji                # E0.6   [2] (▪️..▫️)    black small square..white small square
+25B6          ; Emoji                # E0.6   [1] (▶️)       play button
+25C0          ; Emoji                # E0.6   [1] (◀️)       reverse button
+25FB..25FE    ; Emoji                # E0.6   [4] (◻️..◾)    white medium square..black medium-small square
+2600..2601    ; Emoji                # E0.6   [2] (☀️..☁️)    sun..cloud
+2602..2603    ; Emoji                # E0.7   [2] (☂️..☃️)    umbrella..snowman
+2604          ; Emoji                # E1.0   [1] (☄️)       comet
+260E          ; Emoji                # E0.6   [1] (☎️)       telephone
+2611          ; Emoji                # E0.6   [1] (☑️)       check box with check
+2614..2615    ; Emoji                # E0.6   [2] (☔..☕)    umbrella with rain drops..hot beverage
+2618          ; Emoji                # E1.0   [1] (☘️)       shamrock
+261D          ; Emoji                # E0.6   [1] (☝️)       index pointing up
+2620          ; Emoji                # E1.0   [1] (☠️)       skull and crossbones
+2622..2623    ; Emoji                # E1.0   [2] (☢️..☣️)    radioactive..biohazard
+2626          ; Emoji                # E1.0   [1] (☦️)       orthodox cross
+262A          ; Emoji                # E0.7   [1] (☪️)       star and crescent
+262E          ; Emoji                # E1.0   [1] (☮️)       peace symbol
+262F          ; Emoji                # E0.7   [1] (☯️)       yin yang
+2638..2639    ; Emoji                # E0.7   [2] (☸️..☹️)    wheel of dharma..frowning face
+263A          ; Emoji                # E0.6   [1] (☺️)       smiling face
+2640          ; Emoji                # E4.0   [1] (♀️)       female sign
+2642          ; Emoji                # E4.0   [1] (♂️)       male sign
+2648..2653    ; Emoji                # E0.6  [12] (♈..♓)    Aries..Pisces
+265F          ; Emoji                # E11.0  [1] (♟️)       chess pawn
+2660          ; Emoji                # E0.6   [1] (♠️)       spade suit
+2663          ; Emoji                # E0.6   [1] (♣️)       club suit
+2665..2666    ; Emoji                # E0.6   [2] (♥️..♦️)    heart suit..diamond suit
+2668          ; Emoji                # E0.6   [1] (♨️)       hot springs
+267B          ; Emoji                # E0.6   [1] (♻️)       recycling symbol
+267E          ; Emoji                # E11.0  [1] (♾️)       infinity
+267F          ; Emoji                # E0.6   [1] (♿)       wheelchair symbol
+2692          ; Emoji                # E1.0   [1] (⚒️)       hammer and pick
+2693          ; Emoji                # E0.6   [1] (⚓)       anchor
+2694          ; Emoji                # E1.0   [1] (⚔️)       crossed swords
+2695          ; Emoji                # E4.0   [1] (⚕️)       medical symbol
+2696..2697    ; Emoji                # E1.0   [2] (⚖️..⚗️)    balance scale..alembic
+2699          ; Emoji                # E1.0   [1] (⚙️)       gear
+269B..269C    ; Emoji                # E1.0   [2] (⚛️..⚜️)    atom symbol..fleur-de-lis
+26A0..26A1    ; Emoji                # E0.6   [2] (⚠️..⚡)    warning..high voltage
+26A7          ; Emoji                # E13.0  [1] (⚧️)       transgender symbol
+26AA..26AB    ; Emoji                # E0.6   [2] (⚪..⚫)    white circle..black circle
+26B0..26B1    ; Emoji                # E1.0   [2] (⚰️..⚱️)    coffin..funeral urn
+26BD..26BE    ; Emoji                # E0.6   [2] (⚽..⚾)    soccer ball..baseball
+26C4..26C5    ; Emoji                # E0.6   [2] (⛄..⛅)    snowman without snow..sun behind cloud
+26C8          ; Emoji                # E0.7   [1] (⛈️)       cloud with lightning and rain
+26CE          ; Emoji                # E0.6   [1] (⛎)       Ophiuchus
+26CF          ; Emoji                # E0.7   [1] (⛏️)       pick
+26D1          ; Emoji                # E0.7   [1] (⛑️)       rescue worker’s helmet
+26D3          ; Emoji                # E0.7   [1] (⛓️)       chains
+26D4          ; Emoji                # E0.6   [1] (⛔)       no entry
+26E9          ; Emoji                # E0.7   [1] (⛩️)       shinto shrine
+26EA          ; Emoji                # E0.6   [1] (⛪)       church
+26F0..26F1    ; Emoji                # E0.7   [2] (⛰️..⛱️)    mountain..umbrella on ground
+26F2..26F3    ; Emoji                # E0.6   [2] (⛲..⛳)    fountain..flag in hole
+26F4          ; Emoji                # E0.7   [1] (⛴️)       ferry
+26F5          ; Emoji                # E0.6   [1] (⛵)       sailboat
+26F7..26F9    ; Emoji                # E0.7   [3] (⛷️..⛹️)    skier..person bouncing ball
+26FA          ; Emoji                # E0.6   [1] (⛺)       tent
+26FD          ; Emoji                # E0.6   [1] (⛽)       fuel pump
+2702          ; Emoji                # E0.6   [1] (✂️)       scissors
+2705          ; Emoji                # E0.6   [1] (✅)       check mark button
+2708..270C    ; Emoji                # E0.6   [5] (✈️..✌️)    airplane..victory hand
+270D          ; Emoji                # E0.7   [1] (✍️)       writing hand
+270F          ; Emoji                # E0.6   [1] (✏️)       pencil
+2712          ; Emoji                # E0.6   [1] (✒️)       black nib
+2714          ; Emoji                # E0.6   [1] (✔️)       check mark
+2716          ; Emoji                # E0.6   [1] (✖️)       multiply
+271D          ; Emoji                # E0.7   [1] (✝️)       latin cross
+2721          ; Emoji                # E0.7   [1] (✡️)       star of David
+2728          ; Emoji                # E0.6   [1] (✨)       sparkles
+2733..2734    ; Emoji                # E0.6   [2] (✳️..✴️)    eight-spoked asterisk..eight-pointed star
+2744          ; Emoji                # E0.6   [1] (❄️)       snowflake
+2747          ; Emoji                # E0.6   [1] (❇️)       sparkle
+274C          ; Emoji                # E0.6   [1] (❌)       cross mark
+274E          ; Emoji                # E0.6   [1] (❎)       cross mark button
+2753..2755    ; Emoji                # E0.6   [3] (❓..❕)    question mark..white exclamation mark
+2757          ; Emoji                # E0.6   [1] (❗)       exclamation mark
+2763          ; Emoji                # E1.0   [1] (❣️)       heart exclamation
+2764          ; Emoji                # E0.6   [1] (❤️)       red heart
+2795..2797    ; Emoji                # E0.6   [3] (➕..➗)    plus..divide
+27A1          ; Emoji                # E0.6   [1] (➡️)       right arrow
+27B0          ; Emoji                # E0.6   [1] (➰)       curly loop
+27BF          ; Emoji                # E1.0   [1] (➿)       double curly loop
+2934..2935    ; Emoji                # E0.6   [2] (⤴️..⤵️)    right arrow curving up..right arrow curving down
+2B05..2B07    ; Emoji                # E0.6   [3] (⬅️..⬇️)    left arrow..down arrow
+2B1B..2B1C    ; Emoji                # E0.6   [2] (⬛..⬜)    black large square..white large square
+2B50          ; Emoji                # E0.6   [1] (⭐)       star
+2B55          ; Emoji                # E0.6   [1] (⭕)       hollow red circle
+3030          ; Emoji                # E0.6   [1] (〰️)       wavy dash
+303D          ; Emoji                # E0.6   [1] (〽️)       part alternation mark
+3297          ; Emoji                # E0.6   [1] (㊗️)       Japanese “congratulations” button
+3299          ; Emoji                # E0.6   [1] (㊙️)       Japanese “secret” button
+1F004         ; Emoji                # E0.6   [1] (🀄)       mahjong red dragon
+1F0CF         ; Emoji                # E0.6   [1] (🃏)       joker
+1F170..1F171  ; Emoji                # E0.6   [2] (🅰️..🅱️)    A button (blood type)..B button (blood type)
+1F17E..1F17F  ; Emoji                # E0.6   [2] (🅾️..🅿️)    O button (blood type)..P button
+1F18E         ; Emoji                # E0.6   [1] (🆎)       AB button (blood type)
+1F191..1F19A  ; Emoji                # E0.6  [10] (🆑..🆚)    CL button..VS button
+1F1E6..1F1FF  ; Emoji                # E0.0  [26] (🇦..🇿)    regional indicator symbol letter a..regional indicator symbol letter z
+1F201..1F202  ; Emoji                # E0.6   [2] (🈁..🈂️)    Japanese “here” button..Japanese “service charge” button
+1F21A         ; Emoji                # E0.6   [1] (🈚)       Japanese “free of charge” button
+1F22F         ; Emoji                # E0.6   [1] (🈯)       Japanese “reserved” button
+1F232..1F23A  ; Emoji                # E0.6   [9] (🈲..🈺)    Japanese “prohibited” button..Japanese “open for business” button
+1F250..1F251  ; Emoji                # E0.6   [2] (🉐..🉑)    Japanese “bargain” button..Japanese “acceptable” button
+1F300..1F30C  ; Emoji                # E0.6  [13] (🌀..🌌)    cyclone..milky way
+1F30D..1F30E  ; Emoji                # E0.7   [2] (🌍..🌎)    globe showing Europe-Africa..globe showing Americas
+1F30F         ; Emoji                # E0.6   [1] (🌏)       globe showing Asia-Australia
+1F310         ; Emoji                # E1.0   [1] (🌐)       globe with meridians
+1F311         ; Emoji                # E0.6   [1] (🌑)       new moon
+1F312         ; Emoji                # E1.0   [1] (🌒)       waxing crescent moon
+1F313..1F315  ; Emoji                # E0.6   [3] (🌓..🌕)    first quarter moon..full moon
+1F316..1F318  ; Emoji                # E1.0   [3] (🌖..🌘)    waning gibbous moon..waning crescent moon
+1F319         ; Emoji                # E0.6   [1] (🌙)       crescent moon
+1F31A         ; Emoji                # E1.0   [1] (🌚)       new moon face
+1F31B         ; Emoji                # E0.6   [1] (🌛)       first quarter moon face
+1F31C         ; Emoji                # E0.7   [1] (🌜)       last quarter moon face
+1F31D..1F31E  ; Emoji                # E1.0   [2] (🌝..🌞)    full moon face..sun with face
+1F31F..1F320  ; Emoji                # E0.6   [2] (🌟..🌠)    glowing star..shooting star
+1F321         ; Emoji                # E0.7   [1] (🌡️)       thermometer
+1F324..1F32C  ; Emoji                # E0.7   [9] (🌤️..🌬️)    sun behind small cloud..wind face
+1F32D..1F32F  ; Emoji                # E1.0   [3] (🌭..🌯)    hot dog..burrito
+1F330..1F331  ; Emoji                # E0.6   [2] (🌰..🌱)    chestnut..seedling
+1F332..1F333  ; Emoji                # E1.0   [2] (🌲..🌳)    evergreen tree..deciduous tree
+1F334..1F335  ; Emoji                # E0.6   [2] (🌴..🌵)    palm tree..cactus
+1F336         ; Emoji                # E0.7   [1] (🌶️)       hot pepper
+1F337..1F34A  ; Emoji                # E0.6  [20] (🌷..🍊)    tulip..tangerine
+1F34B         ; Emoji                # E1.0   [1] (🍋)       lemon
+1F34C..1F34F  ; Emoji                # E0.6   [4] (🍌..🍏)    banana..green apple
+1F350         ; Emoji                # E1.0   [1] (🍐)       pear
+1F351..1F37B  ; Emoji                # E0.6  [43] (🍑..🍻)    peach..clinking beer mugs
+1F37C         ; Emoji                # E1.0   [1] (🍼)       baby bottle
+1F37D         ; Emoji                # E0.7   [1] (🍽️)       fork and knife with plate
+1F37E..1F37F  ; Emoji                # E1.0   [2] (🍾..🍿)    bottle with popping cork..popcorn
+1F380..1F393  ; Emoji                # E0.6  [20] (🎀..🎓)    ribbon..graduation cap
+1F396..1F397  ; Emoji                # E0.7   [2] (🎖️..🎗️)    military medal..reminder ribbon
+1F399..1F39B  ; Emoji                # E0.7   [3] (🎙️..🎛️)    studio microphone..control knobs
+1F39E..1F39F  ; Emoji                # E0.7   [2] (🎞️..🎟️)    film frames..admission tickets
+1F3A0..1F3C4  ; Emoji                # E0.6  [37] (🎠..🏄)    carousel horse..person surfing
+1F3C5         ; Emoji                # E1.0   [1] (🏅)       sports medal
+1F3C6         ; Emoji                # E0.6   [1] (🏆)       trophy
+1F3C7         ; Emoji                # E1.0   [1] (🏇)       horse racing
+1F3C8         ; Emoji                # E0.6   [1] (🏈)       american football
+1F3C9         ; Emoji                # E1.0   [1] (🏉)       rugby football
+1F3CA         ; Emoji                # E0.6   [1] (🏊)       person swimming
+1F3CB..1F3CE  ; Emoji                # E0.7   [4] (🏋️..🏎️)    person lifting weights..racing car
+1F3CF..1F3D3  ; Emoji                # E1.0   [5] (🏏..🏓)    cricket game..ping pong
+1F3D4..1F3DF  ; Emoji                # E0.7  [12] (🏔️..🏟️)    snow-capped mountain..stadium
+1F3E0..1F3E3  ; Emoji                # E0.6   [4] (🏠..🏣)    house..Japanese post office
+1F3E4         ; Emoji                # E1.0   [1] (🏤)       post office
+1F3E5..1F3F0  ; Emoji                # E0.6  [12] (🏥..🏰)    hospital..castle
+1F3F3         ; Emoji                # E0.7   [1] (🏳️)       white flag
+1F3F4         ; Emoji                # E1.0   [1] (🏴)       black flag
+1F3F5         ; Emoji                # E0.7   [1] (🏵️)       rosette
+1F3F7         ; Emoji                # E0.7   [1] (🏷️)       label
+1F3F8..1F407  ; Emoji                # E1.0  [16] (🏸..🐇)    badminton..rabbit
+1F408         ; Emoji                # E0.7   [1] (🐈)       cat
+1F409..1F40B  ; Emoji                # E1.0   [3] (🐉..🐋)    dragon..whale
+1F40C..1F40E  ; Emoji                # E0.6   [3] (🐌..🐎)    snail..horse
+1F40F..1F410  ; Emoji                # E1.0   [2] (🐏..🐐)    ram..goat
+1F411..1F412  ; Emoji                # E0.6   [2] (🐑..🐒)    ewe..monkey
+1F413         ; Emoji                # E1.0   [1] (🐓)       rooster
+1F414         ; Emoji                # E0.6   [1] (🐔)       chicken
+1F415         ; Emoji                # E0.7   [1] (🐕)       dog
+1F416         ; Emoji                # E1.0   [1] (🐖)       pig
+1F417..1F429  ; Emoji                # E0.6  [19] (🐗..🐩)    boar..poodle
+1F42A         ; Emoji                # E1.0   [1] (🐪)       camel
+1F42B..1F43E  ; Emoji                # E0.6  [20] (🐫..🐾)    two-hump camel..paw prints
+1F43F         ; Emoji                # E0.7   [1] (🐿️)       chipmunk
+1F440         ; Emoji                # E0.6   [1] (👀)       eyes
+1F441         ; Emoji                # E0.7   [1] (👁️)       eye
+1F442..1F464  ; Emoji                # E0.6  [35] (👂..👤)    ear..bust in silhouette
+1F465         ; Emoji                # E1.0   [1] (👥)       busts in silhouette
+1F466..1F46B  ; Emoji                # E0.6   [6] (👦..👫)    boy..woman and man holding hands
+1F46C..1F46D  ; Emoji                # E1.0   [2] (👬..👭)    men holding hands..women holding hands
+1F46E..1F4AC  ; Emoji                # E0.6  [63] (👮..💬)    police officer..speech balloon
+1F4AD         ; Emoji                # E1.0   [1] (💭)       thought balloon
+1F4AE..1F4B5  ; Emoji                # E0.6   [8] (💮..💵)    white flower..dollar banknote
+1F4B6..1F4B7  ; Emoji                # E1.0   [2] (💶..💷)    euro banknote..pound banknote
+1F4B8..1F4EB  ; Emoji                # E0.6  [52] (💸..📫)    money with wings..closed mailbox with raised flag
+1F4EC..1F4ED  ; Emoji                # E0.7   [2] (📬..📭)    open mailbox with raised flag..open mailbox with lowered flag
+1F4EE         ; Emoji                # E0.6   [1] (📮)       postbox
+1F4EF         ; Emoji                # E1.0   [1] (📯)       postal horn
+1F4F0..1F4F4  ; Emoji                # E0.6   [5] (📰..📴)    newspaper..mobile phone off
+1F4F5         ; Emoji                # E1.0   [1] (📵)       no mobile phones
+1F4F6..1F4F7  ; Emoji                # E0.6   [2] (📶..📷)    antenna bars..camera
+1F4F8         ; Emoji                # E1.0   [1] (📸)       camera with flash
+1F4F9..1F4FC  ; Emoji                # E0.6   [4] (📹..📼)    video camera..videocassette
+1F4FD         ; Emoji                # E0.7   [1] (📽️)       film projector
+1F4FF..1F502  ; Emoji                # E1.0   [4] (📿..🔂)    prayer beads..repeat single button
+1F503         ; Emoji                # E0.6   [1] (🔃)       clockwise vertical arrows
+1F504..1F507  ; Emoji                # E1.0   [4] (🔄..🔇)    counterclockwise arrows button..muted speaker
+1F508         ; Emoji                # E0.7   [1] (🔈)       speaker low volume
+1F509         ; Emoji                # E1.0   [1] (🔉)       speaker medium volume
+1F50A..1F514  ; Emoji                # E0.6  [11] (🔊..🔔)    speaker high volume..bell
+1F515         ; Emoji                # E1.0   [1] (🔕)       bell with slash
+1F516..1F52B  ; Emoji                # E0.6  [22] (🔖..🔫)    bookmark..pistol
+1F52C..1F52D  ; Emoji                # E1.0   [2] (🔬..🔭)    microscope..telescope
+1F52E..1F53D  ; Emoji                # E0.6  [16] (🔮..🔽)    crystal ball..downwards button
+1F549..1F54A  ; Emoji                # E0.7   [2] (🕉️..🕊️)    om..dove
+1F54B..1F54E  ; Emoji                # E1.0   [4] (🕋..🕎)    kaaba..menorah
+1F550..1F55B  ; Emoji                # E0.6  [12] (🕐..🕛)    one o’clock..twelve o’clock
+1F55C..1F567  ; Emoji                # E0.7  [12] (🕜..🕧)    one-thirty..twelve-thirty
+1F56F..1F570  ; Emoji                # E0.7   [2] (🕯️..🕰️)    candle..mantelpiece clock
+1F573..1F579  ; Emoji                # E0.7   [7] (🕳️..🕹️)    hole..joystick
+1F57A         ; Emoji                # E3.0   [1] (🕺)       man dancing
+1F587         ; Emoji                # E0.7   [1] (🖇️)       linked paperclips
+1F58A..1F58D  ; Emoji                # E0.7   [4] (🖊️..🖍️)    pen..crayon
+1F590         ; Emoji                # E0.7   [1] (🖐️)       hand with fingers splayed
+1F595..1F596  ; Emoji                # E1.0   [2] (🖕..🖖)    middle finger..vulcan salute
+1F5A4         ; Emoji                # E3.0   [1] (🖤)       black heart
+1F5A5         ; Emoji                # E0.7   [1] (🖥️)       desktop computer
+1F5A8         ; Emoji                # E0.7   [1] (🖨️)       printer
+1F5B1..1F5B2  ; Emoji                # E0.7   [2] (🖱️..🖲️)    computer mouse..trackball
+1F5BC         ; Emoji                # E0.7   [1] (🖼️)       framed picture
+1F5C2..1F5C4  ; Emoji                # E0.7   [3] (🗂️..🗄️)    card index dividers..file cabinet
+1F5D1..1F5D3  ; Emoji                # E0.7   [3] (🗑️..🗓️)    wastebasket..spiral calendar
+1F5DC..1F5DE  ; Emoji                # E0.7   [3] (🗜️..🗞️)    clamp..rolled-up newspaper
+1F5E1         ; Emoji                # E0.7   [1] (🗡️)       dagger
+1F5E3         ; Emoji                # E0.7   [1] (🗣️)       speaking head
+1F5E8         ; Emoji                # E2.0   [1] (🗨️)       left speech bubble
+1F5EF         ; Emoji                # E0.7   [1] (🗯️)       right anger bubble
+1F5F3         ; Emoji                # E0.7   [1] (🗳️)       ballot box with ballot
+1F5FA         ; Emoji                # E0.7   [1] (🗺️)       world map
+1F5FB..1F5FF  ; Emoji                # E0.6   [5] (🗻..🗿)    mount fuji..moai
+1F600         ; Emoji                # E1.0   [1] (😀)       grinning face
+1F601..1F606  ; Emoji                # E0.6   [6] (😁..😆)    beaming face with smiling eyes..grinning squinting face
+1F607..1F608  ; Emoji                # E1.0   [2] (😇..😈)    smiling face with halo..smiling face with horns
+1F609..1F60D  ; Emoji                # E0.6   [5] (😉..😍)    winking face..smiling face with heart-eyes
+1F60E         ; Emoji                # E1.0   [1] (😎)       smiling face with sunglasses
+1F60F         ; Emoji                # E0.6   [1] (😏)       smirking face
+1F610         ; Emoji                # E0.7   [1] (😐)       neutral face
+1F611         ; Emoji                # E1.0   [1] (😑)       expressionless face
+1F612..1F614  ; Emoji                # E0.6   [3] (😒..😔)    unamused face..pensive face
+1F615         ; Emoji                # E1.0   [1] (😕)       confused face
+1F616         ; Emoji                # E0.6   [1] (😖)       confounded face
+1F617         ; Emoji                # E1.0   [1] (😗)       kissing face
+1F618         ; Emoji                # E0.6   [1] (😘)       face blowing a kiss
+1F619         ; Emoji                # E1.0   [1] (😙)       kissing face with smiling eyes
+1F61A         ; Emoji                # E0.6   [1] (😚)       kissing face with closed eyes
+1F61B         ; Emoji                # E1.0   [1] (😛)       face with tongue
+1F61C..1F61E  ; Emoji                # E0.6   [3] (😜..😞)    winking face with tongue..disappointed face
+1F61F         ; Emoji                # E1.0   [1] (😟)       worried face
+1F620..1F625  ; Emoji                # E0.6   [6] (😠..😥)    angry face..sad but relieved face
+1F626..1F627  ; Emoji                # E1.0   [2] (😦..😧)    frowning face with open mouth..anguished face
+1F628..1F62B  ; Emoji                # E0.6   [4] (😨..😫)    fearful face..tired face
+1F62C         ; Emoji                # E1.0   [1] (😬)       grimacing face
+1F62D         ; Emoji                # E0.6   [1] (😭)       loudly crying face
+1F62E..1F62F  ; Emoji                # E1.0   [2] (😮..😯)    face with open mouth..hushed face
+1F630..1F633  ; Emoji                # E0.6   [4] (😰..😳)    anxious face with sweat..flushed face
+1F634         ; Emoji                # E1.0   [1] (😴)       sleeping face
+1F635         ; Emoji                # E0.6   [1] (😵)       dizzy face
+1F636         ; Emoji                # E1.0   [1] (😶)       face without mouth
+1F637..1F640  ; Emoji                # E0.6  [10] (😷..🙀)    face with medical mask..weary cat
+1F641..1F644  ; Emoji                # E1.0   [4] (🙁..🙄)    slightly frowning face..face with rolling eyes
+1F645..1F64F  ; Emoji                # E0.6  [11] (🙅..🙏)    person gesturing NO..folded hands
+1F680         ; Emoji                # E0.6   [1] (🚀)       rocket
+1F681..1F682  ; Emoji                # E1.0   [2] (🚁..🚂)    helicopter..locomotive
+1F683..1F685  ; Emoji                # E0.6   [3] (🚃..🚅)    railway car..bullet train
+1F686         ; Emoji                # E1.0   [1] (🚆)       train
+1F687         ; Emoji                # E0.6   [1] (🚇)       metro
+1F688         ; Emoji                # E1.0   [1] (🚈)       light rail
+1F689         ; Emoji                # E0.6   [1] (🚉)       station
+1F68A..1F68B  ; Emoji                # E1.0   [2] (🚊..🚋)    tram..tram car
+1F68C         ; Emoji                # E0.6   [1] (🚌)       bus
+1F68D         ; Emoji                # E0.7   [1] (🚍)       oncoming bus
+1F68E         ; Emoji                # E1.0   [1] (🚎)       trolleybus
+1F68F         ; Emoji                # E0.6   [1] (🚏)       bus stop
+1F690         ; Emoji                # E1.0   [1] (🚐)       minibus
+1F691..1F693  ; Emoji                # E0.6   [3] (🚑..🚓)    ambulance..police car
+1F694         ; Emoji                # E0.7   [1] (🚔)       oncoming police car
+1F695         ; Emoji                # E0.6   [1] (🚕)       taxi
+1F696         ; Emoji                # E1.0   [1] (🚖)       oncoming taxi
+1F697         ; Emoji                # E0.6   [1] (🚗)       automobile
+1F698         ; Emoji                # E0.7   [1] (🚘)       oncoming automobile
+1F699..1F69A  ; Emoji                # E0.6   [2] (🚙..🚚)    sport utility vehicle..delivery truck
+1F69B..1F6A1  ; Emoji                # E1.0   [7] (🚛..🚡)    articulated lorry..aerial tramway
+1F6A2         ; Emoji                # E0.6   [1] (🚢)       ship
+1F6A3         ; Emoji                # E1.0   [1] (🚣)       person rowing boat
+1F6A4..1F6A5  ; Emoji                # E0.6   [2] (🚤..🚥)    speedboat..horizontal traffic light
+1F6A6         ; Emoji                # E1.0   [1] (🚦)       vertical traffic light
+1F6A7..1F6AD  ; Emoji                # E0.6   [7] (🚧..🚭)    construction..no smoking
+1F6AE..1F6B1  ; Emoji                # E1.0   [4] (🚮..🚱)    litter in bin sign..non-potable water
+1F6B2         ; Emoji                # E0.6   [1] (🚲)       bicycle
+1F6B3..1F6B5  ; Emoji                # E1.0   [3] (🚳..🚵)    no bicycles..person mountain biking
+1F6B6         ; Emoji                # E0.6   [1] (🚶)       person walking
+1F6B7..1F6B8  ; Emoji                # E1.0   [2] (🚷..🚸)    no pedestrians..children crossing
+1F6B9..1F6BE  ; Emoji                # E0.6   [6] (🚹..🚾)    men’s room..water closet
+1F6BF         ; Emoji                # E1.0   [1] (🚿)       shower
+1F6C0         ; Emoji                # E0.6   [1] (🛀)       person taking bath
+1F6C1..1F6C5  ; Emoji                # E1.0   [5] (🛁..🛅)    bathtub..left luggage
+1F6CB         ; Emoji                # E0.7   [1] (🛋️)       couch and lamp
+1F6CC         ; Emoji                # E1.0   [1] (🛌)       person in bed
+1F6CD..1F6CF  ; Emoji                # E0.7   [3] (🛍️..🛏️)    shopping bags..bed
+1F6D0         ; Emoji                # E1.0   [1] (🛐)       place of worship
+1F6D1..1F6D2  ; Emoji                # E3.0   [2] (🛑..🛒)    stop sign..shopping cart
+1F6D5         ; Emoji                # E12.0  [1] (🛕)       hindu temple
+1F6D6..1F6D7  ; Emoji                # E13.0  [2] (🛖..🛗)    hut..elevator
+1F6E0..1F6E5  ; Emoji                # E0.7   [6] (🛠️..🛥️)    hammer and wrench..motor boat
+1F6E9         ; Emoji                # E0.7   [1] (🛩️)       small airplane
+1F6EB..1F6EC  ; Emoji                # E1.0   [2] (🛫..🛬)    airplane departure..airplane arrival
+1F6F0         ; Emoji                # E0.7   [1] (🛰️)       satellite
+1F6F3         ; Emoji                # E0.7   [1] (🛳️)       passenger ship
+1F6F4..1F6F6  ; Emoji                # E3.0   [3] (🛴..🛶)    kick scooter..canoe
+1F6F7..1F6F8  ; Emoji                # E5.0   [2] (🛷..🛸)    sled..flying saucer
+1F6F9         ; Emoji                # E11.0  [1] (🛹)       skateboard
+1F6FA         ; Emoji                # E12.0  [1] (🛺)       auto rickshaw
+1F6FB..1F6FC  ; Emoji                # E13.0  [2] (🛻..🛼)    pickup truck..roller skate
+1F7E0..1F7EB  ; Emoji                # E12.0 [12] (🟠..🟫)    orange circle..brown square
+1F90C         ; Emoji                # E13.0  [1] (🤌)       pinched fingers
+1F90D..1F90F  ; Emoji                # E12.0  [3] (🤍..🤏)    white heart..pinching hand
+1F910..1F918  ; Emoji                # E1.0   [9] (🤐..🤘)    zipper-mouth face..sign of the horns
+1F919..1F91E  ; Emoji                # E3.0   [6] (🤙..🤞)    call me hand..crossed fingers
+1F91F         ; Emoji                # E5.0   [1] (🤟)       love-you gesture
+1F920..1F927  ; Emoji                # E3.0   [8] (🤠..🤧)    cowboy hat face..sneezing face
+1F928..1F92F  ; Emoji                # E5.0   [8] (🤨..🤯)    face with raised eyebrow..exploding head
+1F930         ; Emoji                # E3.0   [1] (🤰)       pregnant woman
+1F931..1F932  ; Emoji                # E5.0   [2] (🤱..🤲)    breast-feeding..palms up together
+1F933..1F93A  ; Emoji                # E3.0   [8] (🤳..🤺)    selfie..person fencing
+1F93C..1F93E  ; Emoji                # E3.0   [3] (🤼..🤾)    people wrestling..person playing handball
+1F93F         ; Emoji                # E12.0  [1] (🤿)       diving mask
+1F940..1F945  ; Emoji                # E3.0   [6] (🥀..🥅)    wilted flower..goal net
+1F947..1F94B  ; Emoji                # E3.0   [5] (🥇..🥋)    1st place medal..martial arts uniform
+1F94C         ; Emoji                # E5.0   [1] (🥌)       curling stone
+1F94D..1F94F  ; Emoji                # E11.0  [3] (🥍..🥏)    lacrosse..flying disc
+1F950..1F95E  ; Emoji                # E3.0  [15] (🥐..🥞)    croissant..pancakes
+1F95F..1F96B  ; Emoji                # E5.0  [13] (🥟..🥫)    dumpling..canned food
+1F96C..1F970  ; Emoji                # E11.0  [5] (🥬..🥰)    leafy green..smiling face with hearts
+1F971         ; Emoji                # E12.0  [1] (🥱)       yawning face
+1F972         ; Emoji                # E13.0  [1] (🥲)       smiling face with tear
+1F973..1F976  ; Emoji                # E11.0  [4] (🥳..🥶)    partying face..cold face
+1F977..1F978  ; Emoji                # E13.0  [2] (🥷..🥸)    ninja..disguised face
+1F97A         ; Emoji                # E11.0  [1] (🥺)       pleading face
+1F97B         ; Emoji                # E12.0  [1] (🥻)       sari
+1F97C..1F97F  ; Emoji                # E11.0  [4] (🥼..🥿)    lab coat..flat shoe
+1F980..1F984  ; Emoji                # E1.0   [5] (🦀..🦄)    crab..unicorn
+1F985..1F991  ; Emoji                # E3.0  [13] (🦅..🦑)    eagle..squid
+1F992..1F997  ; Emoji                # E5.0   [6] (🦒..🦗)    giraffe..cricket
+1F998..1F9A2  ; Emoji                # E11.0 [11] (🦘..🦢)    kangaroo..swan
+1F9A3..1F9A4  ; Emoji                # E13.0  [2] (🦣..🦤)    mammoth..dodo
+1F9A5..1F9AA  ; Emoji                # E12.0  [6] (🦥..🦪)    sloth..oyster
+1F9AB..1F9AD  ; Emoji                # E13.0  [3] (🦫..🦭)    beaver..seal
+1F9AE..1F9AF  ; Emoji                # E12.0  [2] (🦮..🦯)    guide dog..white cane
+1F9B0..1F9B9  ; Emoji                # E11.0 [10] (🦰..🦹)    red hair..supervillain
+1F9BA..1F9BF  ; Emoji                # E12.0  [6] (🦺..🦿)    safety vest..mechanical leg
+1F9C0         ; Emoji                # E1.0   [1] (🧀)       cheese wedge
+1F9C1..1F9C2  ; Emoji                # E11.0  [2] (🧁..🧂)    cupcake..salt
+1F9C3..1F9CA  ; Emoji                # E12.0  [8] (🧃..🧊)    beverage box..ice
+1F9CB         ; Emoji                # E13.0  [1] (🧋)       bubble tea
+1F9CD..1F9CF  ; Emoji                # E12.0  [3] (🧍..🧏)    person standing..deaf person
+1F9D0..1F9E6  ; Emoji                # E5.0  [23] (🧐..🧦)    face with monocle..socks
+1F9E7..1F9FF  ; Emoji                # E11.0 [25] (🧧..🧿)    red envelope..nazar amulet
+1FA70..1FA73  ; Emoji                # E12.0  [4] (🩰..🩳)    ballet shoes..shorts
+1FA74         ; Emoji                # E13.0  [1] (🩴)       thong sandal
+1FA78..1FA7A  ; Emoji                # E12.0  [3] (🩸..🩺)    drop of blood..stethoscope
+1FA80..1FA82  ; Emoji                # E12.0  [3] (🪀..🪂)    yo-yo..parachute
+1FA83..1FA86  ; Emoji                # E13.0  [4] (🪃..🪆)    boomerang..nesting dolls
+1FA90..1FA95  ; Emoji                # E12.0  [6] (🪐..🪕)    ringed planet..banjo
+1FA96..1FAA8  ; Emoji                # E13.0 [19] (🪖..🪨)    military helmet..rock
+1FAB0..1FAB6  ; Emoji                # E13.0  [7] (🪰..🪶)    fly..feather
+1FAC0..1FAC2  ; Emoji                # E13.0  [3] (🫀..🫂)    anatomical heart..people hugging
+1FAD0..1FAD6  ; Emoji                # E13.0  [7] (🫐..🫖)    blueberries..teapot
+
+# Total elements: 1367
+
+# ================================================
+
+# All omitted code points have Emoji_Presentation=No
+# @missing: 0000..10FFFF  ; Emoji_Presentation ; No
+
+231A..231B    ; Emoji_Presentation   # E0.6   [2] (⌚..⌛)    watch..hourglass done
+23E9..23EC    ; Emoji_Presentation   # E0.6   [4] (⏩..⏬)    fast-forward button..fast down button
+23F0          ; Emoji_Presentation   # E0.6   [1] (⏰)       alarm clock
+23F3          ; Emoji_Presentation   # E0.6   [1] (⏳)       hourglass not done
+25FD..25FE    ; Emoji_Presentation   # E0.6   [2] (◽..◾)    white medium-small square..black medium-small square
+2614..2615    ; Emoji_Presentation   # E0.6   [2] (☔..☕)    umbrella with rain drops..hot beverage
+2648..2653    ; Emoji_Presentation   # E0.6  [12] (♈..♓)    Aries..Pisces
+267F          ; Emoji_Presentation   # E0.6   [1] (♿)       wheelchair symbol
+2693          ; Emoji_Presentation   # E0.6   [1] (⚓)       anchor
+26A1          ; Emoji_Presentation   # E0.6   [1] (⚡)       high voltage
+26AA..26AB    ; Emoji_Presentation   # E0.6   [2] (⚪..⚫)    white circle..black circle
+26BD..26BE    ; Emoji_Presentation   # E0.6   [2] (⚽..⚾)    soccer ball..baseball
+26C4..26C5    ; Emoji_Presentation   # E0.6   [2] (⛄..⛅)    snowman without snow..sun behind cloud
+26CE          ; Emoji_Presentation   # E0.6   [1] (⛎)       Ophiuchus
+26D4          ; Emoji_Presentation   # E0.6   [1] (⛔)       no entry
+26EA          ; Emoji_Presentation   # E0.6   [1] (⛪)       church
+26F2..26F3    ; Emoji_Presentation   # E0.6   [2] (⛲..⛳)    fountain..flag in hole
+26F5          ; Emoji_Presentation   # E0.6   [1] (⛵)       sailboat
+26FA          ; Emoji_Presentation   # E0.6   [1] (⛺)       tent
+26FD          ; Emoji_Presentation   # E0.6   [1] (⛽)       fuel pump
+2705          ; Emoji_Presentation   # E0.6   [1] (✅)       check mark button
+270A..270B    ; Emoji_Presentation   # E0.6   [2] (✊..✋)    raised fist..raised hand
+2728          ; Emoji_Presentation   # E0.6   [1] (✨)       sparkles
+274C          ; Emoji_Presentation   # E0.6   [1] (❌)       cross mark
+274E          ; Emoji_Presentation   # E0.6   [1] (❎)       cross mark button
+2753..2755    ; Emoji_Presentation   # E0.6   [3] (❓..❕)    question mark..white exclamation mark
+2757          ; Emoji_Presentation   # E0.6   [1] (❗)       exclamation mark
+2795..2797    ; Emoji_Presentation   # E0.6   [3] (➕..➗)    plus..divide
+27B0          ; Emoji_Presentation   # E0.6   [1] (➰)       curly loop
+27BF          ; Emoji_Presentation   # E1.0   [1] (➿)       double curly loop
+2B1B..2B1C    ; Emoji_Presentation   # E0.6   [2] (⬛..⬜)    black large square..white large square
+2B50          ; Emoji_Presentation   # E0.6   [1] (⭐)       star
+2B55          ; Emoji_Presentation   # E0.6   [1] (⭕)       hollow red circle
+1F004         ; Emoji_Presentation   # E0.6   [1] (🀄)       mahjong red dragon
+1F0CF         ; Emoji_Presentation   # E0.6   [1] (🃏)       joker
+1F18E         ; Emoji_Presentation   # E0.6   [1] (🆎)       AB button (blood type)
+1F191..1F19A  ; Emoji_Presentation   # E0.6  [10] (🆑..🆚)    CL button..VS button
+1F1E6..1F1FF  ; Emoji_Presentation   # E0.0  [26] (🇦..🇿)    regional indicator symbol letter a..regional indicator symbol letter z
+1F201         ; Emoji_Presentation   # E0.6   [1] (🈁)       Japanese “here” button
+1F21A         ; Emoji_Presentation   # E0.6   [1] (🈚)       Japanese “free of charge” button
+1F22F         ; Emoji_Presentation   # E0.6   [1] (🈯)       Japanese “reserved” button
+1F232..1F236  ; Emoji_Presentation   # E0.6   [5] (🈲..🈶)    Japanese “prohibited” button..Japanese “not free of charge” button
+1F238..1F23A  ; Emoji_Presentation   # E0.6   [3] (🈸..🈺)    Japanese “application” button..Japanese “open for business” button
+1F250..1F251  ; Emoji_Presentation   # E0.6   [2] (🉐..🉑)    Japanese “bargain” button..Japanese “acceptable” button
+1F300..1F30C  ; Emoji_Presentation   # E0.6  [13] (🌀..🌌)    cyclone..milky way
+1F30D..1F30E  ; Emoji_Presentation   # E0.7   [2] (🌍..🌎)    globe showing Europe-Africa..globe showing Americas
+1F30F         ; Emoji_Presentation   # E0.6   [1] (🌏)       globe showing Asia-Australia
+1F310         ; Emoji_Presentation   # E1.0   [1] (🌐)       globe with meridians
+1F311         ; Emoji_Presentation   # E0.6   [1] (🌑)       new moon
+1F312         ; Emoji_Presentation   # E1.0   [1] (🌒)       waxing crescent moon
+1F313..1F315  ; Emoji_Presentation   # E0.6   [3] (🌓..🌕)    first quarter moon..full moon
+1F316..1F318  ; Emoji_Presentation   # E1.0   [3] (🌖..🌘)    waning gibbous moon..waning crescent moon
+1F319         ; Emoji_Presentation   # E0.6   [1] (🌙)       crescent moon
+1F31A         ; Emoji_Presentation   # E1.0   [1] (🌚)       new moon face
+1F31B         ; Emoji_Presentation   # E0.6   [1] (🌛)       first quarter moon face
+1F31C         ; Emoji_Presentation   # E0.7   [1] (🌜)       last quarter moon face
+1F31D..1F31E  ; Emoji_Presentation   # E1.0   [2] (🌝..🌞)    full moon face..sun with face
+1F31F..1F320  ; Emoji_Presentation   # E0.6   [2] (🌟..🌠)    glowing star..shooting star
+1F32D..1F32F  ; Emoji_Presentation   # E1.0   [3] (🌭..🌯)    hot dog..burrito
+1F330..1F331  ; Emoji_Presentation   # E0.6   [2] (🌰..🌱)    chestnut..seedling
+1F332..1F333  ; Emoji_Presentation   # E1.0   [2] (🌲..🌳)    evergreen tree..deciduous tree
+1F334..1F335  ; Emoji_Presentation   # E0.6   [2] (🌴..🌵)    palm tree..cactus
+1F337..1F34A  ; Emoji_Presentation   # E0.6  [20] (🌷..🍊)    tulip..tangerine
+1F34B         ; Emoji_Presentation   # E1.0   [1] (🍋)       lemon
+1F34C..1F34F  ; Emoji_Presentation   # E0.6   [4] (🍌..🍏)    banana..green apple
+1F350         ; Emoji_Presentation   # E1.0   [1] (🍐)       pear
+1F351..1F37B  ; Emoji_Presentation   # E0.6  [43] (🍑..🍻)    peach..clinking beer mugs
+1F37C         ; Emoji_Presentation   # E1.0   [1] (🍼)       baby bottle
+1F37E..1F37F  ; Emoji_Presentation   # E1.0   [2] (🍾..🍿)    bottle with popping cork..popcorn
+1F380..1F393  ; Emoji_Presentation   # E0.6  [20] (🎀..🎓)    ribbon..graduation cap
+1F3A0..1F3C4  ; Emoji_Presentation   # E0.6  [37] (🎠..🏄)    carousel horse..person surfing
+1F3C5         ; Emoji_Presentation   # E1.0   [1] (🏅)       sports medal
+1F3C6         ; Emoji_Presentation   # E0.6   [1] (🏆)       trophy
+1F3C7         ; Emoji_Presentation   # E1.0   [1] (🏇)       horse racing
+1F3C8         ; Emoji_Presentation   # E0.6   [1] (🏈)       american football
+1F3C9         ; Emoji_Presentation   # E1.0   [1] (🏉)       rugby football
+1F3CA         ; Emoji_Presentation   # E0.6   [1] (🏊)       person swimming
+1F3CF..1F3D3  ; Emoji_Presentation   # E1.0   [5] (🏏..🏓)    cricket game..ping pong
+1F3E0..1F3E3  ; Emoji_Presentation   # E0.6   [4] (🏠..🏣)    house..Japanese post office
+1F3E4         ; Emoji_Presentation   # E1.0   [1] (🏤)       post office
+1F3E5..1F3F0  ; Emoji_Presentation   # E0.6  [12] (🏥..🏰)    hospital..castle
+1F3F4         ; Emoji_Presentation   # E1.0   [1] (🏴)       black flag
+1F3F8..1F407  ; Emoji_Presentation   # E1.0  [16] (🏸..🐇)    badminton..rabbit
+1F408         ; Emoji_Presentation   # E0.7   [1] (🐈)       cat
+1F409..1F40B  ; Emoji_Presentation   # E1.0   [3] (🐉..🐋)    dragon..whale
+1F40C..1F40E  ; Emoji_Presentation   # E0.6   [3] (🐌..🐎)    snail..horse
+1F40F..1F410  ; Emoji_Presentation   # E1.0   [2] (🐏..🐐)    ram..goat
+1F411..1F412  ; Emoji_Presentation   # E0.6   [2] (🐑..🐒)    ewe..monkey
+1F413         ; Emoji_Presentation   # E1.0   [1] (🐓)       rooster
+1F414         ; Emoji_Presentation   # E0.6   [1] (🐔)       chicken
+1F415         ; Emoji_Presentation   # E0.7   [1] (🐕)       dog
+1F416         ; Emoji_Presentation   # E1.0   [1] (🐖)       pig
+1F417..1F429  ; Emoji_Presentation   # E0.6  [19] (🐗..🐩)    boar..poodle
+1F42A         ; Emoji_Presentation   # E1.0   [1] (🐪)       camel
+1F42B..1F43E  ; Emoji_Presentation   # E0.6  [20] (🐫..🐾)    two-hump camel..paw prints
+1F440         ; Emoji_Presentation   # E0.6   [1] (👀)       eyes
+1F442..1F464  ; Emoji_Presentation   # E0.6  [35] (👂..👤)    ear..bust in silhouette
+1F465         ; Emoji_Presentation   # E1.0   [1] (👥)       busts in silhouette
+1F466..1F46B  ; Emoji_Presentation   # E0.6   [6] (👦..👫)    boy..woman and man holding hands
+1F46C..1F46D  ; Emoji_Presentation   # E1.0   [2] (👬..👭)    men holding hands..women holding hands
+1F46E..1F4AC  ; Emoji_Presentation   # E0.6  [63] (👮..💬)    police officer..speech balloon
+1F4AD         ; Emoji_Presentation   # E1.0   [1] (💭)       thought balloon
+1F4AE..1F4B5  ; Emoji_Presentation   # E0.6   [8] (💮..💵)    white flower..dollar banknote
+1F4B6..1F4B7  ; Emoji_Presentation   # E1.0   [2] (💶..💷)    euro banknote..pound banknote
+1F4B8..1F4EB  ; Emoji_Presentation   # E0.6  [52] (💸..📫)    money with wings..closed mailbox with raised flag
+1F4EC..1F4ED  ; Emoji_Presentation   # E0.7   [2] (📬..📭)    open mailbox with raised flag..open mailbox with lowered flag
+1F4EE         ; Emoji_Presentation   # E0.6   [1] (📮)       postbox
+1F4EF         ; Emoji_Presentation   # E1.0   [1] (📯)       postal horn
+1F4F0..1F4F4  ; Emoji_Presentation   # E0.6   [5] (📰..📴)    newspaper..mobile phone off
+1F4F5         ; Emoji_Presentation   # E1.0   [1] (📵)       no mobile phones
+1F4F6..1F4F7  ; Emoji_Presentation   # E0.6   [2] (📶..📷)    antenna bars..camera
+1F4F8         ; Emoji_Presentation   # E1.0   [1] (📸)       camera with flash
+1F4F9..1F4FC  ; Emoji_Presentation   # E0.6   [4] (📹..📼)    video camera..videocassette
+1F4FF..1F502  ; Emoji_Presentation   # E1.0   [4] (📿..🔂)    prayer beads..repeat single button
+1F503         ; Emoji_Presentation   # E0.6   [1] (🔃)       clockwise vertical arrows
+1F504..1F507  ; Emoji_Presentation   # E1.0   [4] (🔄..🔇)    counterclockwise arrows button..muted speaker
+1F508         ; Emoji_Presentation   # E0.7   [1] (🔈)       speaker low volume
+1F509         ; Emoji_Presentation   # E1.0   [1] (🔉)       speaker medium volume
+1F50A..1F514  ; Emoji_Presentation   # E0.6  [11] (🔊..🔔)    speaker high volume..bell
+1F515         ; Emoji_Presentation   # E1.0   [1] (🔕)       bell with slash
+1F516..1F52B  ; Emoji_Presentation   # E0.6  [22] (🔖..🔫)    bookmark..pistol
+1F52C..1F52D  ; Emoji_Presentation   # E1.0   [2] (🔬..🔭)    microscope..telescope
+1F52E..1F53D  ; Emoji_Presentation   # E0.6  [16] (🔮..🔽)    crystal ball..downwards button
+1F54B..1F54E  ; Emoji_Presentation   # E1.0   [4] (🕋..🕎)    kaaba..menorah
+1F550..1F55B  ; Emoji_Presentation   # E0.6  [12] (🕐..🕛)    one o’clock..twelve o’clock
+1F55C..1F567  ; Emoji_Presentation   # E0.7  [12] (🕜..🕧)    one-thirty..twelve-thirty
+1F57A         ; Emoji_Presentation   # E3.0   [1] (🕺)       man dancing
+1F595..1F596  ; Emoji_Presentation   # E1.0   [2] (🖕..🖖)    middle finger..vulcan salute
+1F5A4         ; Emoji_Presentation   # E3.0   [1] (🖤)       black heart
+1F5FB..1F5FF  ; Emoji_Presentation   # E0.6   [5] (🗻..🗿)    mount fuji..moai
+1F600         ; Emoji_Presentation   # E1.0   [1] (😀)       grinning face
+1F601..1F606  ; Emoji_Presentation   # E0.6   [6] (😁..😆)    beaming face with smiling eyes..grinning squinting face
+1F607..1F608  ; Emoji_Presentation   # E1.0   [2] (😇..😈)    smiling face with halo..smiling face with horns
+1F609..1F60D  ; Emoji_Presentation   # E0.6   [5] (😉..😍)    winking face..smiling face with heart-eyes
+1F60E         ; Emoji_Presentation   # E1.0   [1] (😎)       smiling face with sunglasses
+1F60F         ; Emoji_Presentation   # E0.6   [1] (😏)       smirking face
+1F610         ; Emoji_Presentation   # E0.7   [1] (😐)       neutral face
+1F611         ; Emoji_Presentation   # E1.0   [1] (😑)       expressionless face
+1F612..1F614  ; Emoji_Presentation   # E0.6   [3] (😒..😔)    unamused face..pensive face
+1F615         ; Emoji_Presentation   # E1.0   [1] (😕)       confused face
+1F616         ; Emoji_Presentation   # E0.6   [1] (😖)       confounded face
+1F617         ; Emoji_Presentation   # E1.0   [1] (😗)       kissing face
+1F618         ; Emoji_Presentation   # E0.6   [1] (😘)       face blowing a kiss
+1F619         ; Emoji_Presentation   # E1.0   [1] (😙)       kissing face with smiling eyes
+1F61A         ; Emoji_Presentation   # E0.6   [1] (😚)       kissing face with closed eyes
+1F61B         ; Emoji_Presentation   # E1.0   [1] (😛)       face with tongue
+1F61C..1F61E  ; Emoji_Presentation   # E0.6   [3] (😜..😞)    winking face with tongue..disappointed face
+1F61F         ; Emoji_Presentation   # E1.0   [1] (😟)       worried face
+1F620..1F625  ; Emoji_Presentation   # E0.6   [6] (😠..😥)    angry face..sad but relieved face
+1F626..1F627  ; Emoji_Presentation   # E1.0   [2] (😦..😧)    frowning face with open mouth..anguished face
+1F628..1F62B  ; Emoji_Presentation   # E0.6   [4] (😨..😫)    fearful face..tired face
+1F62C         ; Emoji_Presentation   # E1.0   [1] (😬)       grimacing face
+1F62D         ; Emoji_Presentation   # E0.6   [1] (😭)       loudly crying face
+1F62E..1F62F  ; Emoji_Presentation   # E1.0   [2] (😮..😯)    face with open mouth..hushed face
+1F630..1F633  ; Emoji_Presentation   # E0.6   [4] (😰..😳)    anxious face with sweat..flushed face
+1F634         ; Emoji_Presentation   # E1.0   [1] (😴)       sleeping face
+1F635         ; Emoji_Presentation   # E0.6   [1] (😵)       dizzy face
+1F636         ; Emoji_Presentation   # E1.0   [1] (😶)       face without mouth
+1F637..1F640  ; Emoji_Presentation   # E0.6  [10] (😷..🙀)    face with medical mask..weary cat
+1F641..1F644  ; Emoji_Presentation   # E1.0   [4] (🙁..🙄)    slightly frowning face..face with rolling eyes
+1F645..1F64F  ; Emoji_Presentation   # E0.6  [11] (🙅..🙏)    person gesturing NO..folded hands
+1F680         ; Emoji_Presentation   # E0.6   [1] (🚀)       rocket
+1F681..1F682  ; Emoji_Presentation   # E1.0   [2] (🚁..🚂)    helicopter..locomotive
+1F683..1F685  ; Emoji_Presentation   # E0.6   [3] (🚃..🚅)    railway car..bullet train
+1F686         ; Emoji_Presentation   # E1.0   [1] (🚆)       train
+1F687         ; Emoji_Presentation   # E0.6   [1] (🚇)       metro
+1F688         ; Emoji_Presentation   # E1.0   [1] (🚈)       light rail
+1F689         ; Emoji_Presentation   # E0.6   [1] (🚉)       station
+1F68A..1F68B  ; Emoji_Presentation   # E1.0   [2] (🚊..🚋)    tram..tram car
+1F68C         ; Emoji_Presentation   # E0.6   [1] (🚌)       bus
+1F68D         ; Emoji_Presentation   # E0.7   [1] (🚍)       oncoming bus
+1F68E         ; Emoji_Presentation   # E1.0   [1] (🚎)       trolleybus
+1F68F         ; Emoji_Presentation   # E0.6   [1] (🚏)       bus stop
+1F690         ; Emoji_Presentation   # E1.0   [1] (🚐)       minibus
+1F691..1F693  ; Emoji_Presentation   # E0.6   [3] (🚑..🚓)    ambulance..police car
+1F694         ; Emoji_Presentation   # E0.7   [1] (🚔)       oncoming police car
+1F695         ; Emoji_Presentation   # E0.6   [1] (🚕)       taxi
+1F696         ; Emoji_Presentation   # E1.0   [1] (🚖)       oncoming taxi
+1F697         ; Emoji_Presentation   # E0.6   [1] (🚗)       automobile
+1F698         ; Emoji_Presentation   # E0.7   [1] (🚘)       oncoming automobile
+1F699..1F69A  ; Emoji_Presentation   # E0.6   [2] (🚙..🚚)    sport utility vehicle..delivery truck
+1F69B..1F6A1  ; Emoji_Presentation   # E1.0   [7] (🚛..🚡)    articulated lorry..aerial tramway
+1F6A2         ; Emoji_Presentation   # E0.6   [1] (🚢)       ship
+1F6A3         ; Emoji_Presentation   # E1.0   [1] (🚣)       person rowing boat
+1F6A4..1F6A5  ; Emoji_Presentation   # E0.6   [2] (🚤..🚥)    speedboat..horizontal traffic light
+1F6A6         ; Emoji_Presentation   # E1.0   [1] (🚦)       vertical traffic light
+1F6A7..1F6AD  ; Emoji_Presentation   # E0.6   [7] (🚧..🚭)    construction..no smoking
+1F6AE..1F6B1  ; Emoji_Presentation   # E1.0   [4] (🚮..🚱)    litter in bin sign..non-potable water
+1F6B2         ; Emoji_Presentation   # E0.6   [1] (🚲)       bicycle
+1F6B3..1F6B5  ; Emoji_Presentation   # E1.0   [3] (🚳..🚵)    no bicycles..person mountain biking
+1F6B6         ; Emoji_Presentation   # E0.6   [1] (🚶)       person walking
+1F6B7..1F6B8  ; Emoji_Presentation   # E1.0   [2] (🚷..🚸)    no pedestrians..children crossing
+1F6B9..1F6BE  ; Emoji_Presentation   # E0.6   [6] (🚹..🚾)    men’s room..water closet
+1F6BF         ; Emoji_Presentation   # E1.0   [1] (🚿)       shower
+1F6C0         ; Emoji_Presentation   # E0.6   [1] (🛀)       person taking bath
+1F6C1..1F6C5  ; Emoji_Presentation   # E1.0   [5] (🛁..🛅)    bathtub..left luggage
+1F6CC         ; Emoji_Presentation   # E1.0   [1] (🛌)       person in bed
+1F6D0         ; Emoji_Presentation   # E1.0   [1] (🛐)       place of worship
+1F6D1..1F6D2  ; Emoji_Presentation   # E3.0   [2] (🛑..🛒)    stop sign..shopping cart
+1F6D5         ; Emoji_Presentation   # E12.0  [1] (🛕)       hindu temple
+1F6D6..1F6D7  ; Emoji_Presentation   # E13.0  [2] (🛖..🛗)    hut..elevator
+1F6EB..1F6EC  ; Emoji_Presentation   # E1.0   [2] (🛫..🛬)    airplane departure..airplane arrival
+1F6F4..1F6F6  ; Emoji_Presentation   # E3.0   [3] (🛴..🛶)    kick scooter..canoe
+1F6F7..1F6F8  ; Emoji_Presentation   # E5.0   [2] (🛷..🛸)    sled..flying saucer
+1F6F9         ; Emoji_Presentation   # E11.0  [1] (🛹)       skateboard
+1F6FA         ; Emoji_Presentation   # E12.0  [1] (🛺)       auto rickshaw
+1F6FB..1F6FC  ; Emoji_Presentation   # E13.0  [2] (🛻..🛼)    pickup truck..roller skate
+1F7E0..1F7EB  ; Emoji_Presentation   # E12.0 [12] (🟠..🟫)    orange circle..brown square
+1F90C         ; Emoji_Presentation   # E13.0  [1] (🤌)       pinched fingers
+1F90D..1F90F  ; Emoji_Presentation   # E12.0  [3] (🤍..🤏)    white heart..pinching hand
+1F910..1F918  ; Emoji_Presentation   # E1.0   [9] (🤐..🤘)    zipper-mouth face..sign of the horns
+1F919..1F91E  ; Emoji_Presentation   # E3.0   [6] (🤙..🤞)    call me hand..crossed fingers
+1F91F         ; Emoji_Presentation   # E5.0   [1] (🤟)       love-you gesture
+1F920..1F927  ; Emoji_Presentation   # E3.0   [8] (🤠..🤧)    cowboy hat face..sneezing face
+1F928..1F92F  ; Emoji_Presentation   # E5.0   [8] (🤨..🤯)    face with raised eyebrow..exploding head
+1F930         ; Emoji_Presentation   # E3.0   [1] (🤰)       pregnant woman
+1F931..1F932  ; Emoji_Presentation   # E5.0   [2] (🤱..🤲)    breast-feeding..palms up together
+1F933..1F93A  ; Emoji_Presentation   # E3.0   [8] (🤳..🤺)    selfie..person fencing
+1F93C..1F93E  ; Emoji_Presentation   # E3.0   [3] (🤼..🤾)    people wrestling..person playing handball
+1F93F         ; Emoji_Presentation   # E12.0  [1] (🤿)       diving mask
+1F940..1F945  ; Emoji_Presentation   # E3.0   [6] (🥀..🥅)    wilted flower..goal net
+1F947..1F94B  ; Emoji_Presentation   # E3.0   [5] (🥇..🥋)    1st place medal..martial arts uniform
+1F94C         ; Emoji_Presentation   # E5.0   [1] (🥌)       curling stone
+1F94D..1F94F  ; Emoji_Presentation   # E11.0  [3] (🥍..🥏)    lacrosse..flying disc
+1F950..1F95E  ; Emoji_Presentation   # E3.0  [15] (🥐..🥞)    croissant..pancakes
+1F95F..1F96B  ; Emoji_Presentation   # E5.0  [13] (🥟..🥫)    dumpling..canned food
+1F96C..1F970  ; Emoji_Presentation   # E11.0  [5] (🥬..🥰)    leafy green..smiling face with hearts
+1F971         ; Emoji_Presentation   # E12.0  [1] (🥱)       yawning face
+1F972         ; Emoji_Presentation   # E13.0  [1] (🥲)       smiling face with tear
+1F973..1F976  ; Emoji_Presentation   # E11.0  [4] (🥳..🥶)    partying face..cold face
+1F977..1F978  ; Emoji_Presentation   # E13.0  [2] (🥷..🥸)    ninja..disguised face
+1F97A         ; Emoji_Presentation   # E11.0  [1] (🥺)       pleading face
+1F97B         ; Emoji_Presentation   # E12.0  [1] (🥻)       sari
+1F97C..1F97F  ; Emoji_Presentation   # E11.0  [4] (🥼..🥿)    lab coat..flat shoe
+1F980..1F984  ; Emoji_Presentation   # E1.0   [5] (🦀..🦄)    crab..unicorn
+1F985..1F991  ; Emoji_Presentation   # E3.0  [13] (🦅..🦑)    eagle..squid
+1F992..1F997  ; Emoji_Presentation   # E5.0   [6] (🦒..🦗)    giraffe..cricket
+1F998..1F9A2  ; Emoji_Presentation   # E11.0 [11] (🦘..🦢)    kangaroo..swan
+1F9A3..1F9A4  ; Emoji_Presentation   # E13.0  [2] (🦣..🦤)    mammoth..dodo
+1F9A5..1F9AA  ; Emoji_Presentation   # E12.0  [6] (🦥..🦪)    sloth..oyster
+1F9AB..1F9AD  ; Emoji_Presentation   # E13.0  [3] (🦫..🦭)    beaver..seal
+1F9AE..1F9AF  ; Emoji_Presentation   # E12.0  [2] (🦮..🦯)    guide dog..white cane
+1F9B0..1F9B9  ; Emoji_Presentation   # E11.0 [10] (🦰..🦹)    red hair..supervillain
+1F9BA..1F9BF  ; Emoji_Presentation   # E12.0  [6] (🦺..🦿)    safety vest..mechanical leg
+1F9C0         ; Emoji_Presentation   # E1.0   [1] (🧀)       cheese wedge
+1F9C1..1F9C2  ; Emoji_Presentation   # E11.0  [2] (🧁..🧂)    cupcake..salt
+1F9C3..1F9CA  ; Emoji_Presentation   # E12.0  [8] (🧃..🧊)    beverage box..ice
+1F9CB         ; Emoji_Presentation   # E13.0  [1] (🧋)       bubble tea
+1F9CD..1F9CF  ; Emoji_Presentation   # E12.0  [3] (🧍..🧏)    person standing..deaf person
+1F9D0..1F9E6  ; Emoji_Presentation   # E5.0  [23] (🧐..🧦)    face with monocle..socks
+1F9E7..1F9FF  ; Emoji_Presentation   # E11.0 [25] (🧧..🧿)    red envelope..nazar amulet
+1FA70..1FA73  ; Emoji_Presentation   # E12.0  [4] (🩰..🩳)    ballet shoes..shorts
+1FA74         ; Emoji_Presentation   # E13.0  [1] (🩴)       thong sandal
+1FA78..1FA7A  ; Emoji_Presentation   # E12.0  [3] (🩸..🩺)    drop of blood..stethoscope
+1FA80..1FA82  ; Emoji_Presentation   # E12.0  [3] (🪀..🪂)    yo-yo..parachute
+1FA83..1FA86  ; Emoji_Presentation   # E13.0  [4] (🪃..🪆)    boomerang..nesting dolls
+1FA90..1FA95  ; Emoji_Presentation   # E12.0  [6] (🪐..🪕)    ringed planet..banjo
+1FA96..1FAA8  ; Emoji_Presentation   # E13.0 [19] (🪖..🪨)    military helmet..rock
+1FAB0..1FAB6  ; Emoji_Presentation   # E13.0  [7] (🪰..🪶)    fly..feather
+1FAC0..1FAC2  ; Emoji_Presentation   # E13.0  [3] (🫀..🫂)    anatomical heart..people hugging
+1FAD0..1FAD6  ; Emoji_Presentation   # E13.0  [7] (🫐..🫖)    blueberries..teapot
+
+# Total elements: 1148
+
+# ================================================
+
+# All omitted code points have Emoji_Modifier=No
+# @missing: 0000..10FFFF  ; Emoji_Modifier ; No
+
+1F3FB..1F3FF  ; Emoji_Modifier       # E1.0   [5] (🏻..🏿)    light skin tone..dark skin tone
+
+# Total elements: 5
+
+# ================================================
+
+# All omitted code points have Emoji_Modifier_Base=No
+# @missing: 0000..10FFFF  ; Emoji_Modifier_Base ; No
+
+261D          ; Emoji_Modifier_Base  # E0.6   [1] (☝️)       index pointing up
+26F9          ; Emoji_Modifier_Base  # E0.7   [1] (⛹️)       person bouncing ball
+270A..270C    ; Emoji_Modifier_Base  # E0.6   [3] (✊..✌️)    raised fist..victory hand
+270D          ; Emoji_Modifier_Base  # E0.7   [1] (✍️)       writing hand
+1F385         ; Emoji_Modifier_Base  # E0.6   [1] (🎅)       Santa Claus
+1F3C2..1F3C4  ; Emoji_Modifier_Base  # E0.6   [3] (🏂..🏄)    snowboarder..person surfing
+1F3C7         ; Emoji_Modifier_Base  # E1.0   [1] (🏇)       horse racing
+1F3CA         ; Emoji_Modifier_Base  # E0.6   [1] (🏊)       person swimming
+1F3CB..1F3CC  ; Emoji_Modifier_Base  # E0.7   [2] (🏋️..🏌️)    person lifting weights..person golfing
+1F442..1F443  ; Emoji_Modifier_Base  # E0.6   [2] (👂..👃)    ear..nose
+1F446..1F450  ; Emoji_Modifier_Base  # E0.6  [11] (👆..👐)    backhand index pointing up..open hands
+1F466..1F46B  ; Emoji_Modifier_Base  # E0.6   [6] (👦..👫)    boy..woman and man holding hands
+1F46C..1F46D  ; Emoji_Modifier_Base  # E1.0   [2] (👬..👭)    men holding hands..women holding hands
+1F46E..1F478  ; Emoji_Modifier_Base  # E0.6  [11] (👮..👸)    police officer..princess
+1F47C         ; Emoji_Modifier_Base  # E0.6   [1] (👼)       baby angel
+1F481..1F483  ; Emoji_Modifier_Base  # E0.6   [3] (💁..💃)    person tipping hand..woman dancing
+1F485..1F487  ; Emoji_Modifier_Base  # E0.6   [3] (💅..💇)    nail polish..person getting haircut
+1F48F         ; Emoji_Modifier_Base  # E0.6   [1] (💏)       kiss
+1F491         ; Emoji_Modifier_Base  # E0.6   [1] (💑)       couple with heart
+1F4AA         ; Emoji_Modifier_Base  # E0.6   [1] (💪)       flexed biceps
+1F574..1F575  ; Emoji_Modifier_Base  # E0.7   [2] (🕴️..🕵️)    person in suit levitating..detective
+1F57A         ; Emoji_Modifier_Base  # E3.0   [1] (🕺)       man dancing
+1F590         ; Emoji_Modifier_Base  # E0.7   [1] (🖐️)       hand with fingers splayed
+1F595..1F596  ; Emoji_Modifier_Base  # E1.0   [2] (🖕..🖖)    middle finger..vulcan salute
+1F645..1F647  ; Emoji_Modifier_Base  # E0.6   [3] (🙅..🙇)    person gesturing NO..person bowing
+1F64B..1F64F  ; Emoji_Modifier_Base  # E0.6   [5] (🙋..🙏)    person raising hand..folded hands
+1F6A3         ; Emoji_Modifier_Base  # E1.0   [1] (🚣)       person rowing boat
+1F6B4..1F6B5  ; Emoji_Modifier_Base  # E1.0   [2] (🚴..🚵)    person biking..person mountain biking
+1F6B6         ; Emoji_Modifier_Base  # E0.6   [1] (🚶)       person walking
+1F6C0         ; Emoji_Modifier_Base  # E0.6   [1] (🛀)       person taking bath
+1F6CC         ; Emoji_Modifier_Base  # E1.0   [1] (🛌)       person in bed
+1F90C         ; Emoji_Modifier_Base  # E13.0  [1] (🤌)       pinched fingers
+1F90F         ; Emoji_Modifier_Base  # E12.0  [1] (🤏)       pinching hand
+1F918         ; Emoji_Modifier_Base  # E1.0   [1] (🤘)       sign of the horns
+1F919..1F91E  ; Emoji_Modifier_Base  # E3.0   [6] (🤙..🤞)    call me hand..crossed fingers
+1F91F         ; Emoji_Modifier_Base  # E5.0   [1] (🤟)       love-you gesture
+1F926         ; Emoji_Modifier_Base  # E3.0   [1] (🤦)       person facepalming
+1F930         ; Emoji_Modifier_Base  # E3.0   [1] (🤰)       pregnant woman
+1F931..1F932  ; Emoji_Modifier_Base  # E5.0   [2] (🤱..🤲)    breast-feeding..palms up together
+1F933..1F939  ; Emoji_Modifier_Base  # E3.0   [7] (🤳..🤹)    selfie..person juggling
+1F93C..1F93E  ; Emoji_Modifier_Base  # E3.0   [3] (🤼..🤾)    people wrestling..person playing handball
+1F977         ; Emoji_Modifier_Base  # E13.0  [1] (🥷)       ninja
+1F9B5..1F9B6  ; Emoji_Modifier_Base  # E11.0  [2] (🦵..🦶)    leg..foot
+1F9B8..1F9B9  ; Emoji_Modifier_Base  # E11.0  [2] (🦸..🦹)    superhero..supervillain
+1F9BB         ; Emoji_Modifier_Base  # E12.0  [1] (🦻)       ear with hearing aid
+1F9CD..1F9CF  ; Emoji_Modifier_Base  # E12.0  [3] (🧍..🧏)    person standing..deaf person
+1F9D1..1F9DD  ; Emoji_Modifier_Base  # E5.0  [13] (🧑..🧝)    person..elf
+
+# Total elements: 122
+
+# ================================================
+
+# All omitted code points have Emoji_Component=No
+# @missing: 0000..10FFFF  ; Emoji_Component ; No
+
+0023          ; Emoji_Component      # E0.0   [1] (#️)       number sign
+002A          ; Emoji_Component      # E0.0   [1] (*️)       asterisk
+0030..0039    ; Emoji_Component      # E0.0  [10] (0️..9️)    digit zero..digit nine
+200D          ; Emoji_Component      # E0.0   [1] (‍)        zero width joiner
+20E3          ; Emoji_Component      # E0.0   [1] (⃣)       combining enclosing keycap
+FE0F          ; Emoji_Component      # E0.0   [1] ()        VARIATION SELECTOR-16
+1F1E6..1F1FF  ; Emoji_Component      # E0.0  [26] (🇦..🇿)    regional indicator symbol letter a..regional indicator symbol letter z
+1F3FB..1F3FF  ; Emoji_Component      # E1.0   [5] (🏻..🏿)    light skin tone..dark skin tone
+1F9B0..1F9B3  ; Emoji_Component      # E11.0  [4] (🦰..🦳)    red hair..white hair
+E0020..E007F  ; Emoji_Component      # E0.0  [96] (󠀠..󠁿)      tag space..cancel tag
+
+# Total elements: 146
+
+# ================================================
+
+# All omitted code points have Extended_Pictographic=No
+# @missing: 0000..10FFFF  ; Extended_Pictographic ; No
+
+00A9          ; Extended_Pictographic# E0.6   [1] (©️)       copyright
+00AE          ; Extended_Pictographic# E0.6   [1] (®️)       registered
+203C          ; Extended_Pictographic# E0.6   [1] (‼️)       double exclamation mark
+2049          ; Extended_Pictographic# E0.6   [1] (⁉️)       exclamation question mark
+2122          ; Extended_Pictographic# E0.6   [1] (™️)       trade mark
+2139          ; Extended_Pictographic# E0.6   [1] (ℹ️)       information
+2194..2199    ; Extended_Pictographic# E0.6   [6] (↔️..↙️)    left-right arrow..down-left arrow
+21A9..21AA    ; Extended_Pictographic# E0.6   [2] (↩️..↪️)    right arrow curving left..left arrow curving right
+231A..231B    ; Extended_Pictographic# E0.6   [2] (⌚..⌛)    watch..hourglass done
+2328          ; Extended_Pictographic# E1.0   [1] (⌨️)       keyboard
+2388          ; Extended_Pictographic# E0.0   [1] (⎈)       HELM SYMBOL
+23CF          ; Extended_Pictographic# E1.0   [1] (⏏️)       eject button
+23E9..23EC    ; Extended_Pictographic# E0.6   [4] (⏩..⏬)    fast-forward button..fast down button
+23ED..23EE    ; Extended_Pictographic# E0.7   [2] (⏭️..⏮️)    next track button..last track button
+23EF          ; Extended_Pictographic# E1.0   [1] (⏯️)       play or pause button
+23F0          ; Extended_Pictographic# E0.6   [1] (⏰)       alarm clock
+23F1..23F2    ; Extended_Pictographic# E1.0   [2] (⏱️..⏲️)    stopwatch..timer clock
+23F3          ; Extended_Pictographic# E0.6   [1] (⏳)       hourglass not done
+23F8..23FA    ; Extended_Pictographic# E0.7   [3] (⏸️..⏺️)    pause button..record button
+24C2          ; Extended_Pictographic# E0.6   [1] (Ⓜ️)       circled M
+25AA..25AB    ; Extended_Pictographic# E0.6   [2] (▪️..▫️)    black small square..white small square
+25B6          ; Extended_Pictographic# E0.6   [1] (▶️)       play button
+25C0          ; Extended_Pictographic# E0.6   [1] (◀️)       reverse button
+25FB..25FE    ; Extended_Pictographic# E0.6   [4] (◻️..◾)    white medium square..black medium-small square
+2600..2601    ; Extended_Pictographic# E0.6   [2] (☀️..☁️)    sun..cloud
+2602..2603    ; Extended_Pictographic# E0.7   [2] (☂️..☃️)    umbrella..snowman
+2604          ; Extended_Pictographic# E1.0   [1] (☄️)       comet
+2605          ; Extended_Pictographic# E0.0   [1] (★)       BLACK STAR
+2607..260D    ; Extended_Pictographic# E0.0   [7] (☇..☍)    LIGHTNING..OPPOSITION
+260E          ; Extended_Pictographic# E0.6   [1] (☎️)       telephone
+260F..2610    ; Extended_Pictographic# E0.0   [2] (☏..☐)    WHITE TELEPHONE..BALLOT BOX
+2611          ; Extended_Pictographic# E0.6   [1] (☑️)       check box with check
+2612          ; Extended_Pictographic# E0.0   [1] (☒)       BALLOT BOX WITH X
+2614..2615    ; Extended_Pictographic# E0.6   [2] (☔..☕)    umbrella with rain drops..hot beverage
+2616..2617    ; Extended_Pictographic# E0.0   [2] (☖..☗)    WHITE SHOGI PIECE..BLACK SHOGI PIECE
+2618          ; Extended_Pictographic# E1.0   [1] (☘️)       shamrock
+2619..261C    ; Extended_Pictographic# E0.0   [4] (☙..☜)    REVERSED ROTATED FLORAL HEART BULLET..WHITE LEFT POINTING INDEX
+261D          ; Extended_Pictographic# E0.6   [1] (☝️)       index pointing up
+261E..261F    ; Extended_Pictographic# E0.0   [2] (☞..☟)    WHITE RIGHT POINTING INDEX..WHITE DOWN POINTING INDEX
+2620          ; Extended_Pictographic# E1.0   [1] (☠️)       skull and crossbones
+2621          ; Extended_Pictographic# E0.0   [1] (☡)       CAUTION SIGN
+2622..2623    ; Extended_Pictographic# E1.0   [2] (☢️..☣️)    radioactive..biohazard
+2624..2625    ; Extended_Pictographic# E0.0   [2] (☤..☥)    CADUCEUS..ANKH
+2626          ; Extended_Pictographic# E1.0   [1] (☦️)       orthodox cross
+2627..2629    ; Extended_Pictographic# E0.0   [3] (☧..☩)    CHI RHO..CROSS OF JERUSALEM
+262A          ; Extended_Pictographic# E0.7   [1] (☪️)       star and crescent
+262B..262D    ; Extended_Pictographic# E0.0   [3] (☫..☭)    FARSI SYMBOL..HAMMER AND SICKLE
+262E          ; Extended_Pictographic# E1.0   [1] (☮️)       peace symbol
+262F          ; Extended_Pictographic# E0.7   [1] (☯️)       yin yang
+2630..2637    ; Extended_Pictographic# E0.0   [8] (☰..☷)    TRIGRAM FOR HEAVEN..TRIGRAM FOR EARTH
+2638..2639    ; Extended_Pictographic# E0.7   [2] (☸️..☹️)    wheel of dharma..frowning face
+263A          ; Extended_Pictographic# E0.6   [1] (☺️)       smiling face
+263B..263F    ; Extended_Pictographic# E0.0   [5] (☻..☿)    BLACK SMILING FACE..MERCURY
+2640          ; Extended_Pictographic# E4.0   [1] (♀️)       female sign
+2641          ; Extended_Pictographic# E0.0   [1] (♁)       EARTH
+2642          ; Extended_Pictographic# E4.0   [1] (♂️)       male sign
+2643..2647    ; Extended_Pictographic# E0.0   [5] (♃..♇)    JUPITER..PLUTO
+2648..2653    ; Extended_Pictographic# E0.6  [12] (♈..♓)    Aries..Pisces
+2654..265E    ; Extended_Pictographic# E0.0  [11] (♔..♞)    WHITE CHESS KING..BLACK CHESS KNIGHT
+265F          ; Extended_Pictographic# E11.0  [1] (♟️)       chess pawn
+2660          ; Extended_Pictographic# E0.6   [1] (♠️)       spade suit
+2661..2662    ; Extended_Pictographic# E0.0   [2] (♡..♢)    WHITE HEART SUIT..WHITE DIAMOND SUIT
+2663          ; Extended_Pictographic# E0.6   [1] (♣️)       club suit
+2664          ; Extended_Pictographic# E0.0   [1] (♤)       WHITE SPADE SUIT
+2665..2666    ; Extended_Pictographic# E0.6   [2] (♥️..♦️)    heart suit..diamond suit
+2667          ; Extended_Pictographic# E0.0   [1] (♧)       WHITE CLUB SUIT
+2668          ; Extended_Pictographic# E0.6   [1] (♨️)       hot springs
+2669..267A    ; Extended_Pictographic# E0.0  [18] (♩..♺)    QUARTER NOTE..RECYCLING SYMBOL FOR GENERIC MATERIALS
+267B          ; Extended_Pictographic# E0.6   [1] (♻️)       recycling symbol
+267C..267D    ; Extended_Pictographic# E0.0   [2] (♼..♽)    RECYCLED PAPER SYMBOL..PARTIALLY-RECYCLED PAPER SYMBOL
+267E          ; Extended_Pictographic# E11.0  [1] (♾️)       infinity
+267F          ; Extended_Pictographic# E0.6   [1] (♿)       wheelchair symbol
+2680..2685    ; Extended_Pictographic# E0.0   [6] (⚀..⚅)    DIE FACE-1..DIE FACE-6
+2690..2691    ; Extended_Pictographic# E0.0   [2] (⚐..⚑)    WHITE FLAG..BLACK FLAG
+2692          ; Extended_Pictographic# E1.0   [1] (⚒️)       hammer and pick
+2693          ; Extended_Pictographic# E0.6   [1] (⚓)       anchor
+2694          ; Extended_Pictographic# E1.0   [1] (⚔️)       crossed swords
+2695          ; Extended_Pictographic# E4.0   [1] (⚕️)       medical symbol
+2696..2697    ; Extended_Pictographic# E1.0   [2] (⚖️..⚗️)    balance scale..alembic
+2698          ; Extended_Pictographic# E0.0   [1] (⚘)       FLOWER
+2699          ; Extended_Pictographic# E1.0   [1] (⚙️)       gear
+269A          ; Extended_Pictographic# E0.0   [1] (⚚)       STAFF OF HERMES
+269B..269C    ; Extended_Pictographic# E1.0   [2] (⚛️..⚜️)    atom symbol..fleur-de-lis
+269D..269F    ; Extended_Pictographic# E0.0   [3] (⚝..⚟)    OUTLINED WHITE STAR..THREE LINES CONVERGING LEFT
+26A0..26A1    ; Extended_Pictographic# E0.6   [2] (⚠️..⚡)    warning..high voltage
+26A2..26A6    ; Extended_Pictographic# E0.0   [5] (⚢..⚦)    DOUBLED FEMALE SIGN..MALE WITH STROKE SIGN
+26A7          ; Extended_Pictographic# E13.0  [1] (⚧️)       transgender symbol
+26A8..26A9    ; Extended_Pictographic# E0.0   [2] (⚨..⚩)    VERTICAL MALE WITH STROKE SIGN..HORIZONTAL MALE WITH STROKE SIGN
+26AA..26AB    ; Extended_Pictographic# E0.6   [2] (⚪..⚫)    white circle..black circle
+26AC..26AF    ; Extended_Pictographic# E0.0   [4] (⚬..⚯)    MEDIUM SMALL WHITE CIRCLE..UNMARRIED PARTNERSHIP SYMBOL
+26B0..26B1    ; Extended_Pictographic# E1.0   [2] (⚰️..⚱️)    coffin..funeral urn
+26B2..26BC    ; Extended_Pictographic# E0.0  [11] (⚲..⚼)    NEUTER..SESQUIQUADRATE
+26BD..26BE    ; Extended_Pictographic# E0.6   [2] (⚽..⚾)    soccer ball..baseball
+26BF..26C3    ; Extended_Pictographic# E0.0   [5] (⚿..⛃)    SQUARED KEY..BLACK DRAUGHTS KING
+26C4..26C5    ; Extended_Pictographic# E0.6   [2] (⛄..⛅)    snowman without snow..sun behind cloud
+26C6..26C7    ; Extended_Pictographic# E0.0   [2] (⛆..⛇)    RAIN..BLACK SNOWMAN
+26C8          ; Extended_Pictographic# E0.7   [1] (⛈️)       cloud with lightning and rain
+26C9..26CD    ; Extended_Pictographic# E0.0   [5] (⛉..⛍)    TURNED WHITE SHOGI PIECE..DISABLED CAR
+26CE          ; Extended_Pictographic# E0.6   [1] (⛎)       Ophiuchus
+26CF          ; Extended_Pictographic# E0.7   [1] (⛏️)       pick
+26D0          ; Extended_Pictographic# E0.0   [1] (⛐)       CAR SLIDING
+26D1          ; Extended_Pictographic# E0.7   [1] (⛑️)       rescue worker’s helmet
+26D2          ; Extended_Pictographic# E0.0   [1] (⛒)       CIRCLED CROSSING LANES
+26D3          ; Extended_Pictographic# E0.7   [1] (⛓️)       chains
+26D4          ; Extended_Pictographic# E0.6   [1] (⛔)       no entry
+26D5..26E8    ; Extended_Pictographic# E0.0  [20] (⛕..⛨)    ALTERNATE ONE-WAY LEFT WAY TRAFFIC..BLACK CROSS ON SHIELD
+26E9          ; Extended_Pictographic# E0.7   [1] (⛩️)       shinto shrine
+26EA          ; Extended_Pictographic# E0.6   [1] (⛪)       church
+26EB..26EF    ; Extended_Pictographic# E0.0   [5] (⛫..⛯)    CASTLE..MAP SYMBOL FOR LIGHTHOUSE
+26F0..26F1    ; Extended_Pictographic# E0.7   [2] (⛰️..⛱️)    mountain..umbrella on ground
+26F2..26F3    ; Extended_Pictographic# E0.6   [2] (⛲..⛳)    fountain..flag in hole
+26F4          ; Extended_Pictographic# E0.7   [1] (⛴️)       ferry
+26F5          ; Extended_Pictographic# E0.6   [1] (⛵)       sailboat
+26F6          ; Extended_Pictographic# E0.0   [1] (⛶)       SQUARE FOUR CORNERS
+26F7..26F9    ; Extended_Pictographic# E0.7   [3] (⛷️..⛹️)    skier..person bouncing ball
+26FA          ; Extended_Pictographic# E0.6   [1] (⛺)       tent
+26FB..26FC    ; Extended_Pictographic# E0.0   [2] (⛻..⛼)    JAPANESE BANK SYMBOL..HEADSTONE GRAVEYARD SYMBOL
+26FD          ; Extended_Pictographic# E0.6   [1] (⛽)       fuel pump
+26FE..2701    ; Extended_Pictographic# E0.0   [4] (⛾..✁)    CUP ON BLACK SQUARE..UPPER BLADE SCISSORS
+2702          ; Extended_Pictographic# E0.6   [1] (✂️)       scissors
+2703..2704    ; Extended_Pictographic# E0.0   [2] (✃..✄)    LOWER BLADE SCISSORS..WHITE SCISSORS
+2705          ; Extended_Pictographic# E0.6   [1] (✅)       check mark button
+2708..270C    ; Extended_Pictographic# E0.6   [5] (✈️..✌️)    airplane..victory hand
+270D          ; Extended_Pictographic# E0.7   [1] (✍️)       writing hand
+270E          ; Extended_Pictographic# E0.0   [1] (✎)       LOWER RIGHT PENCIL
+270F          ; Extended_Pictographic# E0.6   [1] (✏️)       pencil
+2710..2711    ; Extended_Pictographic# E0.0   [2] (✐..✑)    UPPER RIGHT PENCIL..WHITE NIB
+2712          ; Extended_Pictographic# E0.6   [1] (✒️)       black nib
+2714          ; Extended_Pictographic# E0.6   [1] (✔️)       check mark
+2716          ; Extended_Pictographic# E0.6   [1] (✖️)       multiply
+271D          ; Extended_Pictographic# E0.7   [1] (✝️)       latin cross
+2721          ; Extended_Pictographic# E0.7   [1] (✡️)       star of David
+2728          ; Extended_Pictographic# E0.6   [1] (✨)       sparkles
+2733..2734    ; Extended_Pictographic# E0.6   [2] (✳️..✴️)    eight-spoked asterisk..eight-pointed star
+2744          ; Extended_Pictographic# E0.6   [1] (❄️)       snowflake
+2747          ; Extended_Pictographic# E0.6   [1] (❇️)       sparkle
+274C          ; Extended_Pictographic# E0.6   [1] (❌)       cross mark
+274E          ; Extended_Pictographic# E0.6   [1] (❎)       cross mark button
+2753..2755    ; Extended_Pictographic# E0.6   [3] (❓..❕)    question mark..white exclamation mark
+2757          ; Extended_Pictographic# E0.6   [1] (❗)       exclamation mark
+2763          ; Extended_Pictographic# E1.0   [1] (❣️)       heart exclamation
+2764          ; Extended_Pictographic# E0.6   [1] (❤️)       red heart
+2765..2767    ; Extended_Pictographic# E0.0   [3] (❥..❧)    ROTATED HEAVY BLACK HEART BULLET..ROTATED FLORAL HEART BULLET
+2795..2797    ; Extended_Pictographic# E0.6   [3] (➕..➗)    plus..divide
+27A1          ; Extended_Pictographic# E0.6   [1] (➡️)       right arrow
+27B0          ; Extended_Pictographic# E0.6   [1] (➰)       curly loop
+27BF          ; Extended_Pictographic# E1.0   [1] (➿)       double curly loop
+2934..2935    ; Extended_Pictographic# E0.6   [2] (⤴️..⤵️)    right arrow curving up..right arrow curving down
+2B05..2B07    ; Extended_Pictographic# E0.6   [3] (⬅️..⬇️)    left arrow..down arrow
+2B1B..2B1C    ; Extended_Pictographic# E0.6   [2] (⬛..⬜)    black large square..white large square
+2B50          ; Extended_Pictographic# E0.6   [1] (⭐)       star
+2B55          ; Extended_Pictographic# E0.6   [1] (⭕)       hollow red circle
+3030          ; Extended_Pictographic# E0.6   [1] (〰️)       wavy dash
+303D          ; Extended_Pictographic# E0.6   [1] (〽️)       part alternation mark
+3297          ; Extended_Pictographic# E0.6   [1] (㊗️)       Japanese “congratulations” button
+3299          ; Extended_Pictographic# E0.6   [1] (㊙️)       Japanese “secret” button
+1F000..1F003  ; Extended_Pictographic# E0.0   [4] (🀀..🀃)    MAHJONG TILE EAST WIND..MAHJONG TILE NORTH WIND
+1F004         ; Extended_Pictographic# E0.6   [1] (🀄)       mahjong red dragon
+1F005..1F0CE  ; Extended_Pictographic# E0.0 [202] (🀅..🃎)    MAHJONG TILE GREEN DRAGON..PLAYING CARD KING OF DIAMONDS
+1F0CF         ; Extended_Pictographic# E0.6   [1] (🃏)       joker
+1F0D0..1F0FF  ; Extended_Pictographic# E0.0  [48] (🃐..🃿)    <reserved-1F0D0>..<reserved-1F0FF>
+1F10D..1F10F  ; Extended_Pictographic# E0.0   [3] (🄍..🄏)    CIRCLED ZERO WITH SLASH..CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH
+1F12F         ; Extended_Pictographic# E0.0   [1] (🄯)       COPYLEFT SYMBOL
+1F16C..1F16F  ; Extended_Pictographic# E0.0   [4] (🅬..🅯)    RAISED MR SIGN..CIRCLED HUMAN FIGURE
+1F170..1F171  ; Extended_Pictographic# E0.6   [2] (🅰️..🅱️)    A button (blood type)..B button (blood type)
+1F17E..1F17F  ; Extended_Pictographic# E0.6   [2] (🅾️..🅿️)    O button (blood type)..P button
+1F18E         ; Extended_Pictographic# E0.6   [1] (🆎)       AB button (blood type)
+1F191..1F19A  ; Extended_Pictographic# E0.6  [10] (🆑..🆚)    CL button..VS button
+1F1AD..1F1E5  ; Extended_Pictographic# E0.0  [57] (🆭..🇥)    MASK WORK SYMBOL..<reserved-1F1E5>
+1F201..1F202  ; Extended_Pictographic# E0.6   [2] (🈁..🈂️)    Japanese “here” button..Japanese “service charge” button
+1F203..1F20F  ; Extended_Pictographic# E0.0  [13] (🈃..🈏)    <reserved-1F203>..<reserved-1F20F>
+1F21A         ; Extended_Pictographic# E0.6   [1] (🈚)       Japanese “free of charge” button
+1F22F         ; Extended_Pictographic# E0.6   [1] (🈯)       Japanese “reserved” button
+1F232..1F23A  ; Extended_Pictographic# E0.6   [9] (🈲..🈺)    Japanese “prohibited” button..Japanese “open for business” button
+1F23C..1F23F  ; Extended_Pictographic# E0.0   [4] (🈼..🈿)    <reserved-1F23C>..<reserved-1F23F>
+1F249..1F24F  ; Extended_Pictographic# E0.0   [7] (🉉..🉏)    <reserved-1F249>..<reserved-1F24F>
+1F250..1F251  ; Extended_Pictographic# E0.6   [2] (🉐..🉑)    Japanese “bargain” button..Japanese “acceptable” button
+1F252..1F2FF  ; Extended_Pictographic# E0.0 [174] (🉒..🋿)    <reserved-1F252>..<reserved-1F2FF>
+1F300..1F30C  ; Extended_Pictographic# E0.6  [13] (🌀..🌌)    cyclone..milky way
+1F30D..1F30E  ; Extended_Pictographic# E0.7   [2] (🌍..🌎)    globe showing Europe-Africa..globe showing Americas
+1F30F         ; Extended_Pictographic# E0.6   [1] (🌏)       globe showing Asia-Australia
+1F310         ; Extended_Pictographic# E1.0   [1] (🌐)       globe with meridians
+1F311         ; Extended_Pictographic# E0.6   [1] (🌑)       new moon
+1F312         ; Extended_Pictographic# E1.0   [1] (🌒)       waxing crescent moon
+1F313..1F315  ; Extended_Pictographic# E0.6   [3] (🌓..🌕)    first quarter moon..full moon
+1F316..1F318  ; Extended_Pictographic# E1.0   [3] (🌖..🌘)    waning gibbous moon..waning crescent moon
+1F319         ; Extended_Pictographic# E0.6   [1] (🌙)       crescent moon
+1F31A         ; Extended_Pictographic# E1.0   [1] (🌚)       new moon face
+1F31B         ; Extended_Pictographic# E0.6   [1] (🌛)       first quarter moon face
+1F31C         ; Extended_Pictographic# E0.7   [1] (🌜)       last quarter moon face
+1F31D..1F31E  ; Extended_Pictographic# E1.0   [2] (🌝..🌞)    full moon face..sun with face
+1F31F..1F320  ; Extended_Pictographic# E0.6   [2] (🌟..🌠)    glowing star..shooting star
+1F321         ; Extended_Pictographic# E0.7   [1] (🌡️)       thermometer
+1F322..1F323  ; Extended_Pictographic# E0.0   [2] (🌢..🌣)    BLACK DROPLET..WHITE SUN
+1F324..1F32C  ; Extended_Pictographic# E0.7   [9] (🌤️..🌬️)    sun behind small cloud..wind face
+1F32D..1F32F  ; Extended_Pictographic# E1.0   [3] (🌭..🌯)    hot dog..burrito
+1F330..1F331  ; Extended_Pictographic# E0.6   [2] (🌰..🌱)    chestnut..seedling
+1F332..1F333  ; Extended_Pictographic# E1.0   [2] (🌲..🌳)    evergreen tree..deciduous tree
+1F334..1F335  ; Extended_Pictographic# E0.6   [2] (🌴..🌵)    palm tree..cactus
+1F336         ; Extended_Pictographic# E0.7   [1] (🌶️)       hot pepper
+1F337..1F34A  ; Extended_Pictographic# E0.6  [20] (🌷..🍊)    tulip..tangerine
+1F34B         ; Extended_Pictographic# E1.0   [1] (🍋)       lemon
+1F34C..1F34F  ; Extended_Pictographic# E0.6   [4] (🍌..🍏)    banana..green apple
+1F350         ; Extended_Pictographic# E1.0   [1] (🍐)       pear
+1F351..1F37B  ; Extended_Pictographic# E0.6  [43] (🍑..🍻)    peach..clinking beer mugs
+1F37C         ; Extended_Pictographic# E1.0   [1] (🍼)       baby bottle
+1F37D         ; Extended_Pictographic# E0.7   [1] (🍽️)       fork and knife with plate
+1F37E..1F37F  ; Extended_Pictographic# E1.0   [2] (🍾..🍿)    bottle with popping cork..popcorn
+1F380..1F393  ; Extended_Pictographic# E0.6  [20] (🎀..🎓)    ribbon..graduation cap
+1F394..1F395  ; Extended_Pictographic# E0.0   [2] (🎔..🎕)    HEART WITH TIP ON THE LEFT..BOUQUET OF FLOWERS
+1F396..1F397  ; Extended_Pictographic# E0.7   [2] (🎖️..🎗️)    military medal..reminder ribbon
+1F398         ; Extended_Pictographic# E0.0   [1] (🎘)       MUSICAL KEYBOARD WITH JACKS
+1F399..1F39B  ; Extended_Pictographic# E0.7   [3] (🎙️..🎛️)    studio microphone..control knobs
+1F39C..1F39D  ; Extended_Pictographic# E0.0   [2] (🎜..🎝)    BEAMED ASCENDING MUSICAL NOTES..BEAMED DESCENDING MUSICAL NOTES
+1F39E..1F39F  ; Extended_Pictographic# E0.7   [2] (🎞️..🎟️)    film frames..admission tickets
+1F3A0..1F3C4  ; Extended_Pictographic# E0.6  [37] (🎠..🏄)    carousel horse..person surfing
+1F3C5         ; Extended_Pictographic# E1.0   [1] (🏅)       sports medal
+1F3C6         ; Extended_Pictographic# E0.6   [1] (🏆)       trophy
+1F3C7         ; Extended_Pictographic# E1.0   [1] (🏇)       horse racing
+1F3C8         ; Extended_Pictographic# E0.6   [1] (🏈)       american football
+1F3C9         ; Extended_Pictographic# E1.0   [1] (🏉)       rugby football
+1F3CA         ; Extended_Pictographic# E0.6   [1] (🏊)       person swimming
+1F3CB..1F3CE  ; Extended_Pictographic# E0.7   [4] (🏋️..🏎️)    person lifting weights..racing car
+1F3CF..1F3D3  ; Extended_Pictographic# E1.0   [5] (🏏..🏓)    cricket game..ping pong
+1F3D4..1F3DF  ; Extended_Pictographic# E0.7  [12] (🏔️..🏟️)    snow-capped mountain..stadium
+1F3E0..1F3E3  ; Extended_Pictographic# E0.6   [4] (🏠..🏣)    house..Japanese post office
+1F3E4         ; Extended_Pictographic# E1.0   [1] (🏤)       post office
+1F3E5..1F3F0  ; Extended_Pictographic# E0.6  [12] (🏥..🏰)    hospital..castle
+1F3F1..1F3F2  ; Extended_Pictographic# E0.0   [2] (🏱..🏲)    WHITE PENNANT..BLACK PENNANT
+1F3F3         ; Extended_Pictographic# E0.7   [1] (🏳️)       white flag
+1F3F4         ; Extended_Pictographic# E1.0   [1] (🏴)       black flag
+1F3F5         ; Extended_Pictographic# E0.7   [1] (🏵️)       rosette
+1F3F6         ; Extended_Pictographic# E0.0   [1] (🏶)       BLACK ROSETTE
+1F3F7         ; Extended_Pictographic# E0.7   [1] (🏷️)       label
+1F3F8..1F3FA  ; Extended_Pictographic# E1.0   [3] (🏸..🏺)    badminton..amphora
+1F400..1F407  ; Extended_Pictographic# E1.0   [8] (🐀..🐇)    rat..rabbit
+1F408         ; Extended_Pictographic# E0.7   [1] (🐈)       cat
+1F409..1F40B  ; Extended_Pictographic# E1.0   [3] (🐉..🐋)    dragon..whale
+1F40C..1F40E  ; Extended_Pictographic# E0.6   [3] (🐌..🐎)    snail..horse
+1F40F..1F410  ; Extended_Pictographic# E1.0   [2] (🐏..🐐)    ram..goat
+1F411..1F412  ; Extended_Pictographic# E0.6   [2] (🐑..🐒)    ewe..monkey
+1F413         ; Extended_Pictographic# E1.0   [1] (🐓)       rooster
+1F414         ; Extended_Pictographic# E0.6   [1] (🐔)       chicken
+1F415         ; Extended_Pictographic# E0.7   [1] (🐕)       dog
+1F416         ; Extended_Pictographic# E1.0   [1] (🐖)       pig
+1F417..1F429  ; Extended_Pictographic# E0.6  [19] (🐗..🐩)    boar..poodle
+1F42A         ; Extended_Pictographic# E1.0   [1] (🐪)       camel
+1F42B..1F43E  ; Extended_Pictographic# E0.6  [20] (🐫..🐾)    two-hump camel..paw prints
+1F43F         ; Extended_Pictographic# E0.7   [1] (🐿️)       chipmunk
+1F440         ; Extended_Pictographic# E0.6   [1] (👀)       eyes
+1F441         ; Extended_Pictographic# E0.7   [1] (👁️)       eye
+1F442..1F464  ; Extended_Pictographic# E0.6  [35] (👂..👤)    ear..bust in silhouette
+1F465         ; Extended_Pictographic# E1.0   [1] (👥)       busts in silhouette
+1F466..1F46B  ; Extended_Pictographic# E0.6   [6] (👦..👫)    boy..woman and man holding hands
+1F46C..1F46D  ; Extended_Pictographic# E1.0   [2] (👬..👭)    men holding hands..women holding hands
+1F46E..1F4AC  ; Extended_Pictographic# E0.6  [63] (👮..💬)    police officer..speech balloon
+1F4AD         ; Extended_Pictographic# E1.0   [1] (💭)       thought balloon
+1F4AE..1F4B5  ; Extended_Pictographic# E0.6   [8] (💮..💵)    white flower..dollar banknote
+1F4B6..1F4B7  ; Extended_Pictographic# E1.0   [2] (💶..💷)    euro banknote..pound banknote
+1F4B8..1F4EB  ; Extended_Pictographic# E0.6  [52] (💸..📫)    money with wings..closed mailbox with raised flag
+1F4EC..1F4ED  ; Extended_Pictographic# E0.7   [2] (📬..📭)    open mailbox with raised flag..open mailbox with lowered flag
+1F4EE         ; Extended_Pictographic# E0.6   [1] (📮)       postbox
+1F4EF         ; Extended_Pictographic# E1.0   [1] (📯)       postal horn
+1F4F0..1F4F4  ; Extended_Pictographic# E0.6   [5] (📰..📴)    newspaper..mobile phone off
+1F4F5         ; Extended_Pictographic# E1.0   [1] (📵)       no mobile phones
+1F4F6..1F4F7  ; Extended_Pictographic# E0.6   [2] (📶..📷)    antenna bars..camera
+1F4F8         ; Extended_Pictographic# E1.0   [1] (📸)       camera with flash
+1F4F9..1F4FC  ; Extended_Pictographic# E0.6   [4] (📹..📼)    video camera..videocassette
+1F4FD         ; Extended_Pictographic# E0.7   [1] (📽️)       film projector
+1F4FE         ; Extended_Pictographic# E0.0   [1] (📾)       PORTABLE STEREO
+1F4FF..1F502  ; Extended_Pictographic# E1.0   [4] (📿..🔂)    prayer beads..repeat single button
+1F503         ; Extended_Pictographic# E0.6   [1] (🔃)       clockwise vertical arrows
+1F504..1F507  ; Extended_Pictographic# E1.0   [4] (🔄..🔇)    counterclockwise arrows button..muted speaker
+1F508         ; Extended_Pictographic# E0.7   [1] (🔈)       speaker low volume
+1F509         ; Extended_Pictographic# E1.0   [1] (🔉)       speaker medium volume
+1F50A..1F514  ; Extended_Pictographic# E0.6  [11] (🔊..🔔)    speaker high volume..bell
+1F515         ; Extended_Pictographic# E1.0   [1] (🔕)       bell with slash
+1F516..1F52B  ; Extended_Pictographic# E0.6  [22] (🔖..🔫)    bookmark..pistol
+1F52C..1F52D  ; Extended_Pictographic# E1.0   [2] (🔬..🔭)    microscope..telescope
+1F52E..1F53D  ; Extended_Pictographic# E0.6  [16] (🔮..🔽)    crystal ball..downwards button
+1F546..1F548  ; Extended_Pictographic# E0.0   [3] (🕆..🕈)    WHITE LATIN CROSS..CELTIC CROSS
+1F549..1F54A  ; Extended_Pictographic# E0.7   [2] (🕉️..🕊️)    om..dove
+1F54B..1F54E  ; Extended_Pictographic# E1.0   [4] (🕋..🕎)    kaaba..menorah
+1F54F         ; Extended_Pictographic# E0.0   [1] (🕏)       BOWL OF HYGIEIA
+1F550..1F55B  ; Extended_Pictographic# E0.6  [12] (🕐..🕛)    one o’clock..twelve o’clock
+1F55C..1F567  ; Extended_Pictographic# E0.7  [12] (🕜..🕧)    one-thirty..twelve-thirty
+1F568..1F56E  ; Extended_Pictographic# E0.0   [7] (🕨..🕮)    RIGHT SPEAKER..BOOK
+1F56F..1F570  ; Extended_Pictographic# E0.7   [2] (🕯️..🕰️)    candle..mantelpiece clock
+1F571..1F572  ; Extended_Pictographic# E0.0   [2] (🕱..🕲)    BLACK SKULL AND CROSSBONES..NO PIRACY
+1F573..1F579  ; Extended_Pictographic# E0.7   [7] (🕳️..🕹️)    hole..joystick
+1F57A         ; Extended_Pictographic# E3.0   [1] (🕺)       man dancing
+1F57B..1F586  ; Extended_Pictographic# E0.0  [12] (🕻..🖆)    LEFT HAND TELEPHONE RECEIVER..PEN OVER STAMPED ENVELOPE
+1F587         ; Extended_Pictographic# E0.7   [1] (🖇️)       linked paperclips
+1F588..1F589  ; Extended_Pictographic# E0.0   [2] (🖈..🖉)    BLACK PUSHPIN..LOWER LEFT PENCIL
+1F58A..1F58D  ; Extended_Pictographic# E0.7   [4] (🖊️..🖍️)    pen..crayon
+1F58E..1F58F  ; Extended_Pictographic# E0.0   [2] (🖎..🖏)    LEFT WRITING HAND..TURNED OK HAND SIGN
+1F590         ; Extended_Pictographic# E0.7   [1] (🖐️)       hand with fingers splayed
+1F591..1F594  ; Extended_Pictographic# E0.0   [4] (🖑..🖔)    REVERSED RAISED HAND WITH FINGERS SPLAYED..REVERSED VICTORY HAND
+1F595..1F596  ; Extended_Pictographic# E1.0   [2] (🖕..🖖)    middle finger..vulcan salute
+1F597..1F5A3  ; Extended_Pictographic# E0.0  [13] (🖗..🖣)    WHITE DOWN POINTING LEFT HAND INDEX..BLACK DOWN POINTING BACKHAND INDEX
+1F5A4         ; Extended_Pictographic# E3.0   [1] (🖤)       black heart
+1F5A5         ; Extended_Pictographic# E0.7   [1] (🖥️)       desktop computer
+1F5A6..1F5A7  ; Extended_Pictographic# E0.0   [2] (🖦..🖧)    KEYBOARD AND MOUSE..THREE NETWORKED COMPUTERS
+1F5A8         ; Extended_Pictographic# E0.7   [1] (🖨️)       printer
+1F5A9..1F5B0  ; Extended_Pictographic# E0.0   [8] (🖩..🖰)    POCKET CALCULATOR..TWO BUTTON MOUSE
+1F5B1..1F5B2  ; Extended_Pictographic# E0.7   [2] (🖱️..🖲️)    computer mouse..trackball
+1F5B3..1F5BB  ; Extended_Pictographic# E0.0   [9] (🖳..🖻)    OLD PERSONAL COMPUTER..DOCUMENT WITH PICTURE
+1F5BC         ; Extended_Pictographic# E0.7   [1] (🖼️)       framed picture
+1F5BD..1F5C1  ; Extended_Pictographic# E0.0   [5] (🖽..🗁)    FRAME WITH TILES..OPEN FOLDER
+1F5C2..1F5C4  ; Extended_Pictographic# E0.7   [3] (🗂️..🗄️)    card index dividers..file cabinet
+1F5C5..1F5D0  ; Extended_Pictographic# E0.0  [12] (🗅..🗐)    EMPTY NOTE..PAGES
+1F5D1..1F5D3  ; Extended_Pictographic# E0.7   [3] (🗑️..🗓️)    wastebasket..spiral calendar
+1F5D4..1F5DB  ; Extended_Pictographic# E0.0   [8] (🗔..🗛)    DESKTOP WINDOW..DECREASE FONT SIZE SYMBOL
+1F5DC..1F5DE  ; Extended_Pictographic# E0.7   [3] (🗜️..🗞️)    clamp..rolled-up newspaper
+1F5DF..1F5E0  ; Extended_Pictographic# E0.0   [2] (🗟..🗠)    PAGE WITH CIRCLED TEXT..STOCK CHART
+1F5E1         ; Extended_Pictographic# E0.7   [1] (🗡️)       dagger
+1F5E2         ; Extended_Pictographic# E0.0   [1] (🗢)       LIPS
+1F5E3         ; Extended_Pictographic# E0.7   [1] (🗣️)       speaking head
+1F5E4..1F5E7  ; Extended_Pictographic# E0.0   [4] (🗤..🗧)    THREE RAYS ABOVE..THREE RAYS RIGHT
+1F5E8         ; Extended_Pictographic# E2.0   [1] (🗨️)       left speech bubble
+1F5E9..1F5EE  ; Extended_Pictographic# E0.0   [6] (🗩..🗮)    RIGHT SPEECH BUBBLE..LEFT ANGER BUBBLE
+1F5EF         ; Extended_Pictographic# E0.7   [1] (🗯️)       right anger bubble
+1F5F0..1F5F2  ; Extended_Pictographic# E0.0   [3] (🗰..🗲)    MOOD BUBBLE..LIGHTNING MOOD
+1F5F3         ; Extended_Pictographic# E0.7   [1] (🗳️)       ballot box with ballot
+1F5F4..1F5F9  ; Extended_Pictographic# E0.0   [6] (🗴..🗹)    BALLOT SCRIPT X..BALLOT BOX WITH BOLD CHECK
+1F5FA         ; Extended_Pictographic# E0.7   [1] (🗺️)       world map
+1F5FB..1F5FF  ; Extended_Pictographic# E0.6   [5] (🗻..🗿)    mount fuji..moai
+1F600         ; Extended_Pictographic# E1.0   [1] (😀)       grinning face
+1F601..1F606  ; Extended_Pictographic# E0.6   [6] (😁..😆)    beaming face with smiling eyes..grinning squinting face
+1F607..1F608  ; Extended_Pictographic# E1.0   [2] (😇..😈)    smiling face with halo..smiling face with horns
+1F609..1F60D  ; Extended_Pictographic# E0.6   [5] (😉..😍)    winking face..smiling face with heart-eyes
+1F60E         ; Extended_Pictographic# E1.0   [1] (😎)       smiling face with sunglasses
+1F60F         ; Extended_Pictographic# E0.6   [1] (😏)       smirking face
+1F610         ; Extended_Pictographic# E0.7   [1] (😐)       neutral face
+1F611         ; Extended_Pictographic# E1.0   [1] (😑)       expressionless face
+1F612..1F614  ; Extended_Pictographic# E0.6   [3] (😒..😔)    unamused face..pensive face
+1F615         ; Extended_Pictographic# E1.0   [1] (😕)       confused face
+1F616         ; Extended_Pictographic# E0.6   [1] (😖)       confounded face
+1F617         ; Extended_Pictographic# E1.0   [1] (😗)       kissing face
+1F618         ; Extended_Pictographic# E0.6   [1] (😘)       face blowing a kiss
+1F619         ; Extended_Pictographic# E1.0   [1] (😙)       kissing face with smiling eyes
+1F61A         ; Extended_Pictographic# E0.6   [1] (😚)       kissing face with closed eyes
+1F61B         ; Extended_Pictographic# E1.0   [1] (😛)       face with tongue
+1F61C..1F61E  ; Extended_Pictographic# E0.6   [3] (😜..😞)    winking face with tongue..disappointed face
+1F61F         ; Extended_Pictographic# E1.0   [1] (😟)       worried face
+1F620..1F625  ; Extended_Pictographic# E0.6   [6] (😠..😥)    angry face..sad but relieved face
+1F626..1F627  ; Extended_Pictographic# E1.0   [2] (😦..😧)    frowning face with open mouth..anguished face
+1F628..1F62B  ; Extended_Pictographic# E0.6   [4] (😨..😫)    fearful face..tired face
+1F62C         ; Extended_Pictographic# E1.0   [1] (😬)       grimacing face
+1F62D         ; Extended_Pictographic# E0.6   [1] (😭)       loudly crying face
+1F62E..1F62F  ; Extended_Pictographic# E1.0   [2] (😮..😯)    face with open mouth..hushed face
+1F630..1F633  ; Extended_Pictographic# E0.6   [4] (😰..😳)    anxious face with sweat..flushed face
+1F634         ; Extended_Pictographic# E1.0   [1] (😴)       sleeping face
+1F635         ; Extended_Pictographic# E0.6   [1] (😵)       dizzy face
+1F636         ; Extended_Pictographic# E1.0   [1] (😶)       face without mouth
+1F637..1F640  ; Extended_Pictographic# E0.6  [10] (😷..🙀)    face with medical mask..weary cat
+1F641..1F644  ; Extended_Pictographic# E1.0   [4] (🙁..🙄)    slightly frowning face..face with rolling eyes
+1F645..1F64F  ; Extended_Pictographic# E0.6  [11] (🙅..🙏)    person gesturing NO..folded hands
+1F680         ; Extended_Pictographic# E0.6   [1] (🚀)       rocket
+1F681..1F682  ; Extended_Pictographic# E1.0   [2] (🚁..🚂)    helicopter..locomotive
+1F683..1F685  ; Extended_Pictographic# E0.6   [3] (🚃..🚅)    railway car..bullet train
+1F686         ; Extended_Pictographic# E1.0   [1] (🚆)       train
+1F687         ; Extended_Pictographic# E0.6   [1] (🚇)       metro
+1F688         ; Extended_Pictographic# E1.0   [1] (🚈)       light rail
+1F689         ; Extended_Pictographic# E0.6   [1] (🚉)       station
+1F68A..1F68B  ; Extended_Pictographic# E1.0   [2] (🚊..🚋)    tram..tram car
+1F68C         ; Extended_Pictographic# E0.6   [1] (🚌)       bus
+1F68D         ; Extended_Pictographic# E0.7   [1] (🚍)       oncoming bus
+1F68E         ; Extended_Pictographic# E1.0   [1] (🚎)       trolleybus
+1F68F         ; Extended_Pictographic# E0.6   [1] (🚏)       bus stop
+1F690         ; Extended_Pictographic# E1.0   [1] (🚐)       minibus
+1F691..1F693  ; Extended_Pictographic# E0.6   [3] (🚑..🚓)    ambulance..police car
+1F694         ; Extended_Pictographic# E0.7   [1] (🚔)       oncoming police car
+1F695         ; Extended_Pictographic# E0.6   [1] (🚕)       taxi
+1F696         ; Extended_Pictographic# E1.0   [1] (🚖)       oncoming taxi
+1F697         ; Extended_Pictographic# E0.6   [1] (🚗)       automobile
+1F698         ; Extended_Pictographic# E0.7   [1] (🚘)       oncoming automobile
+1F699..1F69A  ; Extended_Pictographic# E0.6   [2] (🚙..🚚)    sport utility vehicle..delivery truck
+1F69B..1F6A1  ; Extended_Pictographic# E1.0   [7] (🚛..🚡)    articulated lorry..aerial tramway
+1F6A2         ; Extended_Pictographic# E0.6   [1] (🚢)       ship
+1F6A3         ; Extended_Pictographic# E1.0   [1] (🚣)       person rowing boat
+1F6A4..1F6A5  ; Extended_Pictographic# E0.6   [2] (🚤..🚥)    speedboat..horizontal traffic light
+1F6A6         ; Extended_Pictographic# E1.0   [1] (🚦)       vertical traffic light
+1F6A7..1F6AD  ; Extended_Pictographic# E0.6   [7] (🚧..🚭)    construction..no smoking
+1F6AE..1F6B1  ; Extended_Pictographic# E1.0   [4] (🚮..🚱)    litter in bin sign..non-potable water
+1F6B2         ; Extended_Pictographic# E0.6   [1] (🚲)       bicycle
+1F6B3..1F6B5  ; Extended_Pictographic# E1.0   [3] (🚳..🚵)    no bicycles..person mountain biking
+1F6B6         ; Extended_Pictographic# E0.6   [1] (🚶)       person walking
+1F6B7..1F6B8  ; Extended_Pictographic# E1.0   [2] (🚷..🚸)    no pedestrians..children crossing
+1F6B9..1F6BE  ; Extended_Pictographic# E0.6   [6] (🚹..🚾)    men’s room..water closet
+1F6BF         ; Extended_Pictographic# E1.0   [1] (🚿)       shower
+1F6C0         ; Extended_Pictographic# E0.6   [1] (🛀)       person taking bath
+1F6C1..1F6C5  ; Extended_Pictographic# E1.0   [5] (🛁..🛅)    bathtub..left luggage
+1F6C6..1F6CA  ; Extended_Pictographic# E0.0   [5] (🛆..🛊)    TRIANGLE WITH ROUNDED CORNERS..GIRLS SYMBOL
+1F6CB         ; Extended_Pictographic# E0.7   [1] (🛋️)       couch and lamp
+1F6CC         ; Extended_Pictographic# E1.0   [1] (🛌)       person in bed
+1F6CD..1F6CF  ; Extended_Pictographic# E0.7   [3] (🛍️..🛏️)    shopping bags..bed
+1F6D0         ; Extended_Pictographic# E1.0   [1] (🛐)       place of worship
+1F6D1..1F6D2  ; Extended_Pictographic# E3.0   [2] (🛑..🛒)    stop sign..shopping cart
+1F6D3..1F6D4  ; Extended_Pictographic# E0.0   [2] (🛓..🛔)    STUPA..PAGODA
+1F6D5         ; Extended_Pictographic# E12.0  [1] (🛕)       hindu temple
+1F6D6..1F6D7  ; Extended_Pictographic# E13.0  [2] (🛖..🛗)    hut..elevator
+1F6D8..1F6DF  ; Extended_Pictographic# E0.0   [8] (🛘..🛟)    <reserved-1F6D8>..<reserved-1F6DF>
+1F6E0..1F6E5  ; Extended_Pictographic# E0.7   [6] (🛠️..🛥️)    hammer and wrench..motor boat
+1F6E6..1F6E8  ; Extended_Pictographic# E0.0   [3] (🛦..🛨)    UP-POINTING MILITARY AIRPLANE..UP-POINTING SMALL AIRPLANE
+1F6E9         ; Extended_Pictographic# E0.7   [1] (🛩️)       small airplane
+1F6EA         ; Extended_Pictographic# E0.0   [1] (🛪)       NORTHEAST-POINTING AIRPLANE
+1F6EB..1F6EC  ; Extended_Pictographic# E1.0   [2] (🛫..🛬)    airplane departure..airplane arrival
+1F6ED..1F6EF  ; Extended_Pictographic# E0.0   [3] (🛭..🛯)    <reserved-1F6ED>..<reserved-1F6EF>
+1F6F0         ; Extended_Pictographic# E0.7   [1] (🛰️)       satellite
+1F6F1..1F6F2  ; Extended_Pictographic# E0.0   [2] (🛱..🛲)    ONCOMING FIRE ENGINE..DIESEL LOCOMOTIVE
+1F6F3         ; Extended_Pictographic# E0.7   [1] (🛳️)       passenger ship
+1F6F4..1F6F6  ; Extended_Pictographic# E3.0   [3] (🛴..🛶)    kick scooter..canoe
+1F6F7..1F6F8  ; Extended_Pictographic# E5.0   [2] (🛷..🛸)    sled..flying saucer
+1F6F9         ; Extended_Pictographic# E11.0  [1] (🛹)       skateboard
+1F6FA         ; Extended_Pictographic# E12.0  [1] (🛺)       auto rickshaw
+1F6FB..1F6FC  ; Extended_Pictographic# E13.0  [2] (🛻..🛼)    pickup truck..roller skate
+1F6FD..1F6FF  ; Extended_Pictographic# E0.0   [3] (🛽..🛿)    <reserved-1F6FD>..<reserved-1F6FF>
+1F774..1F77F  ; Extended_Pictographic# E0.0  [12] (🝴..🝿)    <reserved-1F774>..<reserved-1F77F>
+1F7D5..1F7DF  ; Extended_Pictographic# E0.0  [11] (🟕..🟟)    CIRCLED TRIANGLE..<reserved-1F7DF>
+1F7E0..1F7EB  ; Extended_Pictographic# E12.0 [12] (🟠..🟫)    orange circle..brown square
+1F7EC..1F7FF  ; Extended_Pictographic# E0.0  [20] (🟬..🟿)    <reserved-1F7EC>..<reserved-1F7FF>
+1F80C..1F80F  ; Extended_Pictographic# E0.0   [4] (🠌..🠏)    <reserved-1F80C>..<reserved-1F80F>
+1F848..1F84F  ; Extended_Pictographic# E0.0   [8] (🡈..🡏)    <reserved-1F848>..<reserved-1F84F>
+1F85A..1F85F  ; Extended_Pictographic# E0.0   [6] (🡚..🡟)    <reserved-1F85A>..<reserved-1F85F>
+1F888..1F88F  ; Extended_Pictographic# E0.0   [8] (🢈..🢏)    <reserved-1F888>..<reserved-1F88F>
+1F8AE..1F8FF  ; Extended_Pictographic# E0.0  [82] (🢮..🣿)    <reserved-1F8AE>..<reserved-1F8FF>
+1F90C         ; Extended_Pictographic# E13.0  [1] (🤌)       pinched fingers
+1F90D..1F90F  ; Extended_Pictographic# E12.0  [3] (🤍..🤏)    white heart..pinching hand
+1F910..1F918  ; Extended_Pictographic# E1.0   [9] (🤐..🤘)    zipper-mouth face..sign of the horns
+1F919..1F91E  ; Extended_Pictographic# E3.0   [6] (🤙..🤞)    call me hand..crossed fingers
+1F91F         ; Extended_Pictographic# E5.0   [1] (🤟)       love-you gesture
+1F920..1F927  ; Extended_Pictographic# E3.0   [8] (🤠..🤧)    cowboy hat face..sneezing face
+1F928..1F92F  ; Extended_Pictographic# E5.0   [8] (🤨..🤯)    face with raised eyebrow..exploding head
+1F930         ; Extended_Pictographic# E3.0   [1] (🤰)       pregnant woman
+1F931..1F932  ; Extended_Pictographic# E5.0   [2] (🤱..🤲)    breast-feeding..palms up together
+1F933..1F93A  ; Extended_Pictographic# E3.0   [8] (🤳..🤺)    selfie..person fencing
+1F93C..1F93E  ; Extended_Pictographic# E3.0   [3] (🤼..🤾)    people wrestling..person playing handball
+1F93F         ; Extended_Pictographic# E12.0  [1] (🤿)       diving mask
+1F940..1F945  ; Extended_Pictographic# E3.0   [6] (🥀..🥅)    wilted flower..goal net
+1F947..1F94B  ; Extended_Pictographic# E3.0   [5] (🥇..🥋)    1st place medal..martial arts uniform
+1F94C         ; Extended_Pictographic# E5.0   [1] (🥌)       curling stone
+1F94D..1F94F  ; Extended_Pictographic# E11.0  [3] (🥍..🥏)    lacrosse..flying disc
+1F950..1F95E  ; Extended_Pictographic# E3.0  [15] (🥐..🥞)    croissant..pancakes
+1F95F..1F96B  ; Extended_Pictographic# E5.0  [13] (🥟..🥫)    dumpling..canned food
+1F96C..1F970  ; Extended_Pictographic# E11.0  [5] (🥬..🥰)    leafy green..smiling face with hearts
+1F971         ; Extended_Pictographic# E12.0  [1] (🥱)       yawning face
+1F972         ; Extended_Pictographic# E13.0  [1] (🥲)       smiling face with tear
+1F973..1F976  ; Extended_Pictographic# E11.0  [4] (🥳..🥶)    partying face..cold face
+1F977..1F978  ; Extended_Pictographic# E13.0  [2] (🥷..🥸)    ninja..disguised face
+1F979         ; Extended_Pictographic# E0.0   [1] (🥹)       <reserved-1F979>
+1F97A         ; Extended_Pictographic# E11.0  [1] (🥺)       pleading face
+1F97B         ; Extended_Pictographic# E12.0  [1] (🥻)       sari
+1F97C..1F97F  ; Extended_Pictographic# E11.0  [4] (🥼..🥿)    lab coat..flat shoe
+1F980..1F984  ; Extended_Pictographic# E1.0   [5] (🦀..🦄)    crab..unicorn
+1F985..1F991  ; Extended_Pictographic# E3.0  [13] (🦅..🦑)    eagle..squid
+1F992..1F997  ; Extended_Pictographic# E5.0   [6] (🦒..🦗)    giraffe..cricket
+1F998..1F9A2  ; Extended_Pictographic# E11.0 [11] (🦘..🦢)    kangaroo..swan
+1F9A3..1F9A4  ; Extended_Pictographic# E13.0  [2] (🦣..🦤)    mammoth..dodo
+1F9A5..1F9AA  ; Extended_Pictographic# E12.0  [6] (🦥..🦪)    sloth..oyster
+1F9AB..1F9AD  ; Extended_Pictographic# E13.0  [3] (🦫..🦭)    beaver..seal
+1F9AE..1F9AF  ; Extended_Pictographic# E12.0  [2] (🦮..🦯)    guide dog..white cane
+1F9B0..1F9B9  ; Extended_Pictographic# E11.0 [10] (🦰..🦹)    red hair..supervillain
+1F9BA..1F9BF  ; Extended_Pictographic# E12.0  [6] (🦺..🦿)    safety vest..mechanical leg
+1F9C0         ; Extended_Pictographic# E1.0   [1] (🧀)       cheese wedge
+1F9C1..1F9C2  ; Extended_Pictographic# E11.0  [2] (🧁..🧂)    cupcake..salt
+1F9C3..1F9CA  ; Extended_Pictographic# E12.0  [8] (🧃..🧊)    beverage box..ice
+1F9CB         ; Extended_Pictographic# E13.0  [1] (🧋)       bubble tea
+1F9CC         ; Extended_Pictographic# E0.0   [1] (🧌)       <reserved-1F9CC>
+1F9CD..1F9CF  ; Extended_Pictographic# E12.0  [3] (🧍..🧏)    person standing..deaf person
+1F9D0..1F9E6  ; Extended_Pictographic# E5.0  [23] (🧐..🧦)    face with monocle..socks
+1F9E7..1F9FF  ; Extended_Pictographic# E11.0 [25] (🧧..🧿)    red envelope..nazar amulet
+1FA00..1FA6F  ; Extended_Pictographic# E0.0 [112] (🨀..🩯)    NEUTRAL CHESS KING..<reserved-1FA6F>
+1FA70..1FA73  ; Extended_Pictographic# E12.0  [4] (🩰..🩳)    ballet shoes..shorts
+1FA74         ; Extended_Pictographic# E13.0  [1] (🩴)       thong sandal
+1FA75..1FA77  ; Extended_Pictographic# E0.0   [3] (🩵..🩷)    <reserved-1FA75>..<reserved-1FA77>
+1FA78..1FA7A  ; Extended_Pictographic# E12.0  [3] (🩸..🩺)    drop of blood..stethoscope
+1FA7B..1FA7F  ; Extended_Pictographic# E0.0   [5] (🩻..🩿)    <reserved-1FA7B>..<reserved-1FA7F>
+1FA80..1FA82  ; Extended_Pictographic# E12.0  [3] (🪀..🪂)    yo-yo..parachute
+1FA83..1FA86  ; Extended_Pictographic# E13.0  [4] (🪃..🪆)    boomerang..nesting dolls
+1FA87..1FA8F  ; Extended_Pictographic# E0.0   [9] (🪇..🪏)    <reserved-1FA87>..<reserved-1FA8F>
+1FA90..1FA95  ; Extended_Pictographic# E12.0  [6] (🪐..🪕)    ringed planet..banjo
+1FA96..1FAA8  ; Extended_Pictographic# E13.0 [19] (🪖..🪨)    military helmet..rock
+1FAA9..1FAAF  ; Extended_Pictographic# E0.0   [7] (🪩..🪯)    <reserved-1FAA9>..<reserved-1FAAF>
+1FAB0..1FAB6  ; Extended_Pictographic# E13.0  [7] (🪰..🪶)    fly..feather
+1FAB7..1FABF  ; Extended_Pictographic# E0.0   [9] (🪷..🪿)    <reserved-1FAB7>..<reserved-1FABF>
+1FAC0..1FAC2  ; Extended_Pictographic# E13.0  [3] (🫀..🫂)    anatomical heart..people hugging
+1FAC3..1FACF  ; Extended_Pictographic# E0.0  [13] (🫃..🫏)    <reserved-1FAC3>..<reserved-1FACF>
+1FAD0..1FAD6  ; Extended_Pictographic# E13.0  [7] (🫐..🫖)    blueberries..teapot
+1FAD7..1FAFF  ; Extended_Pictographic# E0.0  [41] (🫗..🫿)    <reserved-1FAD7>..<reserved-1FAFF>
+1FC00..1FFFD  ; Extended_Pictographic# E0.0[1022] (🰀..🿽)    <reserved-1FC00>..<reserved-1FFFD>
+
+# Total elements: 3537
+
+#EOF
diff --git a/etc/NEWS b/etc/NEWS
index da5524a555..b617a05758 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -324,6 +324,17 @@ emulators by using the new input-meta-mode with the special value
 This parameter, similar to 'drag-with-header-line', allows moving frames
 by dragging the tab lines of their topmost windows with the mouse.
 
+** New script 'emoji' has been created.
+Various blocks of codepoints have been split out of the 'symbol'
+script into their own 'emoji' script to allow easier specification of
+their treatment.  Also, Emacs will now use "Noto Color Emoji" by
+default for that script.  Use:
+
+(set-fontset-font t 'emoji
+                  '("My New Emoji Font" . "iso10646-1") nil 'prepend)
+
+to change the font used.
+
 \f
 * Editing Changes in Emacs 28.1
 
diff --git a/lisp/international/fontset.el b/lisp/international/fontset.el
index 3deaff9677..6cd95af76f 100644
--- a/lisp/international/fontset.el
+++ b/lisp/international/fontset.el
@@ -272,7 +272,8 @@ font-encoding-charset-alist
         (indic-siyaq-number #x1ec71)
         (ottoman-siyaq-number #x1ed01)
 	(mahjong-tile #x1F000)
-	(domino-tile #x1F030)))
+	(domino-tile #x1F030)
+        (emoji #x1F300 #x1F600 #xFE0F)))
 
 (defvar otf-script-alist)
 
@@ -763,7 +764,8 @@ setup-default-fontset
 		    counting-rod-numeral
 		    adlam
 		    mahjong-tile
-		    domino-tile))
+		    domino-tile
+                    emoji))
     (set-fontset-font "fontset-default"
 		      script (font-spec :registry "iso10646-1" :script script)
 		      nil 'append))
@@ -876,6 +878,9 @@ setup-default-fontset
              (#x1FA00 . #x1FA6F)))	;; Chess Symbols
     (set-fontset-font "fontset-default" symbol-subgroup
                       '("Symbola" . "iso10646-1") nil 'prepend))
+  ;; This sets up the Emoji codepoints to use prettier fonts.
+  (set-fontset-font "fontset-default" 'emoji
+                    '("Noto Color Emoji" . "iso10646-1") nil 'prepend)
   ;; Box Drawing and Block Elements
   (set-fontset-font "fontset-default" '(#x2500 . #x259F)
                     '("FreeMono" . "iso10646-1") nil 'prepend)
-- 
2.31.0


^ permalink raw reply related	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-07-10  9:45     ` Robert Pluim
@ 2021-07-10  9:48       ` Eli Zaretskii
  2021-07-12  8:27         ` Robert Pluim
  2021-09-13 12:36         ` Eli Zaretskii
  0 siblings, 2 replies; 73+ messages in thread
From: Eli Zaretskii @ 2021-07-10  9:48 UTC (permalink / raw)
  To: Robert Pluim; +Cc: emacs-devel

> From: Robert Pluim <rpluim@gmail.com>
> Cc: emacs-devel@gnu.org
> Date: Sat, 10 Jul 2021 11:45:47 +0200
> 
> >>>>> On Sat, 10 Jul 2021 12:37:09 +0300, Eli Zaretskii <eliz@gnu.org> said:
> 
>     Eli> I thought we also decided to introduce a new script, 'emoji', to make
>     Eli> the fontset definition and customizations easier.  Was I dreaming?
>     Eli> Because I cannot seem to be able to find that part in the patches
>     Eli> posted to those two threads.
> 
> My version has the following. If more is needed tell me. Iʼve attached
> the latest version.

Looks fine, thanks.

I think etc/TODO needs to be updated when this lands?



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-07-10  9:48       ` Eli Zaretskii
@ 2021-07-12  8:27         ` Robert Pluim
  2021-07-12 14:02           ` Robert Pluim
  2021-09-13 12:36         ` Eli Zaretskii
  1 sibling, 1 reply; 73+ messages in thread
From: Robert Pluim @ 2021-07-12  8:27 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

>>>>> On Sat, 10 Jul 2021 12:48:41 +0300, Eli Zaretskii <eliz@gnu.org> said:

    >> From: Robert Pluim <rpluim@gmail.com>
    >> Cc: emacs-devel@gnu.org
    >> Date: Sat, 10 Jul 2021 11:45:47 +0200
    >> 
    >> >>>>> On Sat, 10 Jul 2021 12:37:09 +0300, Eli Zaretskii <eliz@gnu.org> said:
    >> 
    Eli> I thought we also decided to introduce a new script, 'emoji', to make
    Eli> the fontset definition and customizations easier.  Was I dreaming?
    Eli> Because I cannot seem to be able to find that part in the patches
    Eli> posted to those two threads.
    >> 
    >> My version has the following. If more is needed tell me. Iʼve attached
    >> the latest version.

    Eli> Looks fine, thanks.

    Eli> I think etc/TODO needs to be updated when this lands?

Yes. I think this only implements one of the four items in there for
emoji support, but theyʼre all fairly orthogonal.

Robert
-- 



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-07-12  8:27         ` Robert Pluim
@ 2021-07-12 14:02           ` Robert Pluim
  2021-07-12 15:38             ` Robert Pluim
  0 siblings, 1 reply; 73+ messages in thread
From: Robert Pluim @ 2021-07-12 14:02 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

>>>>> On Mon, 12 Jul 2021 10:27:58 +0200, Robert Pluim <rpluim@gmail.com> said:
    Robert> Yes. I think this only implements one of the four items in there for
    Robert> emoji support, but theyʼre all fairly orthogonal.

Hi Eli,

Now that Iʼve looked at the patch again, I think I need some
guidance.

tr51 defines which codepoints have the 'Emoji' property, and
which additionally have the 'Emoji_Presentation' property. The latter
means they should in the absence of a variation selector be displayed
as emoji.

My current implementation assigns codepoints with the
'Emoji_Presentation' property to the 'emoji' script, since thatʼs all
we have to work with regarding font selection. But there are
codepoints that donʼt have that property that *could* be displayed as
emoji, so perhaps I should base it off the 'Emoji' property instead?
(with a small exception for codepoints <= #xAE).

(thereʼs probably a similar question for 'Extended_Pictographic' that
needs investigation)

Robert
-- 



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-07-12 14:02           ` Robert Pluim
@ 2021-07-12 15:38             ` Robert Pluim
  2021-07-12 15:59               ` Eli Zaretskii
  0 siblings, 1 reply; 73+ messages in thread
From: Robert Pluim @ 2021-07-12 15:38 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

>>>>> On Mon, 12 Jul 2021 16:02:54 +0200, Robert Pluim <rpluim@gmail.com> said:

    Robert> tr51 defines which codepoints have the 'Emoji' property, and
    Robert> which additionally have the 'Emoji_Presentation' property. The latter
    Robert> means they should in the absence of a variation selector be displayed
    Robert> as emoji.

    Robert> My current implementation assigns codepoints with the
    Robert> 'Emoji_Presentation' property to the 'emoji' script, since thatʼs all
    Robert> we have to work with regarding font selection. But there are
    Robert> codepoints that donʼt have that property that *could* be displayed as
    Robert> emoji, so perhaps I should base it off the 'Emoji' property instead?
    Robert> (with a small exception for codepoints <= #xAE).

Having re-read relevant parts if tr51, I misunderstood this
part. Everything with the Emoji property is an emoji, and should be
displayed as such. The Emoji_Presentation property is about whether to
use the Text or Emoji presentation by default, not the emoji-ness

So I can base it off the 'Emoji' property. Based on some quick
testing, emoji fonts donʼt have glyphs for those few emoji codepoints
that are ASCII, so I propose not treating those as emoji.

Robert
-- 



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-07-12 15:38             ` Robert Pluim
@ 2021-07-12 15:59               ` Eli Zaretskii
  2021-07-13  7:00                 ` Jean Louis
  2021-07-15 15:15                 ` Robert Pluim
  0 siblings, 2 replies; 73+ messages in thread
From: Eli Zaretskii @ 2021-07-12 15:59 UTC (permalink / raw)
  To: Robert Pluim; +Cc: emacs-devel

> From: Robert Pluim <rpluim@gmail.com>
> Cc: emacs-devel@gnu.org
> Date: Mon, 12 Jul 2021 17:38:42 +0200
> 
> Having re-read relevant parts if tr51, I misunderstood this
> part. Everything with the Emoji property is an emoji, and should be
> displayed as such. The Emoji_Presentation property is about whether to
> use the Text or Emoji presentation by default, not the emoji-ness

Right, that's my recollection as well.

> So I can base it off the 'Emoji' property. Based on some quick
> testing, emoji fonts donʼt have glyphs for those few emoji codepoints
> that are ASCII, so I propose not treating those as emoji.

Agreed.

Thanks.



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-07-12 15:59               ` Eli Zaretskii
@ 2021-07-13  7:00                 ` Jean Louis
  2021-07-13  7:50                   ` Robert Pluim
  2021-07-15 15:15                 ` Robert Pluim
  1 sibling, 1 reply; 73+ messages in thread
From: Jean Louis @ 2021-07-13  7:00 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Robert Pluim, emacs-devel

Just as possible reference to code, there is library emojify (MELPA)
that displays pictures for Emoji in Emacs and I use it all the time.

Maybe inside of it there could be useful pointers to this thread.



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-07-13  7:00                 ` Jean Louis
@ 2021-07-13  7:50                   ` Robert Pluim
  0 siblings, 0 replies; 73+ messages in thread
From: Robert Pluim @ 2021-07-13  7:50 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

>>>>> On Tue, 13 Jul 2021 10:00:00 +0300, Jean Louis <bugs@gnu.support> said:

    Jean> Just as possible reference to code, there is library emojify (MELPA)
    Jean> that displays pictures for Emoji in Emacs and I use it all the time.

    Jean> Maybe inside of it there could be useful pointers to this thread.

That looks interesting, but it does a different job, it replaces
text-style representations with emojis. This work is about direct
support for better display of emoji codepoints.

Robert
-- 



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-07-12 15:59               ` Eli Zaretskii
  2021-07-13  7:00                 ` Jean Louis
@ 2021-07-15 15:15                 ` Robert Pluim
  2021-07-15 15:44                   ` Eli Zaretskii
  1 sibling, 1 reply; 73+ messages in thread
From: Robert Pluim @ 2021-07-15 15:15 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

>>>>> On Mon, 12 Jul 2021 18:59:43 +0300, Eli Zaretskii <eliz@gnu.org> said:

    >> From: Robert Pluim <rpluim@gmail.com>
    >> Cc: emacs-devel@gnu.org
    >> Date: Mon, 12 Jul 2021 17:38:42 +0200
    >> 
    >> Having re-read relevant parts if tr51, I misunderstood this
    >> part. Everything with the Emoji property is an emoji, and should be
    >> displayed as such. The Emoji_Presentation property is about whether to
    >> use the Text or Emoji presentation by default, not the emoji-ness

    Eli> Right, that's my recollection as well.

    >> So I can base it off the 'Emoji' property. Based on some quick
    >> testing, emoji fonts donʼt have glyphs for those few emoji codepoints
    >> that are ASCII, so I propose not treating those as emoji.

    Eli> Agreed.

So this is pretty much ready, but since Iʼm going to be offline for
the next 10 days or so, Iʼll wait until I get back before pushing.

Robert
-- 



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-07-15 15:15                 ` Robert Pluim
@ 2021-07-15 15:44                   ` Eli Zaretskii
  0 siblings, 0 replies; 73+ messages in thread
From: Eli Zaretskii @ 2021-07-15 15:44 UTC (permalink / raw)
  To: Robert Pluim; +Cc: emacs-devel

> From: Robert Pluim <rpluim@gmail.com>
> Cc: emacs-devel@gnu.org
> Date: Thu, 15 Jul 2021 17:15:23 +0200
> 
> So this is pretty much ready, but since Iʼm going to be offline for
> the next 10 days or so, Iʼll wait until I get back before pushing.

Great, thanks.  No rush.



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-07-10  9:48       ` Eli Zaretskii
  2021-07-12  8:27         ` Robert Pluim
@ 2021-09-13 12:36         ` Eli Zaretskii
  2021-09-13 15:44           ` Robert Pluim
  1 sibling, 1 reply; 73+ messages in thread
From: Eli Zaretskii @ 2021-09-13 12:36 UTC (permalink / raw)
  To: rpluim; +Cc: emacs-devel

> Date: Sat, 10 Jul 2021 12:48:41 +0300
> From: Eli Zaretskii <eliz@gnu.org>
> Cc: emacs-devel@gnu.org
> 
> > From: Robert Pluim <rpluim@gmail.com>
> > Cc: emacs-devel@gnu.org
> > Date: Sat, 10 Jul 2021 11:45:47 +0200
> > 
> > >>>>> On Sat, 10 Jul 2021 12:37:09 +0300, Eli Zaretskii <eliz@gnu.org> said:
> > 
> >     Eli> I thought we also decided to introduce a new script, 'emoji', to make
> >     Eli> the fontset definition and customizations easier.  Was I dreaming?
> >     Eli> Because I cannot seem to be able to find that part in the patches
> >     Eli> posted to those two threads.
> > 
> > My version has the following. If more is needed tell me. Iʼve attached
> > the latest version.
> 
> Looks fine, thanks.
> 
> I think etc/TODO needs to be updated when this lands?

Robert,

Any progress with this?  We'd like to start the pretest of Emacs 28.1
soon, and it would be a shame not to have this in Emacs 28.

TIA



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-13 12:36         ` Eli Zaretskii
@ 2021-09-13 15:44           ` Robert Pluim
  2021-09-13 16:07             ` Eli Zaretskii
  2021-09-13 16:36             ` Jean-Christophe Helary
  0 siblings, 2 replies; 73+ messages in thread
From: Robert Pluim @ 2021-09-13 15:44 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

>>>>> On Mon, 13 Sep 2021 15:36:27 +0300, Eli Zaretskii <eliz@gnu.org> said:

    Eli> Robert,

    Eli> Any progress with this?  We'd like to start the pretest of Emacs 28.1
    Eli> soon, and it would be a shame not to have this in Emacs 28.

Hi Eli, my break from computers lasted a little longer than expected.

Iʼm finishing it up, and just need to test it on macOS. Is the end of
the week OK, or does it need to be sooner?

Thanks

Robert
-- 



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-13 15:44           ` Robert Pluim
@ 2021-09-13 16:07             ` Eli Zaretskii
  2021-09-13 16:36             ` Jean-Christophe Helary
  1 sibling, 0 replies; 73+ messages in thread
From: Eli Zaretskii @ 2021-09-13 16:07 UTC (permalink / raw)
  To: Robert Pluim; +Cc: emacs-devel

> From: Robert Pluim <rpluim@gmail.com>
> Cc: emacs-devel@gnu.org
> Date: Mon, 13 Sep 2021 17:44:26 +0200
> 
> Hi Eli, my break from computers lasted a little longer than expected.

Breaks are important ;-)

> Iʼm finishing it up, and just need to test it on macOS. Is the end of
> the week OK, or does it need to be sooner?

Perfectly okay.  The current plan is to wait for Unicode 14.0 release
(should be tomorrow), then update Emacs to support all the changes
therein (will do over the next few days), and then start working on
cutting the release branch and moving towards the pretest.

Thanks.



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-13 15:44           ` Robert Pluim
  2021-09-13 16:07             ` Eli Zaretskii
@ 2021-09-13 16:36             ` Jean-Christophe Helary
  2021-09-17 13:01               ` Robert Pluim
  1 sibling, 1 reply; 73+ messages in thread
From: Jean-Christophe Helary @ 2021-09-13 16:36 UTC (permalink / raw)
  To: Robert Pluim; +Cc: Eli Zaretskii, emacs-devel



> On Sep 14, 2021, at 0:44, Robert Pluim <rpluim@gmail.com> wrote:
> 
> Iʼm finishing it up, and just need to test it on macOS. Is the end of
> the week OK, or does it need to be sooner?

If you need testers, let me know.

-- 
Jean-Christophe Helary @brandelune
https://mac4translators.blogspot.com
https://sr.ht/~brandelune/omegat-as-a-book/




^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-13 16:36             ` Jean-Christophe Helary
@ 2021-09-17 13:01               ` Robert Pluim
  2021-09-17 13:42                 ` Jean-Christophe Helary
                                   ` (4 more replies)
  0 siblings, 5 replies; 73+ messages in thread
From: Robert Pluim @ 2021-09-17 13:01 UTC (permalink / raw)
  To: Jean-Christophe Helary; +Cc: Eli Zaretskii, emacs-devel

>>>>> On Tue, 14 Sep 2021 01:36:23 +0900, Jean-Christophe Helary <lists@traduction-libre.org> said:

    >> On Sep 14, 2021, at 0:44, Robert Pluim <rpluim@gmail.com> wrote:
    >> 
    >> Iʼm finishing it up, and just need to test it on macOS. Is the end of
    >> the week OK, or does it need to be sooner?

    Jean-Christophe> If you need testers, let me know.

Iʼve just pushed it to master. Itʼs now based on Unicode 14, because
Eli installed the Unicode 14 changes before I got around to pushing
:-)

If youʼre not on a system with Noto Color Emoji installed, you'll need
something like

(set-fontset-font t 'emoji
                  '("Apple Color Emoji" . "iso10646-1") nil 'prepend)

or

(set-fontset-font t 'emoji
                  '("Segoe Emoji UI" . "iso10646-1") nil 'prepend)

to get a nice font used for them.

Robert
-- 



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-17 13:01               ` Robert Pluim
@ 2021-09-17 13:42                 ` Jean-Christophe Helary
  2021-09-17 13:50                   ` Robert Pluim
  2021-09-17 15:39                 ` Stephen Berman
                                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 73+ messages in thread
From: Jean-Christophe Helary @ 2021-09-17 13:42 UTC (permalink / raw)
  To: Robert Pluim; +Cc: Eli Zaretskii, emacs-devel



> On Sep 17, 2021, at 22:01, Robert Pluim <rpluim@gmail.com> wrote:
> 
>>>>>> On Tue, 14 Sep 2021 01:36:23 +0900, Jean-Christophe Helary <lists@traduction-libre.org> said:
> 
>>> On Sep 14, 2021, at 0:44, Robert Pluim <rpluim@gmail.com> wrote:
>>> 
>>> Iʼm finishing it up, and just need to test it on macOS. Is the end of
>>> the week OK, or does it need to be sooner?
> 
>    Jean-Christophe> If you need testers, let me know.
> 
> Iʼve just pushed it to master. Itʼs now based on Unicode 14, because
> Eli installed the Unicode 14 changes before I got around to pushing
> :-)
> 
> If youʼre not on a system with Noto Color Emoji installed, you'll need
> something like
> 
> (set-fontset-font t 'emoji
>                  '("Apple Color Emoji" . "iso10646-1") nil 'prepend)
> 
> or
> 
> (set-fontset-font t 'emoji
>                  '("Segoe Emoji UI" . "iso10646-1") nil 'prepend)
> 
> to get a nice font used for them.

Robert,

Would you mind specifying what to test and how to test it ?

-- 
Jean-Christophe Helary @brandelune
https://mac4translators.blogspot.com
https://sr.ht/~brandelune/omegat-as-a-book/




^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-17 13:42                 ` Jean-Christophe Helary
@ 2021-09-17 13:50                   ` Robert Pluim
  2021-09-17 15:51                     ` Kévin Le Gouguec
                                       ` (2 more replies)
  0 siblings, 3 replies; 73+ messages in thread
From: Robert Pluim @ 2021-09-17 13:50 UTC (permalink / raw)
  To: Jean-Christophe Helary; +Cc: Eli Zaretskii, emacs-devel

>>>>> On Fri, 17 Sep 2021 22:42:46 +0900, Jean-Christophe Helary <lists@traduction-libre.org> said:

    Jean-Christophe> Robert,

    Jean-Christophe> Would you mind specifying what to test and how to test it ?

It should all Just Work™ :-)

From admin/notes/unicode:

    Visit "emoji-data.txt" with the rebuilt Emacs, and check that an
    appropriate font is being used for the emoji (by default Emacs uses
    "Noto Color Emoji").  Running the following command in that buffer
    will give you an idea of which codepoints are not supported by
    whichever font Emacs is using.

    (defun check-emoji-coverage (font-name-regexp)
    "Display a buffer containing emoji codepoints for which FONT-NAME is not used.
    This must be run from a buffer in the format of emoji-data.txt.
    FONT-NAME-REGEXP is checked using `string-match'."
    (interactive "MFont Name: ")
    (save-excursion
    (goto-char (point-min))
    (let (res char name ifont)
      (while (re-search-forward "; Emoji [^(]+(\\(.\\)[).\uFE0F]" nil t)
        (setq char (aref (match-string 1) 0))
        (setq ifont (car (internal-char-font nil char)))
        (when ifont
          (setq name (font-xlfd-name ifont)))
        (if (or (not ifont) (not (string-match font-name-regexp name)))
            (setq res (concat (string char) res))))
      (when res
        (with-output-to-temp-buffer "*Check-Emoji-Coverage*"
          (princ (format "Font not matching '%s' was used for the following characters:\n%s"
                         font-name-regexp (reverse res))))))))


Robert
-- 



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-17 13:01               ` Robert Pluim
  2021-09-17 13:42                 ` Jean-Christophe Helary
@ 2021-09-17 15:39                 ` Stephen Berman
  2021-09-17 16:01                   ` Eli Zaretskii
  2021-09-17 18:48                 ` Eli Zaretskii
                                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 73+ messages in thread
From: Stephen Berman @ 2021-09-17 15:39 UTC (permalink / raw)
  To: Robert Pluim; +Cc: Jean-Christophe Helary, Eli Zaretskii, emacs-devel

On Fri, 17 Sep 2021 15:01:37 +0200 Robert Pluim <rpluim@gmail.com> wrote:

>>>>>> On Tue, 14 Sep 2021 01:36:23 +0900, Jean-Christophe Helary
>> <lists@traduction-libre.org> said:
>
>     >> On Sep 14, 2021, at 0:44, Robert Pluim <rpluim@gmail.com> wrote:
>     >> 
>     >> Iʼm finishing it up, and just need to test it on macOS. Is the end of
>     >> the week OK, or does it need to be sooner?
>
>     Jean-Christophe> If you need testers, let me know.
>
> Iʼve just pushed it to master. Itʼs now based on Unicode 14, because
> Eli installed the Unicode 14 changes before I got around to pushing
> :-)

I just pulled from master and did make bootstrap.  Starting emacs -Q
fails with "Invalid script or charset name: latin".  No frame appears
and there's no out shell output.  Could that be due to your commit?
FWIW, I do have Noto Color Emoji installed.  Also, emacs -Q -nw starts
fine and appears to run fine as well.

Steve Berman



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-17 13:50                   ` Robert Pluim
@ 2021-09-17 15:51                     ` Kévin Le Gouguec
  2021-09-17 16:43                       ` Robert Pluim
  2021-09-17 15:58                     ` Jean-Christophe Helary
  2021-09-17 16:35                     ` Daniel Martín
  2 siblings, 1 reply; 73+ messages in thread
From: Kévin Le Gouguec @ 2021-09-17 15:51 UTC (permalink / raw)
  To: Robert Pluim; +Cc: emacs-devel

Hi Robert, thanks for this!

I've tried your changes out and they work mostly as I expected; I'm
observing something I can't quite explain though, I don't know if this
behaviour is intended or not:

With emacs -Q, M-x check-emoji-coverage "Noto Color Emoji" initially
yields this:

> #*0©®↔▶◀☎♀♂♠♣♥♨🛝🟰🥹🧌🩻🪩🪷🫃🫗🫠🫰

With an init file that sets font-use-system-font to t, I get:

> #*0©®‼⁉↔↩⌚⌨Ⓜ▪▶◀◻☀☂☄☎☑☝☠☢☦☪☮☯☸☺♀♂♈♟♠♣♥♨♻✂✈✒✔✖✝✡✳❄❇❣❤➡🛝🟰🥹🧌🩻🪩🪷🫃🫗🫠🫰

In both cases, if I then run:

> (set-fontset-font t 'emoji "Noto Color Emoji" nil 'prepend)

and re-run check-emoji-coverage, I get this:

> #*0©®🛝🟰🥹🧌🩻🪩🪷🫃🫗🫠🫰

… which is what I would expect (i.e. mostly Unicode 14 codepoints which
are not covered yet).

I see that fontset.el specifies FONT-SPEC as '("Noto Color Emoji"
. "iso10646-1"), but I don't see why that should discriminate against
any Unicode character?


Again, thanks for making Emoji easier to tweak in Emacs.

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-17 13:50                   ` Robert Pluim
  2021-09-17 15:51                     ` Kévin Le Gouguec
@ 2021-09-17 15:58                     ` Jean-Christophe Helary
  2021-09-17 16:35                     ` Daniel Martín
  2 siblings, 0 replies; 73+ messages in thread
From: Jean-Christophe Helary @ 2021-09-17 15:58 UTC (permalink / raw)
  To: Robert Pluim; +Cc: Eli Zaretskii, emacs-devel



> On Sep 17, 2021, at 22:50, Robert Pluim <rpluim@gmail.com> wrote:
> 
>>>>>> On Fri, 17 Sep 2021 22:42:46 +0900, Jean-Christophe Helary <lists@traduction-libre.org> said:
> 
>    Jean-Christophe> Robert,
> 
>    Jean-Christophe> Would you mind specifying what to test and how to test it ?
> 
> It should all Just Work™ :-)

I guess it works then. I have a list of strings where some are "emoji" in black and white, some have a colored representation.


-- 
Jean-Christophe Helary @brandelune
https://mac4translators.blogspot.com
https://sr.ht/~brandelune/omegat-as-a-book/




^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-17 15:39                 ` Stephen Berman
@ 2021-09-17 16:01                   ` Eli Zaretskii
  2021-09-17 16:34                     ` Stephen Berman
  2021-09-17 16:55                     ` martin rudalics
  0 siblings, 2 replies; 73+ messages in thread
From: Eli Zaretskii @ 2021-09-17 16:01 UTC (permalink / raw)
  To: Stephen Berman; +Cc: lists, rpluim, emacs-devel

> From: Stephen Berman <stephen.berman@gmx.net>
> Cc: Jean-Christophe Helary <lists@traduction-libre.org>,  Eli Zaretskii
>  <eliz@gnu.org>,  emacs-devel@gnu.org
> Date: Fri, 17 Sep 2021 17:39:02 +0200
> 
> I just pulled from master and did make bootstrap.  Starting emacs -Q
> fails with "Invalid script or charset name: latin".  No frame appears
> and there's no out shell output.  Could that be due to your commit?

It could be due to changes related to Unicode 14.

Can you show a backtrace from this error, preferably both C and Lisp?

Thanks.



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-17 16:01                   ` Eli Zaretskii
@ 2021-09-17 16:34                     ` Stephen Berman
  2021-09-17 16:58                       ` Robert Pluim
  2021-09-17 16:55                     ` martin rudalics
  1 sibling, 1 reply; 73+ messages in thread
From: Stephen Berman @ 2021-09-17 16:34 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: lists, rpluim, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 776 bytes --]

On Fri, 17 Sep 2021 19:01:59 +0300 Eli Zaretskii <eliz@gnu.org> wrote:

>> From: Stephen Berman <stephen.berman@gmx.net>
>> Cc: Jean-Christophe Helary <lists@traduction-libre.org>,  Eli Zaretskii
>>  <eliz@gnu.org>,  emacs-devel@gnu.org
>> Date: Fri, 17 Sep 2021 17:39:02 +0200
>>
>> I just pulled from master and did make bootstrap.  Starting emacs -Q
>> fails with "Invalid script or charset name: latin".  No frame appears
>> and there's no out shell output.  Could that be due to your commit?
>
> It could be due to changes related to Unicode 14.
>
> Can you show a backtrace from this error, preferably both C and Lisp?

Attached.  (I built with 'CFLAGS=-Og -g3' and yet many values in the
backtrace are optimized out; is that normal?)

Steve Berman


[-- Attachment #2: backtrace --]
[-- Type: application/octet-stream, Size: 64878 bytes --]

(gdb) 
1603		error ("Invalid script or charset name: %s",
(gdb) 

Thread 1 "emacs" hit Breakpoint 3, Fset_fontset_font (
    name=name@entry=XIL(0xd42ca4), target=target@entry=XIL(0x94e0), 
    font_spec=font_spec@entry=XIL(0xe1cd4d), frame=frame@entry=XIL(0), 
    add=add@entry=XIL(0))
    at /home/steve/src/emacs/emacs-master/src/fontset.c:1492
1492	{
(gdb) bt full
#0  Fset_fontset_font
    (name=name@entry=XIL(0xd42ca4), target=target@entry=XIL(0x94e0), font_spec=font_spec@entry=XIL(0xe1cd4d), frame=frame@entry=XIL(0), add=add@entry=XIL(0))
    at /home/steve/src/emacs/emacs-master/src/fontset.c:1492
        fontset = <optimized out>
        font_def = <optimized out>
        registry = <optimized out>
        family = <optimized out>
        range_list = <optimized out>
        charset = <optimized out>
        fontname = <optimized out>
        ascii_changed = <optimized out>
#1  0x00000000005d9fb2 in fontset_from_font
    (font_object=font_object@entry=XIL(0xe1c8d5))
    at /home/steve/src/emacs/emacs-master/src/fontset.c:1802
        target = XIL(0x94e0)
        font_name = XIL(0xd42c44)
        font_spec = XIL(0xe1cd4d)
        registry = XIL(0x8d30)
        fontset_spec = <optimized out>
        alias = <optimized out>
        name = XIL(0xd42ca4)
        fontset = XIL(0xe1cae5)
        val = <optimized out>
#2  0x00000000004ccd8c in x_new_font
    (f=0xb56f68, font_object=XIL(0xe1c8d5), fontset=-1)
    at /home/steve/src/emacs/emacs-master/src/xterm.c:10298
        font = 0xe1c8d0
        unit = <optimized out>
        font_ascent = 0
        font_descent = 0
#3  0x000000000042f846 in gui_set_font
--Type <RET> for more, q to quit, c to continue without paging--c
    (f=0xb56f68, arg=XIL(0xd42c44), oldval=XIL(0)) at /home/steve/src/emacs/emacs-master/src/frame.c:4638
        font_object = XIL(0xe1c8d5)
        fontset = -1
        font_param = XIL(0xd42b24)
#4  0x000000000042ddea in gui_set_frame_parameters (f=f@entry=0xb56f68, alist=<optimized out>, alist@entry=XIL(0x7fffffffc3f3)) at /home/steve/src/emacs/emacs-master/src/frame.c:4232
        param_index = <optimized out>
        old_value = XIL(0)
        prop = XIL(0x6db0)
        val = <optimized out>
        tail = <optimized out>
        frame = XIL(0xb56f6d)
        width = -1
        height = -1
        width_change = false
        height_change = false
        left = XIL(0x60)
        top = XIL(0x60)
        icon_left = XIL(0x60)
        icon_top = XIL(0x60)
        fullscreen = XIL(0)
        fullscreen_change = false
        parms = <optimized out>
        values = 0x7fffffffc318
        i = 0
        j = <optimized out>
        size = <optimized out>
        left_no_change = false
        top_no_change = false
        icon_left_no_change = false
        icon_top_no_change = false
        parent_done = -1
        outer_done = -1
        sa_avail = <optimized out>
        sa_count = 16
#5  0x0000000000430cb2 in gui_default_parameter (f=f@entry=0xb56f68, alist=alist@entry=XIL(0xb4ea23), prop=prop@entry=XIL(0x6db0), deflt=deflt@entry=XIL(0xe1c8d5), xprop=xprop@entry=0x60248f "font", xclass=xclass@entry=0x600875 "Font", type=RES_TYPE_STRING) at /home/steve/src/emacs/emacs-master/src/frame.c:5403
        tem = XIL(0xe1c8d5)
        arg = XIL(0x7fffffffc3f3)
#6  0x00000000004e0fec in x_default_font_parameter (f=f@entry=0xb56f68, parms=parms@entry=XIL(0xb4ea23)) at /home/steve/src/emacs/emacs-master/src/xfns.c:3609
        dpyinfo = <optimized out>
        font_param = <optimized out>
        font = XIL(0xe1c8d5)
#7  0x00000000004e18d3 in Fx_create_frame (parms=XIL(0xb4ea23)) at /home/steve/src/emacs/emacs-master/src/xfns.c:3883
        f = 0xb56f68
        frame = XIL(0xb56f6d)
        tem = <optimized out>
        name = XIL(0x60)
        minibuffer_only = <optimized out>
        undecorated = <optimized out>
        override_redirect = <optimized out>
        window_prompting = 0
        count = <optimized out>
        display = <optimized out>
        dpyinfo = 0xbf67b0
        parent = <optimized out>
        parent_frame = <optimized out>
        kb = <optimized out>
#8  0x0000000000571944 in funcall_subr (subr=0x9a28e0 <Sx_create_frame>, numargs=numargs@entry=1, args=args@entry=0x7fffffffc628) at /home/steve/src/emacs/emacs-master/src/eval.c:3126
        internal_argbuf = {XIL(0x1), XIL(0x57d41f), XIL(0x7fffffffc630), XIL(0xf), XIL(0x7ffff23666db), XIL(0x2f40), make_fixnum(3), make_fixnum(0)}
        internal_args = <optimized out>
#9  0x00000000005704d7 in Ffuncall (nargs=2, args=args@entry=0x7fffffffc620) at /home/steve/src/emacs/emacs-master/src/eval.c:3051
        fun = <optimized out>
        original_fun = XIL(0x7ffff1756108)
        funcar = <optimized out>
        numargs = 1
        val = <optimized out>
        count = 14
#10 0x00000000005a48d8 in exec_byte_code (bytestr=<optimized out>, vector=XIL(0x7ffff23667dd), maxdepth=<optimized out>, args_template=args_template@entry=make_fixnum(256), nargs=nargs@entry=1, args=<optimized out>, args@entry=0x7fffffffc8c8) at /home/steve/src/emacs/emacs-master/src/bytecode.c:632
        op = <optimized out>
        type = <optimized out>
        targets = {0x5a65f0 <exec_byte_code+8857>, 0x5a6607 <exec_byte_code+8880>, 0x5a6639 <exec_byte_code+8930>, 0x5a663b <exec_byte_code+8932>, 0x5a663d <exec_byte_code+8934>, 0x5a6607 <exec_byte_code+8880>, 0x5a663f <exec_byte_code+8936>, 0x5a6674 <exec_byte_code+8989>, 0x5a45c5 <exec_byte_code+622>, 0x5a4612 <exec_byte_code+699>, 0x5a4614 <exec_byte_code+701>, 0x5a4616 <exec_byte_code+703>, 0x5a4618 <exec_byte_code+705>, 0x5a45c5 <exec_byte_code+622>, 0x5a461a <exec_byte_code+707>, 0x5a45b3 <exec_byte_code+604>, 0x5a476b <exec_byte_code+1044>, 0x5a47ce <exec_byte_code+1143>, 0x5a47d0 <exec_byte_code+1145>, 0x5a47d2 <exec_byte_code+1147>, 0x5a47d4 <exec_byte_code+1149>, 0x5a476b <exec_byte_code+1044>, 0x5a47e8 <exec_byte_code+1169>, 0x5a47d6 <exec_byte_code+1151>, 0x5a484a <exec_byte_code+1267>, 0x5a4895 <exec_byte_code+1342>, 0x5a4897 <exec_byte_code+1344>, 0x5a4899 <exec_byte_code+1346>, 0x5a489b <exec_byte_code+1348>, 0x5a484a <exec_byte_code+1267>, 0x5a482f <exec_byte_code+1240>, 0x5a4838 <exec_byte_code+1249>, 0x5a48b8 <exec_byte_code+1377>, 0x5a48f6 <exec_byte_code+1439>, 0x5a48f8 <exec_byte_code+1441>, 0x5a48fa <exec_byte_code+1443>, 0x5a48fc <exec_byte_code+1445>, 0x5a48b8 <exec_byte_code+1377>, 0x5a489d <exec_byte_code+1350>, 0x5a48a6 <exec_byte_code+1359>, 0x5a4919 <exec_byte_code+1474>, 0x5a496a <exec_byte_code+1555>, 0x5a496c <exec_byte_code+1557>, 0x5a496e <exec_byte_code+1559>, 0x5a4970 <exec_byte_code+1561>, 0x5a4919 <exec_byte_code+1474>, 0x5a48fe <exec_byte_code+1447>, 0x5a4907 <exec_byte_code+1456>, 0x5a4e77 <exec_byte_code+2848>, 0x5a4e3d <exec_byte_code+2790>, 0x5a4dcd <exec_byte_code+2678>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a5004 <exec_byte_code+3245>, 0x5a50b0 <exec_byte_code+3417>, 0x5a50e6 <exec_byte_code+3471>, 0x5a512e <exec_byte_code+3543>, 0x5a5176 <exec_byte_code+3615>, 0x5a46ae <exec_byte_code+855>, 0x5a46f2 <exec_byte_code+923>, 0x5a51be <exec_byte_code+3687>, 0x5a4670 <exec_byte_code+793>, 0x5a472d <exec_byte_code+982>, 0x5a51f5 <exec_byte_code+3742>, 0x5a5230 <exec_byte_code+3801>, 0x5a525d <exec_byte_code+3846>, 0x5a5298 <exec_byte_code+3905>, 0x5a52d2 <exec_byte_code+3963>, 0x5a535c <exec_byte_code+4101>, 0x5a5389 <exec_byte_code+4146>, 0x5a53c4 <exec_byte_code+4205>, 0x5a540f <exec_byte_code+4280>, 0x5a543c <exec_byte_code+4325>, 0x5a5469 <exec_byte_code+4370>, 0x5a54a4 <exec_byte_code+4429>, 0x5a54df <exec_byte_code+4488>, 0x5a551a <exec_byte_code+4547>, 0x5a5565 <exec_byte_code+4622>, 0x5a559c <exec_byte_code+4677>, 0x5a55d3 <exec_byte_code+4732>, 0x5a5656 <exec_byte_code+4863>, 0x5a56aa <exec_byte_code+4947>, 0x5a56fe <exec_byte_code+5031>, 0x5a573e <exec_byte_code+5095>, 0x5a577e <exec_byte_code+5159>, 0x5a57be <exec_byte_code+5223>, 0x5a57fe <exec_byte_code+5287>, 0x5a583e <exec_byte_code+5351>, 0x5a5875 <exec_byte_code+5406>, 0x5a58d3 <exec_byte_code+5500>, 0x5a590a <exec_byte_code+5555>, 0x5a5941 <exec_byte_code+5610>, 0x5a5978 <exec_byte_code+5665>, 0x5a5a21 <exec_byte_code+5834>, 0x5a4cb7 <exec_byte_code+2400>, 0x5a5a64 <exec_byte_code+5901>, 0x5a5a91 <exec_byte_code+5946>, 0x5a5b0c <exec_byte_code+6069>, 0x5a5b4f <exec_byte_code+6136>, 0x5a5b92 <exec_byte_code+6203>, 0x5a5bbf <exec_byte_code+6248>, 0x5a5bea <exec_byte_code+6291>, 0x5a5c15 <exec_byte_code+6334>, 0x5a5c48 <exec_byte_code+6385>, 0x5a65f0 <exec_byte_code+8857>, 0x5a5c7a <exec_byte_code+6435>, 0x5a5ca5 <exec_byte_code+6478>, 0x5a5cd0 <exec_byte_code+6521>, 0x5a5cfb <exec_byte_code+6564>, 0x5a5d26 <exec_byte_code+6607>, 0x5a5d51 <exec_byte_code+6650>, 0x5a4cb7 <exec_byte_code+2400>, 0x5a65f0 <exec_byte_code+8857>, 0x5a5d7e <exec_byte_code+6695>, 0x5a5dbb <exec_byte_code+6756>, 0x5a5de8 <exec_byte_code+6801>, 0x5a5e15 <exec_byte_code+6846>, 0x5a5e50 <exec_byte_code+6905>, 0x5a5e8b <exec_byte_code+6964>, 0x5a5eb8 <exec_byte_code+7009>, 0x5a5f5d <exec_byte_code+7174>, 0x5a5f98 <exec_byte_code+7233>, 0x5a5fd3 <exec_byte_code+7292>, 0x5a600e <exec_byte_code+7351>, 0x5a6039 <exec_byte_code+7394>, 0x5a65f0 <exec_byte_code+8857>, 0x5a4c5b <exec_byte_code+2308>, 0x5a4999 <exec_byte_code+1602>, 0x5a4632 <exec_byte_code+731>, 0x5a49fb <exec_byte_code+1700>, 0x5a4a35 <exec_byte_code+1758>, 0x5a4a73 <exec_byte_code+1820>, 0x5a4bfe <exec_byte_code+2215>, 0x5a4c3c <exec_byte_code+2277>, 0x5a4806 <exec_byte_code+1199>, 0x5a4c98 <exec_byte_code+2369>, 0x5a4ce3 <exec_byte_code+2444>, 0x5a4d61 <exec_byte_code+2570>, 0x5a4d8d <exec_byte_code+2614>, 0x5a4ea4 <exec_byte_code+2893>, 0x5a4efb <exec_byte_code+2980>, 0x5a4f40 <exec_byte_code+3049>, 0x5a4f89 <exec_byte_code+3122>, 0x5a4972 <exec_byte_code+1563>, 0x5a6066 <exec_byte_code+7439>, 0x5a60b1 <exec_byte_code+7514>, 0x5a60de <exec_byte_code+7559>, 0x5a610b <exec_byte_code+7604>, 0x5a6138 <exec_byte_code+7649>, 0x5a6165 <exec_byte_code+7694>, 0x5a61a0 <exec_byte_code+7753>, 0x5a61db <exec_byte_code+7812>, 0x5a6216 <exec_byte_code+7871>, 0x5a6251 <exec_byte_code+7930>, 0x5a630b <exec_byte_code+8116>, 0x5a6346 <exec_byte_code+8175>, 0x5a6381 <exec_byte_code+8234>, 0x5a63ae <exec_byte_code+8279>, 0x5a63e9 <exec_byte_code+8338>, 0x5a6424 <exec_byte_code+8397>, 0x5a645f <exec_byte_code+8456>, 0x5a649a <exec_byte_code+8515>, 0x5a59af <exec_byte_code+5720>, 0x5a59e6 <exec_byte_code+5775>, 0x5a64d1 <exec_byte_code+8570>, 0x5a656e <exec_byte_code+8727>, 0x5a65f0 <exec_byte_code+8857>, 0x5a4ab1 <exec_byte_code+1882>, 0x5a4b12 <exec_byte_code+1979>, 0x5a4b4d <exec_byte_code+2038>, 0x5a4b88 <exec_byte_code+2097>, 0x5a4bc3 <exec_byte_code+2156>, 0x5a5310 <exec_byte_code+4025>, 0x5a560a <exec_byte_code+4787>, 0x5a5ac0 <exec_byte_code+5993>, 0x5a66b2 <exec_byte_code+9051>, 0x5a66ef <exec_byte_code+9112>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a6737 <exec_byte_code+9184>, 0x5a677f <exec_byte_code+9256>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a6815 <exec_byte_code+9406> <repeats 64 times>}
        const_length = <optimized out>
        bytestr_length = 155
        vectorp = 0x7ffff23667e0
        quitcounter = 10 '\n'
        stack_items = <optimized out>
        sa_avail = <optimized out>
        sa_count = 14
        alloc = <optimized out>
        stack_base = <optimized out>
        top = 0x7fffffffc620
        stack_lim = <optimized out>
        bytestr_data = 0x7fffffffc640 "\300\001!\262\001\301\001!\302\002\236\303\304C\304C\002\211\203%"
        pc = 0x7fffffffc66d "\240\210\310\311\003\003#\216\312\002\242!\210\313 \237\211\203P"
        count = 14
        result = <optimized out>
#11 0x000000000057147c in fetch_and_exec_byte_code (fun=XIL(0x7ffff23667ad), syms_left=syms_left@entry=make_fixnum(256), nargs=nargs@entry=1, args=args@entry=0x7fffffffc8c8) at /home/steve/src/emacs/emacs-master/src/eval.c:3175
#12 0x0000000000572ab2 in funcall_lambda (fun=XIL(0x7ffff23667ad), nargs=nargs@entry=1, arg_vector=arg_vector@entry=0x7fffffffc8c8) at /home/steve/src/emacs/emacs-master/src/eval.c:3256
        val = <optimized out>
        syms_left = make_fixnum(256)
        next = <optimized out>
        lexenv = <optimized out>
        count = 14
        i = <optimized out>
        optional = <optimized out>
        rest = <optimized out>
#13 0x00000000005704e7 in Ffuncall (nargs=2, args=args@entry=0x7fffffffc8c0) at /home/steve/src/emacs/emacs-master/src/eval.c:3055
        fun = <optimized out>
        original_fun = XIL(0x7ffff1949238)
        funcar = <optimized out>
        numargs = 1
        val = <optimized out>
        count = 13
#14 0x00000000005a48d8 in exec_byte_code (bytestr=<optimized out>, vector=XIL(0x7ffff236676d), maxdepth=<optimized out>, args_template=args_template@entry=make_fixnum(257), nargs=nargs@entry=1, args=<optimized out>, args@entry=0x7fffffffcbb8) at /home/steve/src/emacs/emacs-master/src/bytecode.c:632
        op = <optimized out>
        type = <optimized out>
        targets = {0x5a65f0 <exec_byte_code+8857>, 0x5a6607 <exec_byte_code+8880>, 0x5a6639 <exec_byte_code+8930>, 0x5a663b <exec_byte_code+8932>, 0x5a663d <exec_byte_code+8934>, 0x5a6607 <exec_byte_code+8880>, 0x5a663f <exec_byte_code+8936>, 0x5a6674 <exec_byte_code+8989>, 0x5a45c5 <exec_byte_code+622>, 0x5a4612 <exec_byte_code+699>, 0x5a4614 <exec_byte_code+701>, 0x5a4616 <exec_byte_code+703>, 0x5a4618 <exec_byte_code+705>, 0x5a45c5 <exec_byte_code+622>, 0x5a461a <exec_byte_code+707>, 0x5a45b3 <exec_byte_code+604>, 0x5a476b <exec_byte_code+1044>, 0x5a47ce <exec_byte_code+1143>, 0x5a47d0 <exec_byte_code+1145>, 0x5a47d2 <exec_byte_code+1147>, 0x5a47d4 <exec_byte_code+1149>, 0x5a476b <exec_byte_code+1044>, 0x5a47e8 <exec_byte_code+1169>, 0x5a47d6 <exec_byte_code+1151>, 0x5a484a <exec_byte_code+1267>, 0x5a4895 <exec_byte_code+1342>, 0x5a4897 <exec_byte_code+1344>, 0x5a4899 <exec_byte_code+1346>, 0x5a489b <exec_byte_code+1348>, 0x5a484a <exec_byte_code+1267>, 0x5a482f <exec_byte_code+1240>, 0x5a4838 <exec_byte_code+1249>, 0x5a48b8 <exec_byte_code+1377>, 0x5a48f6 <exec_byte_code+1439>, 0x5a48f8 <exec_byte_code+1441>, 0x5a48fa <exec_byte_code+1443>, 0x5a48fc <exec_byte_code+1445>, 0x5a48b8 <exec_byte_code+1377>, 0x5a489d <exec_byte_code+1350>, 0x5a48a6 <exec_byte_code+1359>, 0x5a4919 <exec_byte_code+1474>, 0x5a496a <exec_byte_code+1555>, 0x5a496c <exec_byte_code+1557>, 0x5a496e <exec_byte_code+1559>, 0x5a4970 <exec_byte_code+1561>, 0x5a4919 <exec_byte_code+1474>, 0x5a48fe <exec_byte_code+1447>, 0x5a4907 <exec_byte_code+1456>, 0x5a4e77 <exec_byte_code+2848>, 0x5a4e3d <exec_byte_code+2790>, 0x5a4dcd <exec_byte_code+2678>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a5004 <exec_byte_code+3245>, 0x5a50b0 <exec_byte_code+3417>, 0x5a50e6 <exec_byte_code+3471>, 0x5a512e <exec_byte_code+3543>, 0x5a5176 <exec_byte_code+3615>, 0x5a46ae <exec_byte_code+855>, 0x5a46f2 <exec_byte_code+923>, 0x5a51be <exec_byte_code+3687>, 0x5a4670 <exec_byte_code+793>, 0x5a472d <exec_byte_code+982>, 0x5a51f5 <exec_byte_code+3742>, 0x5a5230 <exec_byte_code+3801>, 0x5a525d <exec_byte_code+3846>, 0x5a5298 <exec_byte_code+3905>, 0x5a52d2 <exec_byte_code+3963>, 0x5a535c <exec_byte_code+4101>, 0x5a5389 <exec_byte_code+4146>, 0x5a53c4 <exec_byte_code+4205>, 0x5a540f <exec_byte_code+4280>, 0x5a543c <exec_byte_code+4325>, 0x5a5469 <exec_byte_code+4370>, 0x5a54a4 <exec_byte_code+4429>, 0x5a54df <exec_byte_code+4488>, 0x5a551a <exec_byte_code+4547>, 0x5a5565 <exec_byte_code+4622>, 0x5a559c <exec_byte_code+4677>, 0x5a55d3 <exec_byte_code+4732>, 0x5a5656 <exec_byte_code+4863>, 0x5a56aa <exec_byte_code+4947>, 0x5a56fe <exec_byte_code+5031>, 0x5a573e <exec_byte_code+5095>, 0x5a577e <exec_byte_code+5159>, 0x5a57be <exec_byte_code+5223>, 0x5a57fe <exec_byte_code+5287>, 0x5a583e <exec_byte_code+5351>, 0x5a5875 <exec_byte_code+5406>, 0x5a58d3 <exec_byte_code+5500>, 0x5a590a <exec_byte_code+5555>, 0x5a5941 <exec_byte_code+5610>, 0x5a5978 <exec_byte_code+5665>, 0x5a5a21 <exec_byte_code+5834>, 0x5a4cb7 <exec_byte_code+2400>, 0x5a5a64 <exec_byte_code+5901>, 0x5a5a91 <exec_byte_code+5946>, 0x5a5b0c <exec_byte_code+6069>, 0x5a5b4f <exec_byte_code+6136>, 0x5a5b92 <exec_byte_code+6203>, 0x5a5bbf <exec_byte_code+6248>, 0x5a5bea <exec_byte_code+6291>, 0x5a5c15 <exec_byte_code+6334>, 0x5a5c48 <exec_byte_code+6385>, 0x5a65f0 <exec_byte_code+8857>, 0x5a5c7a <exec_byte_code+6435>, 0x5a5ca5 <exec_byte_code+6478>, 0x5a5cd0 <exec_byte_code+6521>, 0x5a5cfb <exec_byte_code+6564>, 0x5a5d26 <exec_byte_code+6607>, 0x5a5d51 <exec_byte_code+6650>, 0x5a4cb7 <exec_byte_code+2400>, 0x5a65f0 <exec_byte_code+8857>, 0x5a5d7e <exec_byte_code+6695>, 0x5a5dbb <exec_byte_code+6756>, 0x5a5de8 <exec_byte_code+6801>, 0x5a5e15 <exec_byte_code+6846>, 0x5a5e50 <exec_byte_code+6905>, 0x5a5e8b <exec_byte_code+6964>, 0x5a5eb8 <exec_byte_code+7009>, 0x5a5f5d <exec_byte_code+7174>, 0x5a5f98 <exec_byte_code+7233>, 0x5a5fd3 <exec_byte_code+7292>, 0x5a600e <exec_byte_code+7351>, 0x5a6039 <exec_byte_code+7394>, 0x5a65f0 <exec_byte_code+8857>, 0x5a4c5b <exec_byte_code+2308>, 0x5a4999 <exec_byte_code+1602>, 0x5a4632 <exec_byte_code+731>, 0x5a49fb <exec_byte_code+1700>, 0x5a4a35 <exec_byte_code+1758>, 0x5a4a73 <exec_byte_code+1820>, 0x5a4bfe <exec_byte_code+2215>, 0x5a4c3c <exec_byte_code+2277>, 0x5a4806 <exec_byte_code+1199>, 0x5a4c98 <exec_byte_code+2369>, 0x5a4ce3 <exec_byte_code+2444>, 0x5a4d61 <exec_byte_code+2570>, 0x5a4d8d <exec_byte_code+2614>, 0x5a4ea4 <exec_byte_code+2893>, 0x5a4efb <exec_byte_code+2980>, 0x5a4f40 <exec_byte_code+3049>, 0x5a4f89 <exec_byte_code+3122>, 0x5a4972 <exec_byte_code+1563>, 0x5a6066 <exec_byte_code+7439>, 0x5a60b1 <exec_byte_code+7514>, 0x5a60de <exec_byte_code+7559>, 0x5a610b <exec_byte_code+7604>, 0x5a6138 <exec_byte_code+7649>, 0x5a6165 <exec_byte_code+7694>, 0x5a61a0 <exec_byte_code+7753>, 0x5a61db <exec_byte_code+7812>, 0x5a6216 <exec_byte_code+7871>, 0x5a6251 <exec_byte_code+7930>, 0x5a630b <exec_byte_code+8116>, 0x5a6346 <exec_byte_code+8175>, 0x5a6381 <exec_byte_code+8234>, 0x5a63ae <exec_byte_code+8279>, 0x5a63e9 <exec_byte_code+8338>, 0x5a6424 <exec_byte_code+8397>, 0x5a645f <exec_byte_code+8456>, 0x5a649a <exec_byte_code+8515>, 0x5a59af <exec_byte_code+5720>, 0x5a59e6 <exec_byte_code+5775>, 0x5a64d1 <exec_byte_code+8570>, 0x5a656e <exec_byte_code+8727>, 0x5a65f0 <exec_byte_code+8857>, 0x5a4ab1 <exec_byte_code+1882>, 0x5a4b12 <exec_byte_code+1979>, 0x5a4b4d <exec_byte_code+2038>, 0x5a4b88 <exec_byte_code+2097>, 0x5a4bc3 <exec_byte_code+2156>, 0x5a5310 <exec_byte_code+4025>, 0x5a560a <exec_byte_code+4787>, 0x5a5ac0 <exec_byte_code+5993>, 0x5a66b2 <exec_byte_code+9051>, 0x5a66ef <exec_byte_code+9112>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a6737 <exec_byte_code+9184>, 0x5a677f <exec_byte_code+9256>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a6815 <exec_byte_code+9406> <repeats 64 times>}
        const_length = <optimized out>
        bytestr_length = 4
        vectorp = 0x7ffff2366770
        quitcounter = 1 '\001'
        stack_items = <optimized out>
        sa_avail = <optimized out>
        sa_count = 13
        alloc = <optimized out>
        stack_base = <optimized out>
        top = 0x7fffffffc8c0
        stack_lim = <optimized out>
        bytestr_data = 0x7fffffffc8d0 "\300\001!\207\377\177"
        pc = 0x7fffffffc8d3 "\207\377\177"
        count = 13
        result = <optimized out>
#15 0x000000000057147c in fetch_and_exec_byte_code (fun=XIL(0x7ffff236671d), syms_left=syms_left@entry=make_fixnum(257), nargs=nargs@entry=1, args=args@entry=0x7fffffffcbb8) at /home/steve/src/emacs/emacs-master/src/eval.c:3175
#16 0x0000000000572ab2 in funcall_lambda (fun=XIL(0x7ffff236671d), nargs=nargs@entry=1, arg_vector=arg_vector@entry=0x7fffffffcbb8) at /home/steve/src/emacs/emacs-master/src/eval.c:3256
        val = <optimized out>
        syms_left = make_fixnum(257)
        next = <optimized out>
        lexenv = <optimized out>
        count = 13
        i = <optimized out>
        optional = <optimized out>
        rest = <optimized out>
#17 0x00000000005704e7 in Ffuncall (nargs=nargs@entry=2, args=args@entry=0x7fffffffcbb0) at /home/steve/src/emacs/emacs-master/src/eval.c:3055
        fun = <optimized out>
        original_fun = XIL(0x7ffff236671d)
        funcar = <optimized out>
        numargs = 1
        val = <optimized out>
        count = 12
#18 0x00000000005707e2 in Fapply (nargs=2, args=0x7fffffffcbb0) at /home/steve/src/emacs/emacs-master/src/eval.c:2638
        i = <optimized out>
        funcall_nargs = <optimized out>
        funcall_args = 0x0
        spread_arg = XIL(0xb4e8a3)
        fun = XIL(0x7ffff236671d)
        sa_avail = 16384
        sa_count = 12
        numargs = <optimized out>
        retval = <optimized out>
#19 0x00000000005718f8 in funcall_subr (subr=0x9aaaa0 <Sapply>, numargs=numargs@entry=2, args=args@entry=0x7fffffffcbb0) at /home/steve/src/emacs/emacs-master/src/eval.c:3106
#20 0x00000000005704d7 in Ffuncall (nargs=3, args=args@entry=0x7fffffffcba8) at /home/steve/src/emacs/emacs-master/src/eval.c:3051
        fun = <optimized out>
        original_fun = XIL(0x2d60)
        funcar = <optimized out>
        numargs = 2
        val = <optimized out>
        count = 11
#21 0x00000000005a48d8 in exec_byte_code (bytestr=<optimized out>, vector=XIL(0x7ffff2027765), maxdepth=<optimized out>, args_template=args_template@entry=make_fixnum(128), nargs=nargs@entry=1, args=<optimized out>, args@entry=0x7fffffffce58) at /home/steve/src/emacs/emacs-master/src/bytecode.c:632
        op = <optimized out>
        type = <optimized out>
        targets = {0x5a65f0 <exec_byte_code+8857>, 0x5a6607 <exec_byte_code+8880>, 0x5a6639 <exec_byte_code+8930>, 0x5a663b <exec_byte_code+8932>, 0x5a663d <exec_byte_code+8934>, 0x5a6607 <exec_byte_code+8880>, 0x5a663f <exec_byte_code+8936>, 0x5a6674 <exec_byte_code+8989>, 0x5a45c5 <exec_byte_code+622>, 0x5a4612 <exec_byte_code+699>, 0x5a4614 <exec_byte_code+701>, 0x5a4616 <exec_byte_code+703>, 0x5a4618 <exec_byte_code+705>, 0x5a45c5 <exec_byte_code+622>, 0x5a461a <exec_byte_code+707>, 0x5a45b3 <exec_byte_code+604>, 0x5a476b <exec_byte_code+1044>, 0x5a47ce <exec_byte_code+1143>, 0x5a47d0 <exec_byte_code+1145>, 0x5a47d2 <exec_byte_code+1147>, 0x5a47d4 <exec_byte_code+1149>, 0x5a476b <exec_byte_code+1044>, 0x5a47e8 <exec_byte_code+1169>, 0x5a47d6 <exec_byte_code+1151>, 0x5a484a <exec_byte_code+1267>, 0x5a4895 <exec_byte_code+1342>, 0x5a4897 <exec_byte_code+1344>, 0x5a4899 <exec_byte_code+1346>, 0x5a489b <exec_byte_code+1348>, 0x5a484a <exec_byte_code+1267>, 0x5a482f <exec_byte_code+1240>, 0x5a4838 <exec_byte_code+1249>, 0x5a48b8 <exec_byte_code+1377>, 0x5a48f6 <exec_byte_code+1439>, 0x5a48f8 <exec_byte_code+1441>, 0x5a48fa <exec_byte_code+1443>, 0x5a48fc <exec_byte_code+1445>, 0x5a48b8 <exec_byte_code+1377>, 0x5a489d <exec_byte_code+1350>, 0x5a48a6 <exec_byte_code+1359>, 0x5a4919 <exec_byte_code+1474>, 0x5a496a <exec_byte_code+1555>, 0x5a496c <exec_byte_code+1557>, 0x5a496e <exec_byte_code+1559>, 0x5a4970 <exec_byte_code+1561>, 0x5a4919 <exec_byte_code+1474>, 0x5a48fe <exec_byte_code+1447>, 0x5a4907 <exec_byte_code+1456>, 0x5a4e77 <exec_byte_code+2848>, 0x5a4e3d <exec_byte_code+2790>, 0x5a4dcd <exec_byte_code+2678>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a5004 <exec_byte_code+3245>, 0x5a50b0 <exec_byte_code+3417>, 0x5a50e6 <exec_byte_code+3471>, 0x5a512e <exec_byte_code+3543>, 0x5a5176 <exec_byte_code+3615>, 0x5a46ae <exec_byte_code+855>, 0x5a46f2 <exec_byte_code+923>, 0x5a51be <exec_byte_code+3687>, 0x5a4670 <exec_byte_code+793>, 0x5a472d <exec_byte_code+982>, 0x5a51f5 <exec_byte_code+3742>, 0x5a5230 <exec_byte_code+3801>, 0x5a525d <exec_byte_code+3846>, 0x5a5298 <exec_byte_code+3905>, 0x5a52d2 <exec_byte_code+3963>, 0x5a535c <exec_byte_code+4101>, 0x5a5389 <exec_byte_code+4146>, 0x5a53c4 <exec_byte_code+4205>, 0x5a540f <exec_byte_code+4280>, 0x5a543c <exec_byte_code+4325>, 0x5a5469 <exec_byte_code+4370>, 0x5a54a4 <exec_byte_code+4429>, 0x5a54df <exec_byte_code+4488>, 0x5a551a <exec_byte_code+4547>, 0x5a5565 <exec_byte_code+4622>, 0x5a559c <exec_byte_code+4677>, 0x5a55d3 <exec_byte_code+4732>, 0x5a5656 <exec_byte_code+4863>, 0x5a56aa <exec_byte_code+4947>, 0x5a56fe <exec_byte_code+5031>, 0x5a573e <exec_byte_code+5095>, 0x5a577e <exec_byte_code+5159>, 0x5a57be <exec_byte_code+5223>, 0x5a57fe <exec_byte_code+5287>, 0x5a583e <exec_byte_code+5351>, 0x5a5875 <exec_byte_code+5406>, 0x5a58d3 <exec_byte_code+5500>, 0x5a590a <exec_byte_code+5555>, 0x5a5941 <exec_byte_code+5610>, 0x5a5978 <exec_byte_code+5665>, 0x5a5a21 <exec_byte_code+5834>, 0x5a4cb7 <exec_byte_code+2400>, 0x5a5a64 <exec_byte_code+5901>, 0x5a5a91 <exec_byte_code+5946>, 0x5a5b0c <exec_byte_code+6069>, 0x5a5b4f <exec_byte_code+6136>, 0x5a5b92 <exec_byte_code+6203>, 0x5a5bbf <exec_byte_code+6248>, 0x5a5bea <exec_byte_code+6291>, 0x5a5c15 <exec_byte_code+6334>, 0x5a5c48 <exec_byte_code+6385>, 0x5a65f0 <exec_byte_code+8857>, 0x5a5c7a <exec_byte_code+6435>, 0x5a5ca5 <exec_byte_code+6478>, 0x5a5cd0 <exec_byte_code+6521>, 0x5a5cfb <exec_byte_code+6564>, 0x5a5d26 <exec_byte_code+6607>, 0x5a5d51 <exec_byte_code+6650>, 0x5a4cb7 <exec_byte_code+2400>, 0x5a65f0 <exec_byte_code+8857>, 0x5a5d7e <exec_byte_code+6695>, 0x5a5dbb <exec_byte_code+6756>, 0x5a5de8 <exec_byte_code+6801>, 0x5a5e15 <exec_byte_code+6846>, 0x5a5e50 <exec_byte_code+6905>, 0x5a5e8b <exec_byte_code+6964>, 0x5a5eb8 <exec_byte_code+7009>, 0x5a5f5d <exec_byte_code+7174>, 0x5a5f98 <exec_byte_code+7233>, 0x5a5fd3 <exec_byte_code+7292>, 0x5a600e <exec_byte_code+7351>, 0x5a6039 <exec_byte_code+7394>, 0x5a65f0 <exec_byte_code+8857>, 0x5a4c5b <exec_byte_code+2308>, 0x5a4999 <exec_byte_code+1602>, 0x5a4632 <exec_byte_code+731>, 0x5a49fb <exec_byte_code+1700>, 0x5a4a35 <exec_byte_code+1758>, 0x5a4a73 <exec_byte_code+1820>, 0x5a4bfe <exec_byte_code+2215>, 0x5a4c3c <exec_byte_code+2277>, 0x5a4806 <exec_byte_code+1199>, 0x5a4c98 <exec_byte_code+2369>, 0x5a4ce3 <exec_byte_code+2444>, 0x5a4d61 <exec_byte_code+2570>, 0x5a4d8d <exec_byte_code+2614>, 0x5a4ea4 <exec_byte_code+2893>, 0x5a4efb <exec_byte_code+2980>, 0x5a4f40 <exec_byte_code+3049>, 0x5a4f89 <exec_byte_code+3122>, 0x5a4972 <exec_byte_code+1563>, 0x5a6066 <exec_byte_code+7439>, 0x5a60b1 <exec_byte_code+7514>, 0x5a60de <exec_byte_code+7559>, 0x5a610b <exec_byte_code+7604>, 0x5a6138 <exec_byte_code+7649>, 0x5a6165 <exec_byte_code+7694>, 0x5a61a0 <exec_byte_code+7753>, 0x5a61db <exec_byte_code+7812>, 0x5a6216 <exec_byte_code+7871>, 0x5a6251 <exec_byte_code+7930>, 0x5a630b <exec_byte_code+8116>, 0x5a6346 <exec_byte_code+8175>, 0x5a6381 <exec_byte_code+8234>, 0x5a63ae <exec_byte_code+8279>, 0x5a63e9 <exec_byte_code+8338>, 0x5a6424 <exec_byte_code+8397>, 0x5a645f <exec_byte_code+8456>, 0x5a649a <exec_byte_code+8515>, 0x5a59af <exec_byte_code+5720>, 0x5a59e6 <exec_byte_code+5775>, 0x5a64d1 <exec_byte_code+8570>, 0x5a656e <exec_byte_code+8727>, 0x5a65f0 <exec_byte_code+8857>, 0x5a4ab1 <exec_byte_code+1882>, 0x5a4b12 <exec_byte_code+1979>, 0x5a4b4d <exec_byte_code+2038>, 0x5a4b88 <exec_byte_code+2097>, 0x5a4bc3 <exec_byte_code+2156>, 0x5a5310 <exec_byte_code+4025>, 0x5a560a <exec_byte_code+4787>, 0x5a5ac0 <exec_byte_code+5993>, 0x5a66b2 <exec_byte_code+9051>, 0x5a66ef <exec_byte_code+9112>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a6737 <exec_byte_code+9184>, 0x5a677f <exec_byte_code+9256>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a6815 <exec_byte_code+9406> <repeats 64 times>}
        const_length = <optimized out>
        bytestr_length = 46
        vectorp = 0x7ffff2027768
        quitcounter = 1 '\001'
        stack_items = <optimized out>
        sa_avail = <optimized out>
        sa_count = 11
        alloc = <optimized out>
        stack_base = <optimized out>
        top = 0x7fffffffcba8
        stack_lim = <optimized out>
        bytestr_data = 0x7fffffffcc10 "\f\306\307\002\r\"\303\307\002\002\"\206)"
        pc = 0x7fffffffcc3d "\207"
        count = 11
        result = <optimized out>
#22 0x000000000057147c in fetch_and_exec_byte_code (fun=XIL(0x7ffff2027735), syms_left=syms_left@entry=make_fixnum(128), nargs=nargs@entry=1, args=args@entry=0x7fffffffce58) at /home/steve/src/emacs/emacs-master/src/eval.c:3175
#23 0x0000000000572ab2 in funcall_lambda (fun=XIL(0x7ffff2027735), nargs=nargs@entry=1, arg_vector=arg_vector@entry=0x7fffffffce58) at /home/steve/src/emacs/emacs-master/src/eval.c:3256
        val = <optimized out>
        syms_left = make_fixnum(128)
        next = <optimized out>
        lexenv = <optimized out>
        count = 11
        i = <optimized out>
        optional = <optimized out>
        rest = <optimized out>
#24 0x00000000005704e7 in Ffuncall (nargs=2, args=args@entry=0x7fffffffce50) at /home/steve/src/emacs/emacs-master/src/eval.c:3055
        fun = <optimized out>
        original_fun = XIL(0x7ffff160a160)
        funcar = <optimized out>
        numargs = 1
        val = <optimized out>
        count = 10
#25 0x00000000005a48d8 in exec_byte_code (bytestr=<optimized out>, vector=XIL(0x7ffff205eb15), maxdepth=<optimized out>, args_template=args_template@entry=make_fixnum(256), nargs=nargs@entry=1, args=<optimized out>, args@entry=0x7fffffffd180) at /home/steve/src/emacs/emacs-master/src/bytecode.c:632
        op = <optimized out>
        type = <optimized out>
        targets = {0x5a65f0 <exec_byte_code+8857>, 0x5a6607 <exec_byte_code+8880>, 0x5a6639 <exec_byte_code+8930>, 0x5a663b <exec_byte_code+8932>, 0x5a663d <exec_byte_code+8934>, 0x5a6607 <exec_byte_code+8880>, 0x5a663f <exec_byte_code+8936>, 0x5a6674 <exec_byte_code+8989>, 0x5a45c5 <exec_byte_code+622>, 0x5a4612 <exec_byte_code+699>, 0x5a4614 <exec_byte_code+701>, 0x5a4616 <exec_byte_code+703>, 0x5a4618 <exec_byte_code+705>, 0x5a45c5 <exec_byte_code+622>, 0x5a461a <exec_byte_code+707>, 0x5a45b3 <exec_byte_code+604>, 0x5a476b <exec_byte_code+1044>, 0x5a47ce <exec_byte_code+1143>, 0x5a47d0 <exec_byte_code+1145>, 0x5a47d2 <exec_byte_code+1147>, 0x5a47d4 <exec_byte_code+1149>, 0x5a476b <exec_byte_code+1044>, 0x5a47e8 <exec_byte_code+1169>, 0x5a47d6 <exec_byte_code+1151>, 0x5a484a <exec_byte_code+1267>, 0x5a4895 <exec_byte_code+1342>, 0x5a4897 <exec_byte_code+1344>, 0x5a4899 <exec_byte_code+1346>, 0x5a489b <exec_byte_code+1348>, 0x5a484a <exec_byte_code+1267>, 0x5a482f <exec_byte_code+1240>, 0x5a4838 <exec_byte_code+1249>, 0x5a48b8 <exec_byte_code+1377>, 0x5a48f6 <exec_byte_code+1439>, 0x5a48f8 <exec_byte_code+1441>, 0x5a48fa <exec_byte_code+1443>, 0x5a48fc <exec_byte_code+1445>, 0x5a48b8 <exec_byte_code+1377>, 0x5a489d <exec_byte_code+1350>, 0x5a48a6 <exec_byte_code+1359>, 0x5a4919 <exec_byte_code+1474>, 0x5a496a <exec_byte_code+1555>, 0x5a496c <exec_byte_code+1557>, 0x5a496e <exec_byte_code+1559>, 0x5a4970 <exec_byte_code+1561>, 0x5a4919 <exec_byte_code+1474>, 0x5a48fe <exec_byte_code+1447>, 0x5a4907 <exec_byte_code+1456>, 0x5a4e77 <exec_byte_code+2848>, 0x5a4e3d <exec_byte_code+2790>, 0x5a4dcd <exec_byte_code+2678>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a5004 <exec_byte_code+3245>, 0x5a50b0 <exec_byte_code+3417>, 0x5a50e6 <exec_byte_code+3471>, 0x5a512e <exec_byte_code+3543>, 0x5a5176 <exec_byte_code+3615>, 0x5a46ae <exec_byte_code+855>, 0x5a46f2 <exec_byte_code+923>, 0x5a51be <exec_byte_code+3687>, 0x5a4670 <exec_byte_code+793>, 0x5a472d <exec_byte_code+982>, 0x5a51f5 <exec_byte_code+3742>, 0x5a5230 <exec_byte_code+3801>, 0x5a525d <exec_byte_code+3846>, 0x5a5298 <exec_byte_code+3905>, 0x5a52d2 <exec_byte_code+3963>, 0x5a535c <exec_byte_code+4101>, 0x5a5389 <exec_byte_code+4146>, 0x5a53c4 <exec_byte_code+4205>, 0x5a540f <exec_byte_code+4280>, 0x5a543c <exec_byte_code+4325>, 0x5a5469 <exec_byte_code+4370>, 0x5a54a4 <exec_byte_code+4429>, 0x5a54df <exec_byte_code+4488>, 0x5a551a <exec_byte_code+4547>, 0x5a5565 <exec_byte_code+4622>, 0x5a559c <exec_byte_code+4677>, 0x5a55d3 <exec_byte_code+4732>, 0x5a5656 <exec_byte_code+4863>, 0x5a56aa <exec_byte_code+4947>, 0x5a56fe <exec_byte_code+5031>, 0x5a573e <exec_byte_code+5095>, 0x5a577e <exec_byte_code+5159>, 0x5a57be <exec_byte_code+5223>, 0x5a57fe <exec_byte_code+5287>, 0x5a583e <exec_byte_code+5351>, 0x5a5875 <exec_byte_code+5406>, 0x5a58d3 <exec_byte_code+5500>, 0x5a590a <exec_byte_code+5555>, 0x5a5941 <exec_byte_code+5610>, 0x5a5978 <exec_byte_code+5665>, 0x5a5a21 <exec_byte_code+5834>, 0x5a4cb7 <exec_byte_code+2400>, 0x5a5a64 <exec_byte_code+5901>, 0x5a5a91 <exec_byte_code+5946>, 0x5a5b0c <exec_byte_code+6069>, 0x5a5b4f <exec_byte_code+6136>, 0x5a5b92 <exec_byte_code+6203>, 0x5a5bbf <exec_byte_code+6248>, 0x5a5bea <exec_byte_code+6291>, 0x5a5c15 <exec_byte_code+6334>, 0x5a5c48 <exec_byte_code+6385>, 0x5a65f0 <exec_byte_code+8857>, 0x5a5c7a <exec_byte_code+6435>, 0x5a5ca5 <exec_byte_code+6478>, 0x5a5cd0 <exec_byte_code+6521>, 0x5a5cfb <exec_byte_code+6564>, 0x5a5d26 <exec_byte_code+6607>, 0x5a5d51 <exec_byte_code+6650>, 0x5a4cb7 <exec_byte_code+2400>, 0x5a65f0 <exec_byte_code+8857>, 0x5a5d7e <exec_byte_code+6695>, 0x5a5dbb <exec_byte_code+6756>, 0x5a5de8 <exec_byte_code+6801>, 0x5a5e15 <exec_byte_code+6846>, 0x5a5e50 <exec_byte_code+6905>, 0x5a5e8b <exec_byte_code+6964>, 0x5a5eb8 <exec_byte_code+7009>, 0x5a5f5d <exec_byte_code+7174>, 0x5a5f98 <exec_byte_code+7233>, 0x5a5fd3 <exec_byte_code+7292>, 0x5a600e <exec_byte_code+7351>, 0x5a6039 <exec_byte_code+7394>, 0x5a65f0 <exec_byte_code+8857>, 0x5a4c5b <exec_byte_code+2308>, 0x5a4999 <exec_byte_code+1602>, 0x5a4632 <exec_byte_code+731>, 0x5a49fb <exec_byte_code+1700>, 0x5a4a35 <exec_byte_code+1758>, 0x5a4a73 <exec_byte_code+1820>, 0x5a4bfe <exec_byte_code+2215>, 0x5a4c3c <exec_byte_code+2277>, 0x5a4806 <exec_byte_code+1199>, 0x5a4c98 <exec_byte_code+2369>, 0x5a4ce3 <exec_byte_code+2444>, 0x5a4d61 <exec_byte_code+2570>, 0x5a4d8d <exec_byte_code+2614>, 0x5a4ea4 <exec_byte_code+2893>, 0x5a4efb <exec_byte_code+2980>, 0x5a4f40 <exec_byte_code+3049>, 0x5a4f89 <exec_byte_code+3122>, 0x5a4972 <exec_byte_code+1563>, 0x5a6066 <exec_byte_code+7439>, 0x5a60b1 <exec_byte_code+7514>, 0x5a60de <exec_byte_code+7559>, 0x5a610b <exec_byte_code+7604>, 0x5a6138 <exec_byte_code+7649>, 0x5a6165 <exec_byte_code+7694>, 0x5a61a0 <exec_byte_code+7753>, 0x5a61db <exec_byte_code+7812>, 0x5a6216 <exec_byte_code+7871>, 0x5a6251 <exec_byte_code+7930>, 0x5a630b <exec_byte_code+8116>, 0x5a6346 <exec_byte_code+8175>, 0x5a6381 <exec_byte_code+8234>, 0x5a63ae <exec_byte_code+8279>, 0x5a63e9 <exec_byte_code+8338>, 0x5a6424 <exec_byte_code+8397>, 0x5a645f <exec_byte_code+8456>, 0x5a649a <exec_byte_code+8515>, 0x5a59af <exec_byte_code+5720>, 0x5a59e6 <exec_byte_code+5775>, 0x5a64d1 <exec_byte_code+8570>, 0x5a656e <exec_byte_code+8727>, 0x5a65f0 <exec_byte_code+8857>, 0x5a4ab1 <exec_byte_code+1882>, 0x5a4b12 <exec_byte_code+1979>, 0x5a4b4d <exec_byte_code+2038>, 0x5a4b88 <exec_byte_code+2097>, 0x5a4bc3 <exec_byte_code+2156>, 0x5a5310 <exec_byte_code+4025>, 0x5a560a <exec_byte_code+4787>, 0x5a5ac0 <exec_byte_code+5993>, 0x5a66b2 <exec_byte_code+9051>, 0x5a66ef <exec_byte_code+9112>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a6737 <exec_byte_code+9184>, 0x5a677f <exec_byte_code+9256>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a6815 <exec_byte_code+9406> <repeats 64 times>}
        const_length = <optimized out>
        bytestr_length = 284
        vectorp = 0x7ffff205eb18
        quitcounter = 1 '\001'
        stack_items = <optimized out>
        sa_avail = <optimized out>
        sa_count = 9
        alloc = <optimized out>
        stack_base = <optimized out>
        top = 0x7fffffffce50
        stack_lim = <optimized out>
        bytestr_data = 0x7fffffffce88 "\306\001\236A\307\002\236\203*"
        pc = 0x7fffffffcf48 ")\262\002\211\203", <incomplete sequence \346>
        count = 9
        result = <optimized out>
#26 0x000000000057147c in fetch_and_exec_byte_code (fun=XIL(0x7ffff205eadd), syms_left=syms_left@entry=make_fixnum(256), nargs=nargs@entry=1, args=args@entry=0x7fffffffd180) at /home/steve/src/emacs/emacs-master/src/eval.c:3175
#27 0x0000000000572ab2 in funcall_lambda (fun=XIL(0x7ffff205eadd), nargs=nargs@entry=1, arg_vector=arg_vector@entry=0x7fffffffd180) at /home/steve/src/emacs/emacs-master/src/eval.c:3256
        val = <optimized out>
        syms_left = make_fixnum(256)
        next = <optimized out>
        lexenv = <optimized out>
        count = 9
        i = <optimized out>
        optional = <optimized out>
        rest = <optimized out>
#28 0x00000000005704e7 in Ffuncall (nargs=2, args=args@entry=0x7fffffffd178) at /home/steve/src/emacs/emacs-master/src/eval.c:3055
        fun = <optimized out>
        original_fun = XIL(0x7ffff16414e8)
        funcar = <optimized out>
        numargs = 1
        val = <optimized out>
        count = 8
#29 0x00000000005a48d8 in exec_byte_code (bytestr=<optimized out>, vector=XIL(0x7ffff217371d), maxdepth=<optimized out>, args_template=args_template@entry=make_fixnum(0), nargs=nargs@entry=0, args=<optimized out>, args@entry=0x7fffffffd3e0) at /home/steve/src/emacs/emacs-master/src/bytecode.c:632
        op = <optimized out>
        type = <optimized out>
        targets = {0x5a65f0 <exec_byte_code+8857>, 0x5a6607 <exec_byte_code+8880>, 0x5a6639 <exec_byte_code+8930>, 0x5a663b <exec_byte_code+8932>, 0x5a663d <exec_byte_code+8934>, 0x5a6607 <exec_byte_code+8880>, 0x5a663f <exec_byte_code+8936>, 0x5a6674 <exec_byte_code+8989>, 0x5a45c5 <exec_byte_code+622>, 0x5a4612 <exec_byte_code+699>, 0x5a4614 <exec_byte_code+701>, 0x5a4616 <exec_byte_code+703>, 0x5a4618 <exec_byte_code+705>, 0x5a45c5 <exec_byte_code+622>, 0x5a461a <exec_byte_code+707>, 0x5a45b3 <exec_byte_code+604>, 0x5a476b <exec_byte_code+1044>, 0x5a47ce <exec_byte_code+1143>, 0x5a47d0 <exec_byte_code+1145>, 0x5a47d2 <exec_byte_code+1147>, 0x5a47d4 <exec_byte_code+1149>, 0x5a476b <exec_byte_code+1044>, 0x5a47e8 <exec_byte_code+1169>, 0x5a47d6 <exec_byte_code+1151>, 0x5a484a <exec_byte_code+1267>, 0x5a4895 <exec_byte_code+1342>, 0x5a4897 <exec_byte_code+1344>, 0x5a4899 <exec_byte_code+1346>, 0x5a489b <exec_byte_code+1348>, 0x5a484a <exec_byte_code+1267>, 0x5a482f <exec_byte_code+1240>, 0x5a4838 <exec_byte_code+1249>, 0x5a48b8 <exec_byte_code+1377>, 0x5a48f6 <exec_byte_code+1439>, 0x5a48f8 <exec_byte_code+1441>, 0x5a48fa <exec_byte_code+1443>, 0x5a48fc <exec_byte_code+1445>, 0x5a48b8 <exec_byte_code+1377>, 0x5a489d <exec_byte_code+1350>, 0x5a48a6 <exec_byte_code+1359>, 0x5a4919 <exec_byte_code+1474>, 0x5a496a <exec_byte_code+1555>, 0x5a496c <exec_byte_code+1557>, 0x5a496e <exec_byte_code+1559>, 0x5a4970 <exec_byte_code+1561>, 0x5a4919 <exec_byte_code+1474>, 0x5a48fe <exec_byte_code+1447>, 0x5a4907 <exec_byte_code+1456>, 0x5a4e77 <exec_byte_code+2848>, 0x5a4e3d <exec_byte_code+2790>, 0x5a4dcd <exec_byte_code+2678>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a5004 <exec_byte_code+3245>, 0x5a50b0 <exec_byte_code+3417>, 0x5a50e6 <exec_byte_code+3471>, 0x5a512e <exec_byte_code+3543>, 0x5a5176 <exec_byte_code+3615>, 0x5a46ae <exec_byte_code+855>, 0x5a46f2 <exec_byte_code+923>, 0x5a51be <exec_byte_code+3687>, 0x5a4670 <exec_byte_code+793>, 0x5a472d <exec_byte_code+982>, 0x5a51f5 <exec_byte_code+3742>, 0x5a5230 <exec_byte_code+3801>, 0x5a525d <exec_byte_code+3846>, 0x5a5298 <exec_byte_code+3905>, 0x5a52d2 <exec_byte_code+3963>, 0x5a535c <exec_byte_code+4101>, 0x5a5389 <exec_byte_code+4146>, 0x5a53c4 <exec_byte_code+4205>, 0x5a540f <exec_byte_code+4280>, 0x5a543c <exec_byte_code+4325>, 0x5a5469 <exec_byte_code+4370>, 0x5a54a4 <exec_byte_code+4429>, 0x5a54df <exec_byte_code+4488>, 0x5a551a <exec_byte_code+4547>, 0x5a5565 <exec_byte_code+4622>, 0x5a559c <exec_byte_code+4677>, 0x5a55d3 <exec_byte_code+4732>, 0x5a5656 <exec_byte_code+4863>, 0x5a56aa <exec_byte_code+4947>, 0x5a56fe <exec_byte_code+5031>, 0x5a573e <exec_byte_code+5095>, 0x5a577e <exec_byte_code+5159>, 0x5a57be <exec_byte_code+5223>, 0x5a57fe <exec_byte_code+5287>, 0x5a583e <exec_byte_code+5351>, 0x5a5875 <exec_byte_code+5406>, 0x5a58d3 <exec_byte_code+5500>, 0x5a590a <exec_byte_code+5555>, 0x5a5941 <exec_byte_code+5610>, 0x5a5978 <exec_byte_code+5665>, 0x5a5a21 <exec_byte_code+5834>, 0x5a4cb7 <exec_byte_code+2400>, 0x5a5a64 <exec_byte_code+5901>, 0x5a5a91 <exec_byte_code+5946>, 0x5a5b0c <exec_byte_code+6069>, 0x5a5b4f <exec_byte_code+6136>, 0x5a5b92 <exec_byte_code+6203>, 0x5a5bbf <exec_byte_code+6248>, 0x5a5bea <exec_byte_code+6291>, 0x5a5c15 <exec_byte_code+6334>, 0x5a5c48 <exec_byte_code+6385>, 0x5a65f0 <exec_byte_code+8857>, 0x5a5c7a <exec_byte_code+6435>, 0x5a5ca5 <exec_byte_code+6478>, 0x5a5cd0 <exec_byte_code+6521>, 0x5a5cfb <exec_byte_code+6564>, 0x5a5d26 <exec_byte_code+6607>, 0x5a5d51 <exec_byte_code+6650>, 0x5a4cb7 <exec_byte_code+2400>, 0x5a65f0 <exec_byte_code+8857>, 0x5a5d7e <exec_byte_code+6695>, 0x5a5dbb <exec_byte_code+6756>, 0x5a5de8 <exec_byte_code+6801>, 0x5a5e15 <exec_byte_code+6846>, 0x5a5e50 <exec_byte_code+6905>, 0x5a5e8b <exec_byte_code+6964>, 0x5a5eb8 <exec_byte_code+7009>, 0x5a5f5d <exec_byte_code+7174>, 0x5a5f98 <exec_byte_code+7233>, 0x5a5fd3 <exec_byte_code+7292>, 0x5a600e <exec_byte_code+7351>, 0x5a6039 <exec_byte_code+7394>, 0x5a65f0 <exec_byte_code+8857>, 0x5a4c5b <exec_byte_code+2308>, 0x5a4999 <exec_byte_code+1602>, 0x5a4632 <exec_byte_code+731>, 0x5a49fb <exec_byte_code+1700>, 0x5a4a35 <exec_byte_code+1758>, 0x5a4a73 <exec_byte_code+1820>, 0x5a4bfe <exec_byte_code+2215>, 0x5a4c3c <exec_byte_code+2277>, 0x5a4806 <exec_byte_code+1199>, 0x5a4c98 <exec_byte_code+2369>, 0x5a4ce3 <exec_byte_code+2444>, 0x5a4d61 <exec_byte_code+2570>, 0x5a4d8d <exec_byte_code+2614>, 0x5a4ea4 <exec_byte_code+2893>, 0x5a4efb <exec_byte_code+2980>, 0x5a4f40 <exec_byte_code+3049>, 0x5a4f89 <exec_byte_code+3122>, 0x5a4972 <exec_byte_code+1563>, 0x5a6066 <exec_byte_code+7439>, 0x5a60b1 <exec_byte_code+7514>, 0x5a60de <exec_byte_code+7559>, 0x5a610b <exec_byte_code+7604>, 0x5a6138 <exec_byte_code+7649>, 0x5a6165 <exec_byte_code+7694>, 0x5a61a0 <exec_byte_code+7753>, 0x5a61db <exec_byte_code+7812>, 0x5a6216 <exec_byte_code+7871>, 0x5a6251 <exec_byte_code+7930>, 0x5a630b <exec_byte_code+8116>, 0x5a6346 <exec_byte_code+8175>, 0x5a6381 <exec_byte_code+8234>, 0x5a63ae <exec_byte_code+8279>, 0x5a63e9 <exec_byte_code+8338>, 0x5a6424 <exec_byte_code+8397>, 0x5a645f <exec_byte_code+8456>, 0x5a649a <exec_byte_code+8515>, 0x5a59af <exec_byte_code+5720>, 0x5a59e6 <exec_byte_code+5775>, 0x5a64d1 <exec_byte_code+8570>, 0x5a656e <exec_byte_code+8727>, 0x5a65f0 <exec_byte_code+8857>, 0x5a4ab1 <exec_byte_code+1882>, 0x5a4b12 <exec_byte_code+1979>, 0x5a4b4d <exec_byte_code+2038>, 0x5a4b88 <exec_byte_code+2097>, 0x5a4bc3 <exec_byte_code+2156>, 0x5a5310 <exec_byte_code+4025>, 0x5a560a <exec_byte_code+4787>, 0x5a5ac0 <exec_byte_code+5993>, 0x5a66b2 <exec_byte_code+9051>, 0x5a66ef <exec_byte_code+9112>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a6737 <exec_byte_code+9184>, 0x5a677f <exec_byte_code+9256>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a6815 <exec_byte_code+9406> <repeats 64 times>}
        const_length = <optimized out>
        bytestr_length = 66
        vectorp = 0x7ffff2173720
        quitcounter = 1 '\001'
        stack_items = <optimized out>
        sa_avail = <optimized out>
        sa_count = 8
        alloc = <optimized out>
        stack_base = <optimized out>
        top = 0x7fffffffd178
        stack_lim = <optimized out>
        bytestr_data = 0x7fffffffd1a8 "\b\205A"
        pc = 0x7fffffffd1cf "\211\026\022\026\023\315\v!\023\316\016\022\317\320\n\317\"#\210\321\n!\210ʉ\022\207\202\003\"\207"
        count = 8
        result = <optimized out>
#30 0x000000000057147c in fetch_and_exec_byte_code (fun=XIL(0x7ffff21736ed), syms_left=syms_left@entry=make_fixnum(0), nargs=nargs@entry=0, args=args@entry=0x7fffffffd3e0) at /home/steve/src/emacs/emacs-master/src/eval.c:3175
#31 0x0000000000572ab2 in funcall_lambda (fun=XIL(0x7ffff21736ed), nargs=nargs@entry=0, arg_vector=arg_vector@entry=0x7fffffffd3e0) at /home/steve/src/emacs/emacs-master/src/eval.c:3256
        val = <optimized out>
        syms_left = make_fixnum(0)
        next = <optimized out>
        lexenv = <optimized out>
        count = 8
        i = <optimized out>
        optional = <optimized out>
        rest = <optimized out>
#32 0x00000000005704e7 in Ffuncall (nargs=1, args=args@entry=0x7fffffffd3d8) at /home/steve/src/emacs/emacs-master/src/eval.c:3055
        fun = <optimized out>
        original_fun = XIL(0x7ffff1756178)
        funcar = <optimized out>
        numargs = 0
        val = <optimized out>
        count = 7
#33 0x00000000005a48d8 in exec_byte_code (bytestr=<optimized out>, vector=XIL(0x7ffff21660e5), maxdepth=<optimized out>, args_template=args_template@entry=make_fixnum(0), nargs=nargs@entry=0, args=<optimized out>, args@entry=0x7fffffffdbd8) at /home/steve/src/emacs/emacs-master/src/bytecode.c:632
        op = <optimized out>
        type = <optimized out>
        targets = {0x5a65f0 <exec_byte_code+8857>, 0x5a6607 <exec_byte_code+8880>, 0x5a6639 <exec_byte_code+8930>, 0x5a663b <exec_byte_code+8932>, 0x5a663d <exec_byte_code+8934>, 0x5a6607 <exec_byte_code+8880>, 0x5a663f <exec_byte_code+8936>, 0x5a6674 <exec_byte_code+8989>, 0x5a45c5 <exec_byte_code+622>, 0x5a4612 <exec_byte_code+699>, 0x5a4614 <exec_byte_code+701>, 0x5a4616 <exec_byte_code+703>, 0x5a4618 <exec_byte_code+705>, 0x5a45c5 <exec_byte_code+622>, 0x5a461a <exec_byte_code+707>, 0x5a45b3 <exec_byte_code+604>, 0x5a476b <exec_byte_code+1044>, 0x5a47ce <exec_byte_code+1143>, 0x5a47d0 <exec_byte_code+1145>, 0x5a47d2 <exec_byte_code+1147>, 0x5a47d4 <exec_byte_code+1149>, 0x5a476b <exec_byte_code+1044>, 0x5a47e8 <exec_byte_code+1169>, 0x5a47d6 <exec_byte_code+1151>, 0x5a484a <exec_byte_code+1267>, 0x5a4895 <exec_byte_code+1342>, 0x5a4897 <exec_byte_code+1344>, 0x5a4899 <exec_byte_code+1346>, 0x5a489b <exec_byte_code+1348>, 0x5a484a <exec_byte_code+1267>, 0x5a482f <exec_byte_code+1240>, 0x5a4838 <exec_byte_code+1249>, 0x5a48b8 <exec_byte_code+1377>, 0x5a48f6 <exec_byte_code+1439>, 0x5a48f8 <exec_byte_code+1441>, 0x5a48fa <exec_byte_code+1443>, 0x5a48fc <exec_byte_code+1445>, 0x5a48b8 <exec_byte_code+1377>, 0x5a489d <exec_byte_code+1350>, 0x5a48a6 <exec_byte_code+1359>, 0x5a4919 <exec_byte_code+1474>, 0x5a496a <exec_byte_code+1555>, 0x5a496c <exec_byte_code+1557>, 0x5a496e <exec_byte_code+1559>, 0x5a4970 <exec_byte_code+1561>, 0x5a4919 <exec_byte_code+1474>, 0x5a48fe <exec_byte_code+1447>, 0x5a4907 <exec_byte_code+1456>, 0x5a4e77 <exec_byte_code+2848>, 0x5a4e3d <exec_byte_code+2790>, 0x5a4dcd <exec_byte_code+2678>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a5004 <exec_byte_code+3245>, 0x5a50b0 <exec_byte_code+3417>, 0x5a50e6 <exec_byte_code+3471>, 0x5a512e <exec_byte_code+3543>, 0x5a5176 <exec_byte_code+3615>, 0x5a46ae <exec_byte_code+855>, 0x5a46f2 <exec_byte_code+923>, 0x5a51be <exec_byte_code+3687>, 0x5a4670 <exec_byte_code+793>, 0x5a472d <exec_byte_code+982>, 0x5a51f5 <exec_byte_code+3742>, 0x5a5230 <exec_byte_code+3801>, 0x5a525d <exec_byte_code+3846>, 0x5a5298 <exec_byte_code+3905>, 0x5a52d2 <exec_byte_code+3963>, 0x5a535c <exec_byte_code+4101>, 0x5a5389 <exec_byte_code+4146>, 0x5a53c4 <exec_byte_code+4205>, 0x5a540f <exec_byte_code+4280>, 0x5a543c <exec_byte_code+4325>, 0x5a5469 <exec_byte_code+4370>, 0x5a54a4 <exec_byte_code+4429>, 0x5a54df <exec_byte_code+4488>, 0x5a551a <exec_byte_code+4547>, 0x5a5565 <exec_byte_code+4622>, 0x5a559c <exec_byte_code+4677>, 0x5a55d3 <exec_byte_code+4732>, 0x5a5656 <exec_byte_code+4863>, 0x5a56aa <exec_byte_code+4947>, 0x5a56fe <exec_byte_code+5031>, 0x5a573e <exec_byte_code+5095>, 0x5a577e <exec_byte_code+5159>, 0x5a57be <exec_byte_code+5223>, 0x5a57fe <exec_byte_code+5287>, 0x5a583e <exec_byte_code+5351>, 0x5a5875 <exec_byte_code+5406>, 0x5a58d3 <exec_byte_code+5500>, 0x5a590a <exec_byte_code+5555>, 0x5a5941 <exec_byte_code+5610>, 0x5a5978 <exec_byte_code+5665>, 0x5a5a21 <exec_byte_code+5834>, 0x5a4cb7 <exec_byte_code+2400>, 0x5a5a64 <exec_byte_code+5901>, 0x5a5a91 <exec_byte_code+5946>, 0x5a5b0c <exec_byte_code+6069>, 0x5a5b4f <exec_byte_code+6136>, 0x5a5b92 <exec_byte_code+6203>, 0x5a5bbf <exec_byte_code+6248>, 0x5a5bea <exec_byte_code+6291>, 0x5a5c15 <exec_byte_code+6334>, 0x5a5c48 <exec_byte_code+6385>, 0x5a65f0 <exec_byte_code+8857>, 0x5a5c7a <exec_byte_code+6435>, 0x5a5ca5 <exec_byte_code+6478>, 0x5a5cd0 <exec_byte_code+6521>, 0x5a5cfb <exec_byte_code+6564>, 0x5a5d26 <exec_byte_code+6607>, 0x5a5d51 <exec_byte_code+6650>, 0x5a4cb7 <exec_byte_code+2400>, 0x5a65f0 <exec_byte_code+8857>, 0x5a5d7e <exec_byte_code+6695>, 0x5a5dbb <exec_byte_code+6756>, 0x5a5de8 <exec_byte_code+6801>, 0x5a5e15 <exec_byte_code+6846>, 0x5a5e50 <exec_byte_code+6905>, 0x5a5e8b <exec_byte_code+6964>, 0x5a5eb8 <exec_byte_code+7009>, 0x5a5f5d <exec_byte_code+7174>, 0x5a5f98 <exec_byte_code+7233>, 0x5a5fd3 <exec_byte_code+7292>, 0x5a600e <exec_byte_code+7351>, 0x5a6039 <exec_byte_code+7394>, 0x5a65f0 <exec_byte_code+8857>, 0x5a4c5b <exec_byte_code+2308>, 0x5a4999 <exec_byte_code+1602>, 0x5a4632 <exec_byte_code+731>, 0x5a49fb <exec_byte_code+1700>, 0x5a4a35 <exec_byte_code+1758>, 0x5a4a73 <exec_byte_code+1820>, 0x5a4bfe <exec_byte_code+2215>, 0x5a4c3c <exec_byte_code+2277>, 0x5a4806 <exec_byte_code+1199>, 0x5a4c98 <exec_byte_code+2369>, 0x5a4ce3 <exec_byte_code+2444>, 0x5a4d61 <exec_byte_code+2570>, 0x5a4d8d <exec_byte_code+2614>, 0x5a4ea4 <exec_byte_code+2893>, 0x5a4efb <exec_byte_code+2980>, 0x5a4f40 <exec_byte_code+3049>, 0x5a4f89 <exec_byte_code+3122>, 0x5a4972 <exec_byte_code+1563>, 0x5a6066 <exec_byte_code+7439>, 0x5a60b1 <exec_byte_code+7514>, 0x5a60de <exec_byte_code+7559>, 0x5a610b <exec_byte_code+7604>, 0x5a6138 <exec_byte_code+7649>, 0x5a6165 <exec_byte_code+7694>, 0x5a61a0 <exec_byte_code+7753>, 0x5a61db <exec_byte_code+7812>, 0x5a6216 <exec_byte_code+7871>, 0x5a6251 <exec_byte_code+7930>, 0x5a630b <exec_byte_code+8116>, 0x5a6346 <exec_byte_code+8175>, 0x5a6381 <exec_byte_code+8234>, 0x5a63ae <exec_byte_code+8279>, 0x5a63e9 <exec_byte_code+8338>, 0x5a6424 <exec_byte_code+8397>, 0x5a645f <exec_byte_code+8456>, 0x5a649a <exec_byte_code+8515>, 0x5a59af <exec_byte_code+5720>, 0x5a59e6 <exec_byte_code+5775>, 0x5a64d1 <exec_byte_code+8570>, 0x5a656e <exec_byte_code+8727>, 0x5a65f0 <exec_byte_code+8857>, 0x5a4ab1 <exec_byte_code+1882>, 0x5a4b12 <exec_byte_code+1979>, 0x5a4b4d <exec_byte_code+2038>, 0x5a4b88 <exec_byte_code+2097>, 0x5a4bc3 <exec_byte_code+2156>, 0x5a5310 <exec_byte_code+4025>, 0x5a560a <exec_byte_code+4787>, 0x5a5ac0 <exec_byte_code+5993>, 0x5a66b2 <exec_byte_code+9051>, 0x5a66ef <exec_byte_code+9112>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a6737 <exec_byte_code+9184>, 0x5a677f <exec_byte_code+9256>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a6815 <exec_byte_code+9406> <repeats 64 times>}
        const_length = <optimized out>
        bytestr_length = 1463
        vectorp = 0x7ffff21660e8
        quitcounter = 4 '\004'
        stack_items = <optimized out>
        sa_avail = <optimized out>
        sa_count = 7
        alloc = <optimized out>
        stack_base = <optimized out>
        top = 0x7fffffffd3d8
        stack_lim = <optimized out>
        bytestr_data = 0x7fffffffd438 "\306C\306C\307 \020\306\021\n\023\306\024\310\311!\211\203)"
        pc = 0x7fffffffd812 "\210\201\226"
        count = 7
        result = <optimized out>
#34 0x000000000057147c in fetch_and_exec_byte_code (fun=XIL(0x7ffff21660b5), syms_left=syms_left@entry=make_fixnum(0), nargs=nargs@entry=0, args=args@entry=0x7fffffffdbd8) at /home/steve/src/emacs/emacs-master/src/eval.c:3175
#35 0x0000000000572ab2 in funcall_lambda (fun=XIL(0x7ffff21660b5), nargs=nargs@entry=0, arg_vector=arg_vector@entry=0x7fffffffdbd8) at /home/steve/src/emacs/emacs-master/src/eval.c:3256
        val = <optimized out>
        syms_left = make_fixnum(0)
        next = <optimized out>
        lexenv = <optimized out>
        count = 7
        i = <optimized out>
        optional = <optimized out>
        rest = <optimized out>
#36 0x00000000005704e7 in Ffuncall (nargs=1, args=args@entry=0x7fffffffdbd0) at /home/steve/src/emacs/emacs-master/src/eval.c:3055
        fun = <optimized out>
        original_fun = XIL(0x7ffff1748b40)
        funcar = <optimized out>
        numargs = 0
        val = <optimized out>
        count = 6
#37 0x00000000005a48d8 in exec_byte_code (bytestr=<optimized out>, vector=XIL(0x7ffff216572d), maxdepth=<optimized out>, args_template=args_template@entry=make_fixnum(0), nargs=nargs@entry=0, args=<optimized out>, args@entry=0x7fffffffe010) at /home/steve/src/emacs/emacs-master/src/bytecode.c:632
        op = <optimized out>
        type = <optimized out>
        targets = {0x5a65f0 <exec_byte_code+8857>, 0x5a6607 <exec_byte_code+8880>, 0x5a6639 <exec_byte_code+8930>, 0x5a663b <exec_byte_code+8932>, 0x5a663d <exec_byte_code+8934>, 0x5a6607 <exec_byte_code+8880>, 0x5a663f <exec_byte_code+8936>, 0x5a6674 <exec_byte_code+8989>, 0x5a45c5 <exec_byte_code+622>, 0x5a4612 <exec_byte_code+699>, 0x5a4614 <exec_byte_code+701>, 0x5a4616 <exec_byte_code+703>, 0x5a4618 <exec_byte_code+705>, 0x5a45c5 <exec_byte_code+622>, 0x5a461a <exec_byte_code+707>, 0x5a45b3 <exec_byte_code+604>, 0x5a476b <exec_byte_code+1044>, 0x5a47ce <exec_byte_code+1143>, 0x5a47d0 <exec_byte_code+1145>, 0x5a47d2 <exec_byte_code+1147>, 0x5a47d4 <exec_byte_code+1149>, 0x5a476b <exec_byte_code+1044>, 0x5a47e8 <exec_byte_code+1169>, 0x5a47d6 <exec_byte_code+1151>, 0x5a484a <exec_byte_code+1267>, 0x5a4895 <exec_byte_code+1342>, 0x5a4897 <exec_byte_code+1344>, 0x5a4899 <exec_byte_code+1346>, 0x5a489b <exec_byte_code+1348>, 0x5a484a <exec_byte_code+1267>, 0x5a482f <exec_byte_code+1240>, 0x5a4838 <exec_byte_code+1249>, 0x5a48b8 <exec_byte_code+1377>, 0x5a48f6 <exec_byte_code+1439>, 0x5a48f8 <exec_byte_code+1441>, 0x5a48fa <exec_byte_code+1443>, 0x5a48fc <exec_byte_code+1445>, 0x5a48b8 <exec_byte_code+1377>, 0x5a489d <exec_byte_code+1350>, 0x5a48a6 <exec_byte_code+1359>, 0x5a4919 <exec_byte_code+1474>, 0x5a496a <exec_byte_code+1555>, 0x5a496c <exec_byte_code+1557>, 0x5a496e <exec_byte_code+1559>, 0x5a4970 <exec_byte_code+1561>, 0x5a4919 <exec_byte_code+1474>, 0x5a48fe <exec_byte_code+1447>, 0x5a4907 <exec_byte_code+1456>, 0x5a4e77 <exec_byte_code+2848>, 0x5a4e3d <exec_byte_code+2790>, 0x5a4dcd <exec_byte_code+2678>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a5004 <exec_byte_code+3245>, 0x5a50b0 <exec_byte_code+3417>, 0x5a50e6 <exec_byte_code+3471>, 0x5a512e <exec_byte_code+3543>, 0x5a5176 <exec_byte_code+3615>, 0x5a46ae <exec_byte_code+855>, 0x5a46f2 <exec_byte_code+923>, 0x5a51be <exec_byte_code+3687>, 0x5a4670 <exec_byte_code+793>, 0x5a472d <exec_byte_code+982>, 0x5a51f5 <exec_byte_code+3742>, 0x5a5230 <exec_byte_code+3801>, 0x5a525d <exec_byte_code+3846>, 0x5a5298 <exec_byte_code+3905>, 0x5a52d2 <exec_byte_code+3963>, 0x5a535c <exec_byte_code+4101>, 0x5a5389 <exec_byte_code+4146>, 0x5a53c4 <exec_byte_code+4205>, 0x5a540f <exec_byte_code+4280>, 0x5a543c <exec_byte_code+4325>, 0x5a5469 <exec_byte_code+4370>, 0x5a54a4 <exec_byte_code+4429>, 0x5a54df <exec_byte_code+4488>, 0x5a551a <exec_byte_code+4547>, 0x5a5565 <exec_byte_code+4622>, 0x5a559c <exec_byte_code+4677>, 0x5a55d3 <exec_byte_code+4732>, 0x5a5656 <exec_byte_code+4863>, 0x5a56aa <exec_byte_code+4947>, 0x5a56fe <exec_byte_code+5031>, 0x5a573e <exec_byte_code+5095>, 0x5a577e <exec_byte_code+5159>, 0x5a57be <exec_byte_code+5223>, 0x5a57fe <exec_byte_code+5287>, 0x5a583e <exec_byte_code+5351>, 0x5a5875 <exec_byte_code+5406>, 0x5a58d3 <exec_byte_code+5500>, 0x5a590a <exec_byte_code+5555>, 0x5a5941 <exec_byte_code+5610>, 0x5a5978 <exec_byte_code+5665>, 0x5a5a21 <exec_byte_code+5834>, 0x5a4cb7 <exec_byte_code+2400>, 0x5a5a64 <exec_byte_code+5901>, 0x5a5a91 <exec_byte_code+5946>, 0x5a5b0c <exec_byte_code+6069>, 0x5a5b4f <exec_byte_code+6136>, 0x5a5b92 <exec_byte_code+6203>, 0x5a5bbf <exec_byte_code+6248>, 0x5a5bea <exec_byte_code+6291>, 0x5a5c15 <exec_byte_code+6334>, 0x5a5c48 <exec_byte_code+6385>, 0x5a65f0 <exec_byte_code+8857>, 0x5a5c7a <exec_byte_code+6435>, 0x5a5ca5 <exec_byte_code+6478>, 0x5a5cd0 <exec_byte_code+6521>, 0x5a5cfb <exec_byte_code+6564>, 0x5a5d26 <exec_byte_code+6607>, 0x5a5d51 <exec_byte_code+6650>, 0x5a4cb7 <exec_byte_code+2400>, 0x5a65f0 <exec_byte_code+8857>, 0x5a5d7e <exec_byte_code+6695>, 0x5a5dbb <exec_byte_code+6756>, 0x5a5de8 <exec_byte_code+6801>, 0x5a5e15 <exec_byte_code+6846>, 0x5a5e50 <exec_byte_code+6905>, 0x5a5e8b <exec_byte_code+6964>, 0x5a5eb8 <exec_byte_code+7009>, 0x5a5f5d <exec_byte_code+7174>, 0x5a5f98 <exec_byte_code+7233>, 0x5a5fd3 <exec_byte_code+7292>, 0x5a600e <exec_byte_code+7351>, 0x5a6039 <exec_byte_code+7394>, 0x5a65f0 <exec_byte_code+8857>, 0x5a4c5b <exec_byte_code+2308>, 0x5a4999 <exec_byte_code+1602>, 0x5a4632 <exec_byte_code+731>, 0x5a49fb <exec_byte_code+1700>, 0x5a4a35 <exec_byte_code+1758>, 0x5a4a73 <exec_byte_code+1820>, 0x5a4bfe <exec_byte_code+2215>, 0x5a4c3c <exec_byte_code+2277>, 0x5a4806 <exec_byte_code+1199>, 0x5a4c98 <exec_byte_code+2369>, 0x5a4ce3 <exec_byte_code+2444>, 0x5a4d61 <exec_byte_code+2570>, 0x5a4d8d <exec_byte_code+2614>, 0x5a4ea4 <exec_byte_code+2893>, 0x5a4efb <exec_byte_code+2980>, 0x5a4f40 <exec_byte_code+3049>, 0x5a4f89 <exec_byte_code+3122>, 0x5a4972 <exec_byte_code+1563>, 0x5a6066 <exec_byte_code+7439>, 0x5a60b1 <exec_byte_code+7514>, 0x5a60de <exec_byte_code+7559>, 0x5a610b <exec_byte_code+7604>, 0x5a6138 <exec_byte_code+7649>, 0x5a6165 <exec_byte_code+7694>, 0x5a61a0 <exec_byte_code+7753>, 0x5a61db <exec_byte_code+7812>, 0x5a6216 <exec_byte_code+7871>, 0x5a6251 <exec_byte_code+7930>, 0x5a630b <exec_byte_code+8116>, 0x5a6346 <exec_byte_code+8175>, 0x5a6381 <exec_byte_code+8234>, 0x5a63ae <exec_byte_code+8279>, 0x5a63e9 <exec_byte_code+8338>, 0x5a6424 <exec_byte_code+8397>, 0x5a645f <exec_byte_code+8456>, 0x5a649a <exec_byte_code+8515>, 0x5a59af <exec_byte_code+5720>, 0x5a59e6 <exec_byte_code+5775>, 0x5a64d1 <exec_byte_code+8570>, 0x5a656e <exec_byte_code+8727>, 0x5a65f0 <exec_byte_code+8857>, 0x5a4ab1 <exec_byte_code+1882>, 0x5a4b12 <exec_byte_code+1979>, 0x5a4b4d <exec_byte_code+2038>, 0x5a4b88 <exec_byte_code+2097>, 0x5a4bc3 <exec_byte_code+2156>, 0x5a5310 <exec_byte_code+4025>, 0x5a560a <exec_byte_code+4787>, 0x5a5ac0 <exec_byte_code+5993>, 0x5a66b2 <exec_byte_code+9051>, 0x5a66ef <exec_byte_code+9112>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a6737 <exec_byte_code+9184>, 0x5a677f <exec_byte_code+9256>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a65f0 <exec_byte_code+8857>, 0x5a6815 <exec_byte_code+9406> <repeats 64 times>}
        const_length = <optimized out>
        bytestr_length = 602
        vectorp = 0x7ffff2165730
        quitcounter = 39 '\''
        stack_items = <optimized out>
        sa_avail = <optimized out>
        sa_count = 5
        alloc = <optimized out>
        stack_base = <optimized out>
        top = 0x7fffffffdbd0
        stack_lim = <optimized out>
        bytestr_data = 0x7fffffffdc10 "\b\203\b"
        pc = 0x7fffffffde1d "\210)\210\201U"
        count = 5
        result = <optimized out>
#38 0x000000000057147c in fetch_and_exec_byte_code (fun=XIL(0x7ffff21656fd), syms_left=syms_left@entry=make_fixnum(0), nargs=nargs@entry=0, args=args@entry=0x7fffffffe010) at /home/steve/src/emacs/emacs-master/src/eval.c:3175
#39 0x0000000000572ab2 in funcall_lambda (fun=fun@entry=XIL(0x7ffff21656fd), nargs=nargs@entry=0, arg_vector=arg_vector@entry=0x7fffffffe010) at /home/steve/src/emacs/emacs-master/src/eval.c:3256
        val = <optimized out>
        syms_left = make_fixnum(0)
        next = <optimized out>
        lexenv = <optimized out>
        count = 5
        i = <optimized out>
        optional = <optimized out>
        rest = <optimized out>
#40 0x0000000000572183 in apply_lambda (fun=fun@entry=XIL(0x7ffff21656fd), args=<optimized out>, count=count@entry=4) at /home/steve/src/emacs/emacs-master/src/eval.c:3200
        arg_vector = 0x7fffffffe010
        tem = <optimized out>
        sa_avail = <optimized out>
        sa_count = 5
        numargs = 0
        args_left = <optimized out>
#41 0x00000000005727e7 in eval_sub (form=form@entry=XIL(0x7ffff2658e5b)) at /home/steve/src/emacs/emacs-master/src/eval.c:2573
        original_fun = XIL(0x7ffff1748188)
        original_args = XIL(0)
        count = 4
        fun = XIL(0x7ffff21656fd)
        val = <optimized out>
        funcar = <optimized out>
        argvals = {XIL(0), XIL(0), XIL(0xacba00), XIL(0x1), XIL(0xacba00), XIL(0), XIL(0), XIL(0x56eb6f)}
#42 0x0000000000573cbc in Feval (form=XIL(0x7ffff2658e5b), lexical=lexical@entry=XIL(0)) at /home/steve/src/emacs/emacs-master/src/eval.c:2355
        count = 3
#43 0x00000000004fbab0 in top_level_2 () at /home/steve/src/emacs/emacs-master/src/keyboard.c:1131
#44 0x000000000056f776 in internal_condition_case (bfun=bfun@entry=0x4fba9b <top_level_2>, handlers=handlers@entry=XIL(0x90), hfun=hfun@entry=0x500325 <cmd_error>) at /home/steve/src/emacs/emacs-master/src/eval.c:1478
        val = <optimized out>
        c = 0xb367a0
#45 0x00000000004fba6f in top_level_1 (ignore=ignore@entry=XIL(0)) at /home/steve/src/emacs/emacs-master/src/keyboard.c:1139
#46 0x00000000005717dd in internal_catch (tag=tag@entry=XIL(0xe6d0), func=func@entry=0x4fba4d <top_level_1>, arg=arg@entry=XIL(0)) at /home/steve/src/emacs/emacs-master/src/eval.c:1198
        val = <optimized out>
        c = 0xb326d0
#47 0x00000000004fb9fe in command_loop () at /home/steve/src/emacs/emacs-master/src/keyboard.c:1099
#48 0x00000000004fffa6 in recursive_edit_1 () at /home/steve/src/emacs/emacs-master/src/keyboard.c:720
        count = 1
        val = <optimized out>
#49 0x0000000000500274 in Frecursive_edit () at /home/steve/src/emacs/emacs-master/src/keyboard.c:792
        count = 0
        buffer = <optimized out>
#50 0x00000000004fb190 in main (argc=2, argv=0x7fffffffe398) at /home/steve/src/emacs/emacs-master/src/emacs.c:2310
        stack_bottom_variable = 0x5f56f5 <__libc_csu_init+69>
        no_loadup = false
        junk = 0x0
        dname_arg = 0x0
        ch_to_dir = 0x0
        original_pwd = <optimized out>
        dump_mode = <optimized out>
        skip_args = 0
        temacs = 0x0
        attempt_load_pdump = <optimized out>
        rlim = {
          rlim_cur = 10022912,
          rlim_max = 18446744073709551615
        }
        lc_all = <optimized out>
        sockfd = -1
        module_assertions = <optimized out>

Lisp Backtrace:
"x-create-frame" (0xffffc628)
"x-create-frame-with-faces" (0xffffc8c8)
0xf2366718 PVEC_COMPILED
"apply" (0xffffcbb0)
"frame-creation-function" (0xffffce58)
"make-frame" (0xffffd180)
"frame-initialize" (0xffffd3e0)
"command-line" (0xffffdbd8)
"normal-top-level" (0xffffe010)

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-17 13:50                   ` Robert Pluim
  2021-09-17 15:51                     ` Kévin Le Gouguec
  2021-09-17 15:58                     ` Jean-Christophe Helary
@ 2021-09-17 16:35                     ` Daniel Martín
  2021-09-17 16:52                       ` Robert Pluim
  2 siblings, 1 reply; 73+ messages in thread
From: Daniel Martín @ 2021-09-17 16:35 UTC (permalink / raw)
  To: Robert Pluim; +Cc: Jean-Christophe Helary, Eli Zaretskii, emacs-devel

Robert Pluim <rpluim@gmail.com> writes:

>
> It should all Just Work™ :-)
>

I've tested on a macOS system and it works, after setting "Apple Color
Emoji" for the "emoji" script.

There're a few emojis that I don't see, but I think they all are from
Unicode 14.0 (I'll need to wait for an update for my operating system to
see them).

Thanks for working on this.



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-17 15:51                     ` Kévin Le Gouguec
@ 2021-09-17 16:43                       ` Robert Pluim
  2021-09-17 19:34                         ` Kévin Le Gouguec
  0 siblings, 1 reply; 73+ messages in thread
From: Robert Pluim @ 2021-09-17 16:43 UTC (permalink / raw)
  To: Kévin Le Gouguec; +Cc: emacs-devel

>>>>> On Fri, 17 Sep 2021 17:51:04 +0200, Kévin Le Gouguec <kevin.legouguec@gmail.com> said:

    Kévin> Hi Robert, thanks for this!
    Kévin> I've tried your changes out and they work mostly as I expected; I'm
    Kévin> observing something I can't quite explain though, I don't know if this
    Kévin> behaviour is intended or not:

    Kévin> With emacs -Q, M-x check-emoji-coverage "Noto Color Emoji" initially
    Kévin> yields this:

    >> #*0©®↔▶◀☎♀♂♠♣♥♨🛝🟰🥹🧌🩻🪩🪷🫃🫗🫠🫰

Thatʼs what I see here

    Kévin> With an init file that sets font-use-system-font to t, I get:

    >> #*0©®‼⁉↔↩⌚⌨Ⓜ▪▶◀◻☀☂☄☎☑☝☠☢☦☪☮☯☸☺♀♂♈♟♠♣♥♨♻✂✈✒✔✖✝✡✳❄❇❣❤➡🛝🟰🥹🧌🩻🪩🪷🫃🫗🫠🫰

Hmm, I donʼt know why font-use-system-font would affect things
here. Which font is used instead of Noto Color Emoji?

    Kévin> In both cases, if I then run:

    >> (set-fontset-font t 'emoji "Noto Color Emoji" nil 'prepend)

    Kévin> and re-run check-emoji-coverage, I get this:

    >> #*0©®🛝🟰🥹🧌🩻🪩🪷🫃🫗🫠🫰

Thatʼs even more suprising. Maybe the set-fontset-font in
setup-default-fontset needs to be moved slightly later, Iʼll run some
experiments. <time passes> Yes, the emoji font spec was slightly too
early. Can you try the patch below?


    Kévin> … which is what I would expect (i.e. mostly Unicode 14 codepoints which
    Kévin> are not covered yet).

    Kévin> I see that fontset.el specifies FONT-SPEC as '("Noto Color Emoji"
    Kévin> . "iso10646-1"), but I don't see why that should discriminate against
    Kévin> any Unicode character?

It doesnʼt, but order matters when defining fontsets.

    Kévin> Again, thanks for making Emoji easier to tweak in Emacs.

It only took me a year :-) Thanks for testing

Robert
-- 


diff --git a/lisp/international/fontset.el b/lisp/international/fontset.el
index 13c998a41a..4ec641dca8 100644
--- a/lisp/international/fontset.el
+++ b/lisp/international/fontset.el
@@ -896,9 +896,6 @@ setup-default-fontset
              (#x1FA00 . #x1FA6F)))	;; Chess Symbols
     (set-fontset-font "fontset-default" symbol-subgroup
                       '("Symbola" . "iso10646-1") nil 'prepend))
-  ;; This sets up the Emoji codepoints to use prettier fonts.
-  (set-fontset-font "fontset-default" 'emoji
-                    '("Noto Color Emoji" . "iso10646-1") nil 'prepend)
   ;; Box Drawing and Block Elements
   (set-fontset-font "fontset-default" '(#x2500 . #x259F)
                     '("FreeMono" . "iso10646-1") nil 'prepend)
@@ -927,6 +924,9 @@ setup-default-fontset
     (set-fontset-font "fontset-default" symbol-subgroup
                       "-*-fixed-medium-*-*-*-*-*-*-*-*-*-iso10646-1"
                       nil 'prepend))
+  ;; This sets up the Emoji codepoints to use prettier fonts.
+  (set-fontset-font "fontset-default" 'emoji
+                    '("Noto Color Emoji" . "iso10646-1") nil 'prepend)
 
   ;; Append CJK fonts for characters other than han, kana, cjk-misc.
   ;; Append fonts for scripts whose name is also a charset name.

^ permalink raw reply related	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-17 16:35                     ` Daniel Martín
@ 2021-09-17 16:52                       ` Robert Pluim
  0 siblings, 0 replies; 73+ messages in thread
From: Robert Pluim @ 2021-09-17 16:52 UTC (permalink / raw)
  To: Daniel Martín; +Cc: Jean-Christophe Helary, Eli Zaretskii, emacs-devel

>>>>> On Fri, 17 Sep 2021 18:35:36 +0200, Daniel Martín <mardani29@yahoo.es> said:

    Daniel> Robert Pluim <rpluim@gmail.com> writes:
    >> 
    >> It should all Just Work™ :-)
    >> 

    Daniel> I've tested on a macOS system and it works, after setting "Apple Color
    Daniel> Emoji" for the "emoji" script.

    Daniel> There're a few emojis that I don't see, but I think they all are from
    Daniel> Unicode 14.0 (I'll need to wait for an update for my operating system to
    Daniel> see them).

Thatʼs expected, those codepoints are very new.

    Daniel> Thanks for working on this.

Is it "no problem" or "youʼre welcome" now? Iʼm bound to offend
someone whatever I say :-)

Robert
-- 



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-17 16:01                   ` Eli Zaretskii
  2021-09-17 16:34                     ` Stephen Berman
@ 2021-09-17 16:55                     ` martin rudalics
  1 sibling, 0 replies; 73+ messages in thread
From: martin rudalics @ 2021-09-17 16:55 UTC (permalink / raw)
  To: Eli Zaretskii, Stephen Berman; +Cc: lists, rpluim, emacs-devel

Running an O0 version of master currently segfaults here with

Starting program: /home/martin/emacs-git/trunk/obj-gtk/src/emacs -Q
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7ffff3971700 (LWP 24870)]
[New Thread 0x7ffff2cad700 (LWP 24871)]
[New Thread 0x7ffff2283700 (LWP 24872)]

Thread 1 "emacs" received signal SIGSEGV, Segmentation fault.
0x000000000057d255 in unwind_create_frame (frame=XIL(0xdd033d)) at ../../src/xfns.c:3531
3531	      eassert (dpyinfo->terminal->image_cache->refcount == image_cache_refcount);

An O3 version fails with

Invalid script or charset name: latin

martin



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-17 16:34                     ` Stephen Berman
@ 2021-09-17 16:58                       ` Robert Pluim
  2021-09-17 17:05                         ` Stephen Berman
  0 siblings, 1 reply; 73+ messages in thread
From: Robert Pluim @ 2021-09-17 16:58 UTC (permalink / raw)
  To: Stephen Berman; +Cc: lists, Eli Zaretskii, emacs-devel

>>>>> On Fri, 17 Sep 2021 18:34:30 +0200, Stephen Berman <stephen.berman@gmx.net> said:

    Stephen> On Fri, 17 Sep 2021 19:01:59 +0300 Eli Zaretskii <eliz@gnu.org> wrote:
    >>> From: Stephen Berman <stephen.berman@gmx.net>
    >>> Cc: Jean-Christophe Helary <lists@traduction-libre.org>,  Eli Zaretskii
    >>> <eliz@gnu.org>,  emacs-devel@gnu.org
    >>> Date: Fri, 17 Sep 2021 17:39:02 +0200
    >>> 
    >>> I just pulled from master and did make bootstrap.  Starting emacs -Q
    >>> fails with "Invalid script or charset name: latin".  No frame appears
    >>> and there's no out shell output.  Could that be due to your commit?
    >> 
    >> It could be due to changes related to Unicode 14.
    >> 
    >> Can you show a backtrace from this error, preferably both C and Lisp?

    Stephen> Attached.  (I built with 'CFLAGS=-Og -g3' and yet many values in the
    Stephen> backtrace are optimized out; is that normal?)

Umm, that looks like the char-script-table hasn't been set up
properly. Do the contents of lisp/international/charscript.el look
normal (and does it contain comments about autogenerated emoji)?

Robert
-- 



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-17 16:58                       ` Robert Pluim
@ 2021-09-17 17:05                         ` Stephen Berman
  2021-09-17 17:10                           ` Robert Pluim
  0 siblings, 1 reply; 73+ messages in thread
From: Stephen Berman @ 2021-09-17 17:05 UTC (permalink / raw)
  To: Robert Pluim; +Cc: lists, Eli Zaretskii, emacs-devel

On Fri, 17 Sep 2021 18:58:28 +0200 Robert Pluim <rpluim@gmail.com> wrote:

>>>>>> On Fri, 17 Sep 2021 18:34:30 +0200, Stephen Berman
> <stephen.berman@gmx.net> said:
>
>     Stephen> On Fri, 17 Sep 2021 19:01:59 +0300 Eli Zaretskii <eliz@gnu.org> wrote:
>     >>> From: Stephen Berman <stephen.berman@gmx.net>
>     >>> Cc: Jean-Christophe Helary <lists@traduction-libre.org>,  Eli Zaretskii
>     >>> <eliz@gnu.org>,  emacs-devel@gnu.org
>     >>> Date: Fri, 17 Sep 2021 17:39:02 +0200
>     >>>
>     >>> I just pulled from master and did make bootstrap.  Starting emacs -Q
>     >>> fails with "Invalid script or charset name: latin".  No frame appears
>     >>> and there's no out shell output.  Could that be due to your commit?
>     >>
>     >> It could be due to changes related to Unicode 14.
>     >>
>     >> Can you show a backtrace from this error, preferably both C and Lisp?
>
>     Stephen> Attached.  (I built with 'CFLAGS=-Og -g3' and yet many values in the
>     Stephen> backtrace are optimized out; is that normal?)
>
> Umm, that looks like the char-script-table hasn't been set up
> properly. Do the contents of lisp/international/charscript.el look
> normal (and does it contain comments about autogenerated emoji)?

It's borked; here's the entire content:

;;; charscript.el --- character script table  -*- lexical-binding:t -*-
;;; Automatically generated from admin/unidata/Blocks.txt
(let (script-list)
  (dolist (elt '(
    ))
    (set-char-table-range char-script-table
			  (cons (car elt) (nth 1 elt)) (nth 2 elt))
    (or (memq (nth 2 elt) script-list)
	(setq script-list (cons (nth 2 elt) script-list))))
  (set-char-table-extra-slot char-script-table 0 (nreverse script-list)))


(provide 'charscript)


Steve Berman



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-17 17:05                         ` Stephen Berman
@ 2021-09-17 17:10                           ` Robert Pluim
  2021-09-17 17:17                             ` Stephen Berman
  0 siblings, 1 reply; 73+ messages in thread
From: Robert Pluim @ 2021-09-17 17:10 UTC (permalink / raw)
  To: Stephen Berman; +Cc: lists, Eli Zaretskii, emacs-devel

>>>>> On Fri, 17 Sep 2021 19:05:13 +0200, Stephen Berman <stephen.berman@gmx.net> said:

    Stephen> It's borked; here's the entire content:

    Stephen> ;;; charscript.el --- character script table  -*- lexical-binding:t -*-
    Stephen> ;;; Automatically generated from admin/unidata/Blocks.txt
    Stephen> (let (script-list)
    Stephen>   (dolist (elt '(
    Stephen>     ))
    Stephen>     (set-char-table-range char-script-table
    Stephen> 			  (cons (car elt) (nth 1 elt)) (nth 2 elt))
    Stephen>     (or (memq (nth 2 elt) script-list)
    Stephen> 	(setq script-list (cons (nth 2 elt) script-list))))
    Stephen>   (set-char-table-extra-slot char-script-table 0 (nreverse script-list)))


    Stephen> (provide 'charscript)

Hmm. What does '/usr/bin/awk --version' on your system?

Robert
-- 



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-17 17:10                           ` Robert Pluim
@ 2021-09-17 17:17                             ` Stephen Berman
  2021-09-17 17:37                               ` Better emoji support, " Robert Pluim
  0 siblings, 1 reply; 73+ messages in thread
From: Stephen Berman @ 2021-09-17 17:17 UTC (permalink / raw)
  To: Robert Pluim; +Cc: lists, Eli Zaretskii, emacs-devel

On Fri, 17 Sep 2021 19:10:23 +0200 Robert Pluim <rpluim@gmail.com> wrote:

>>>>>> On Fri, 17 Sep 2021 19:05:13 +0200, Stephen Berman
> <stephen.berman@gmx.net> said:
>
>     Stephen> It's borked; here's the entire content:
>
>     Stephen> ;;; charscript.el --- character script table  -*- lexical-binding:t -*-
>     Stephen> ;;; Automatically generated from admin/unidata/Blocks.txt
>     Stephen> (let (script-list)
>     Stephen>   (dolist (elt '(
>     Stephen>     ))
>     Stephen>     (set-char-table-range char-script-table
>     Stephen> 			  (cons (car elt) (nth 1 elt)) (nth 2 elt))
>     Stephen>     (or (memq (nth 2 elt) script-list)
>     Stephen> 	(setq script-list (cons (nth 2 elt) script-list))))
>     Stephen>   (set-char-table-extra-slot char-script-table 0 (nreverse script-list)))
>
>
>     Stephen> (provide 'charscript)
>
> Hmm. What does '/usr/bin/awk --version' on your system?

$ /usr/bin/awk --version
GNU Awk 5.1.0, API: 3.0 (GNU MPFR 4.1.0, GNU MP 6.2.1)
Copyright (C) 1989, 1991-2020 Free Software Foundation.


Steve Berman



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support, Re: Better emoji support
  2021-09-17 17:17                             ` Stephen Berman
@ 2021-09-17 17:37                               ` Robert Pluim
  2021-09-17 17:49                                 ` Stephen Berman
  2021-09-17 18:53                                 ` martin rudalics
  0 siblings, 2 replies; 73+ messages in thread
From: Robert Pluim @ 2021-09-17 17:37 UTC (permalink / raw)
  To: Stephen Berman; +Cc: martin rudalics, Eli Zaretskii, emacs-devel, lists

>>>>> On Fri, 17 Sep 2021 19:17:14 +0200, Stephen Berman <stephen.berman@gmx.net> said:

    >> Hmm. What does '/usr/bin/awk --version' on your system?

    Stephen> $ /usr/bin/awk --version
    Stephen> GNU Awk 5.1.0, API: 3.0 (GNU MPFR 4.1.0, GNU MP 6.2.1)
    Stephen> Copyright (C) 1989, 1991-2020 Free Software Foundation.

    martin> Invalid script or charset name: latin

    martin> martin

I guess youʼre both building out-of-tree? Please pull and try again.

Robert
-- 



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support, Re: Better emoji support
  2021-09-17 17:37                               ` Better emoji support, " Robert Pluim
@ 2021-09-17 17:49                                 ` Stephen Berman
  2021-09-17 17:51                                   ` Robert Pluim
  2021-09-17 18:53                                 ` martin rudalics
  1 sibling, 1 reply; 73+ messages in thread
From: Stephen Berman @ 2021-09-17 17:49 UTC (permalink / raw)
  To: Robert Pluim; +Cc: martin rudalics, Eli Zaretskii, emacs-devel, lists

On Fri, 17 Sep 2021 19:37:39 +0200 Robert Pluim <rpluim@gmail.com> wrote:

>>>>>> On Fri, 17 Sep 2021 19:17:14 +0200, Stephen Berman
> <stephen.berman@gmx.net> said:
>
>     >> Hmm. What does '/usr/bin/awk --version' on your system?
>
>     Stephen> $ /usr/bin/awk --version
>     Stephen> GNU Awk 5.1.0, API: 3.0 (GNU MPFR 4.1.0, GNU MP 6.2.1)
>     Stephen> Copyright (C) 1989, 1991-2020 Free Software Foundation.
>
>     martin> Invalid script or charset name: latin
>
>     martin> martin
>
> I guess youʼre both building out-of-tree?

Yes, I am.

>                                           Please pull and try again.

Now it works again (after bootstrapping; just make didn't regenerate
charscript.el).  Thanks for fixing it.

Steve Berman



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support, Re: Better emoji support
  2021-09-17 17:49                                 ` Stephen Berman
@ 2021-09-17 17:51                                   ` Robert Pluim
  2021-09-17 18:53                                     ` martin rudalics
  0 siblings, 1 reply; 73+ messages in thread
From: Robert Pluim @ 2021-09-17 17:51 UTC (permalink / raw)
  To: Stephen Berman; +Cc: martin rudalics, Eli Zaretskii, emacs-devel, lists

>>>>> On Fri, 17 Sep 2021 19:49:31 +0200, Stephen Berman <stephen.berman@gmx.net> said:

    Stephen> On Fri, 17 Sep 2021 19:37:39 +0200 Robert Pluim <rpluim@gmail.com> wrote:
    >>>>>>> On Fri, 17 Sep 2021 19:17:14 +0200, Stephen Berman
    >> <stephen.berman@gmx.net> said:
    >> 
    >> >> Hmm. What does '/usr/bin/awk --version' on your system?
    >> 
    Stephen> $ /usr/bin/awk --version
    Stephen> GNU Awk 5.1.0, API: 3.0 (GNU MPFR 4.1.0, GNU MP 6.2.1)
    Stephen> Copyright (C) 1989, 1991-2020 Free Software Foundation.
    >> 
    martin> Invalid script or charset name: latin
    >> 
    martin> martin
    >> 
    >> I guess youʼre both building out-of-tree?

    Stephen> Yes, I am.

    >> Please pull and try again.

    Stephen> Now it works again (after bootstrapping; just make didn't regenerate
    Stephen> charscript.el).  Thanks for fixing it.

I broke it in the first place, I kinda felt obliged to fix it. Thanks
for testing.

Iʼll see if I can add the missing dependency so bootstrapping isnʼt required.

Robert
-- 



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-17 13:01               ` Robert Pluim
  2021-09-17 13:42                 ` Jean-Christophe Helary
  2021-09-17 15:39                 ` Stephen Berman
@ 2021-09-17 18:48                 ` Eli Zaretskii
  2021-09-17 18:59                   ` Robert Pluim
  2021-09-18  6:25                 ` Eli Zaretskii
  2021-09-19 16:09                 ` Juri Linkov
  4 siblings, 1 reply; 73+ messages in thread
From: Eli Zaretskii @ 2021-09-17 18:48 UTC (permalink / raw)
  To: Robert Pluim; +Cc: lists, emacs-devel

> From: Robert Pluim <rpluim@gmail.com>
> Date: Fri, 17 Sep 2021 15:01:37 +0200
> Cc: Eli Zaretskii <eliz@gnu.org>, emacs-devel@gnu.org
> 
> Iʼve just pushed it to master. Itʼs now based on Unicode 14, because
> Eli installed the Unicode 14 changes before I got around to pushing
> :-)

Thanks.  But I thought we also talked about supporting Emoji sequences
in composition-function-table?  I don't think I see that in the
changes you installed, did I miss something?



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support, Re: Better emoji support
  2021-09-17 17:37                               ` Better emoji support, " Robert Pluim
  2021-09-17 17:49                                 ` Stephen Berman
@ 2021-09-17 18:53                                 ` martin rudalics
  1 sibling, 0 replies; 73+ messages in thread
From: martin rudalics @ 2021-09-17 18:53 UTC (permalink / raw)
  To: Robert Pluim, Stephen Berman; +Cc: lists, Eli Zaretskii, emacs-devel

 > I guess youʼre both building out-of-tree? Please pull and try again.

Works now.

Thanks, martin




^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support, Re: Better emoji support
  2021-09-17 17:51                                   ` Robert Pluim
@ 2021-09-17 18:53                                     ` martin rudalics
  2021-09-17 18:58                                       ` Robert Pluim
  0 siblings, 1 reply; 73+ messages in thread
From: martin rudalics @ 2021-09-17 18:53 UTC (permalink / raw)
  To: Robert Pluim, Stephen Berman; +Cc: lists, Eli Zaretskii, emacs-devel

 > Iʼll see if I can add the missing dependency so bootstrapping isnʼt required.

Hmmm...  it apparently was regenerated here without bootstrapping.

martin




^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support, Re: Better emoji support
  2021-09-17 18:53                                     ` martin rudalics
@ 2021-09-17 18:58                                       ` Robert Pluim
  2021-09-17 19:44                                         ` Stephen Berman
  0 siblings, 1 reply; 73+ messages in thread
From: Robert Pluim @ 2021-09-17 18:58 UTC (permalink / raw)
  To: martin rudalics; +Cc: lists, Eli Zaretskii, Stephen Berman, emacs-devel

>>>>> On Fri, 17 Sep 2021 20:53:32 +0200, martin rudalics <rudalics@gmx.at> said:

    >> Iʼll see if I can add the missing dependency so bootstrapping isnʼt required.
    martin> Hmmm...  it apparently was regenerated here without bootstrapping.

    martin> martin

The dependency on blocks.awk is there in the Makefile, so I canʼt
explain why it didnʼt regenerate for Stephen.

Robert
-- 



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-17 18:48                 ` Eli Zaretskii
@ 2021-09-17 18:59                   ` Robert Pluim
  2021-09-18  5:39                     ` Eli Zaretskii
  0 siblings, 1 reply; 73+ messages in thread
From: Robert Pluim @ 2021-09-17 18:59 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: lists, emacs-devel

>>>>> On Fri, 17 Sep 2021 21:48:51 +0300, Eli Zaretskii <eliz@gnu.org> said:

    >> From: Robert Pluim <rpluim@gmail.com>
    >> Date: Fri, 17 Sep 2021 15:01:37 +0200
    >> Cc: Eli Zaretskii <eliz@gnu.org>, emacs-devel@gnu.org
    >> 
    >> Iʼve just pushed it to master. Itʼs now based on Unicode 14, because
    >> Eli installed the Unicode 14 changes before I got around to pushing
    >> :-)

    Eli> Thanks.  But I thought we also talked about supporting Emoji sequences
    Eli> in composition-function-table?  I don't think I see that in the
    Eli> changes you installed, did I miss something?

We did, and thatʼs a separate change that I haven't quite gotten
to. Hopefully tomorrow (I hope Iʼm not holding up the emacs-28 branch)

Robert
-- 



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-17 16:43                       ` Robert Pluim
@ 2021-09-17 19:34                         ` Kévin Le Gouguec
  2021-09-19 18:27                           ` Robert Pluim
  0 siblings, 1 reply; 73+ messages in thread
From: Kévin Le Gouguec @ 2021-09-17 19:34 UTC (permalink / raw)
  To: Robert Pluim; +Cc: emacs-devel

Robert Pluim <rpluim@gmail.com> writes:

>     >> #*0©®‼⁉↔↩⌚⌨Ⓜ▪▶◀◻☀☂☄☎☑☝☠☢☦☪☮☯☸☺♀♂♈♟♠♣♥♨♻✂✈✒✔✖✝✡✳❄❇❣❤➡🛝🟰🥹🧌🩻🪩🪷🫃🫗🫠🫰
>
> Hmm, I donʼt know why font-use-system-font would affect things
> here. Which font is used instead of Noto Color Emoji?

My default font is used for the chars that it covers, and the rest, huh…

> x:-misc-fixed-medium-r-normal--15-140-75-75-c-90-iso10646-1

"misc-fixed" I guess? 🤷

>     Kévin> In both cases, if I then run:
>
>     >> (set-fontset-font t 'emoji "Noto Color Emoji" nil 'prepend)
>
>     Kévin> and re-run check-emoji-coverage, I get this:
>
>     >> #*0©®🛝🟰🥹🧌🩻🪩🪷🫃🫗🫠🫰
>
> Thatʼs even more suprising. Maybe the set-fontset-font in
> setup-default-fontset needs to be moved slightly later, Iʼll run some
> experiments. <time passes> Yes, the emoji font spec was slightly too
> early. Can you try the patch below?

That does reduce the set of emoji that change when I call
(set-fontset-font t 'emoji "Noto Color Emoji" nil 'prepend); now it's
down to these four, whatever the value of font-use-system-font:

> #*0©®↔♠♣♥🛝🟰🥹🧌🩻🪩🪷🫃🫗🫠🫰
>      ^^^^

^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support, Re: Better emoji support
  2021-09-17 18:58                                       ` Robert Pluim
@ 2021-09-17 19:44                                         ` Stephen Berman
  0 siblings, 0 replies; 73+ messages in thread
From: Stephen Berman @ 2021-09-17 19:44 UTC (permalink / raw)
  To: Robert Pluim; +Cc: martin rudalics, Eli Zaretskii, lists, emacs-devel

On Fri, 17 Sep 2021 20:58:11 +0200 Robert Pluim <rpluim@gmail.com> wrote:

>>>>>> On Fri, 17 Sep 2021 20:53:32 +0200, martin rudalics <rudalics@gmx.at> said:
>
>     >> Iʼll see if I can add the missing dependency so bootstrapping isnʼt required.
>     martin> Hmmm...  it apparently was regenerated here without bootstrapping.
>
>     martin> martin
>
> The dependency on blocks.awk is there in the Makefile, so I canʼt
> explain why it didnʼt regenerate for Stephen.

Perhaps I was mistaken; I visited the file after you had asked me about
it and thought I reverted it after running make, but apparently I
didn't.

Steve Berman



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-17 18:59                   ` Robert Pluim
@ 2021-09-18  5:39                     ` Eli Zaretskii
  0 siblings, 0 replies; 73+ messages in thread
From: Eli Zaretskii @ 2021-09-18  5:39 UTC (permalink / raw)
  To: Robert Pluim; +Cc: lists, emacs-devel

> From: Robert Pluim <rpluim@gmail.com>
> Cc: lists@traduction-libre.org,  emacs-devel@gnu.org
> Date: Fri, 17 Sep 2021 20:59:14 +0200
> 
>     Eli> Thanks.  But I thought we also talked about supporting Emoji sequences
>     Eli> in composition-function-table?  I don't think I see that in the
>     Eli> changes you installed, did I miss something?
> 
> We did, and thatʼs a separate change that I haven't quite gotten
> to. Hopefully tomorrow (I hope Iʼm not holding up the emacs-28 branch)

Great, thanks.  And no, you are not holding Emacs 28, there's more
than enough other issues.



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-17 13:01               ` Robert Pluim
                                   ` (2 preceding siblings ...)
  2021-09-17 18:48                 ` Eli Zaretskii
@ 2021-09-18  6:25                 ` Eli Zaretskii
  2021-09-19 16:09                 ` Juri Linkov
  4 siblings, 0 replies; 73+ messages in thread
From: Eli Zaretskii @ 2021-09-18  6:25 UTC (permalink / raw)
  To: Robert Pluim; +Cc: lists, emacs-devel

> From: Robert Pluim <rpluim@gmail.com>
> Cc: Eli Zaretskii <eliz@gnu.org>,  emacs-devel@gnu.org
> Date: Fri, 17 Sep 2021 15:01:37 +0200
> 
> If youʼre not on a system with Noto Color Emoji installed, you'll need
> something like
> 
> (set-fontset-font t 'emoji
>                   '("Apple Color Emoji" . "iso10646-1") nil 'prepend)
> 
> or
> 
> (set-fontset-font t 'emoji
>                   '("Segoe Emoji UI" . "iso10646-1") nil 'prepend)
> 
> to get a nice font used for them.

The latter (for w32) should not be needed, since we nowadays have the
w32-find-non-USB-fonts function to do the job of finding fonts for
scripts for which Windows itself cannot do a good enough job.



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-17 13:01               ` Robert Pluim
                                   ` (3 preceding siblings ...)
  2021-09-18  6:25                 ` Eli Zaretskii
@ 2021-09-19 16:09                 ` Juri Linkov
  2021-09-19 17:16                   ` Kévin Le Gouguec
  2021-09-19 17:24                   ` Eli Zaretskii
  4 siblings, 2 replies; 73+ messages in thread
From: Juri Linkov @ 2021-09-19 16:09 UTC (permalink / raw)
  To: Robert Pluim; +Cc: Jean-Christophe Helary, Eli Zaretskii, emacs-devel

> Iʼve just pushed it to master. Itʼs now based on Unicode 14, because
> Eli installed the Unicode 14 changes before I got around to pushing
> :-)
>
> If youʼre not on a system with Noto Color Emoji installed, you'll need
> something like
>
> (set-fontset-font t 'emoji
>                   '("Segoe Emoji UI" . "iso10646-1") nil 'prepend)
>
> to get a nice font used for them.

Thanks, this is a nice change.  I have a problem only with one character.
Displaying NORTH EAST ARROW ↗ with emoji font is inappropriate to me.

If adding this character to the emoji script was not a mistake,
is it possible to customize this to display such characters
as a symbol like before?



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-19 16:09                 ` Juri Linkov
@ 2021-09-19 17:16                   ` Kévin Le Gouguec
  2021-09-19 18:20                     ` Robert Pluim
  2021-09-19 17:24                   ` Eli Zaretskii
  1 sibling, 1 reply; 73+ messages in thread
From: Kévin Le Gouguec @ 2021-09-19 17:16 UTC (permalink / raw)
  To: Juri Linkov
  Cc: Jean-Christophe Helary, Robert Pluim, Eli Zaretskii, emacs-devel

Juri Linkov <juri@linkov.net> writes:

> Thanks, this is a nice change.  I have a problem only with one character.
> Displaying NORTH EAST ARROW ↗ with emoji font is inappropriate to me.
>
> If adding this character to the emoji script was not a mistake,
> is it possible to customize this to display such characters
> as a symbol like before?

admin/unidata/emoji-data.txt contains a whole section where "omitted
code points have Emoji_Presentation=No", and AFAICT NORTH EAST ARROW
is one of those omitted code points.

IIUC, the Unicode standard means for those omitted characters to display
as "text" rather than as "emoji", unless they are followed by a
variation selector[1]; maybe some adjustments in fontset.el are in
order?

[1] http://www.unicode.org/reports/tr51/#Emoji_Presentation



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-19 16:09                 ` Juri Linkov
  2021-09-19 17:16                   ` Kévin Le Gouguec
@ 2021-09-19 17:24                   ` Eli Zaretskii
  2021-09-19 18:10                     ` Robert Pluim
  1 sibling, 1 reply; 73+ messages in thread
From: Eli Zaretskii @ 2021-09-19 17:24 UTC (permalink / raw)
  To: Juri Linkov; +Cc: lists, rpluim, emacs-devel

> From: Juri Linkov <juri@linkov.net>
> Cc: Jean-Christophe Helary <lists@traduction-libre.org>,  Eli Zaretskii
>  <eliz@gnu.org>,  emacs-devel@gnu.org
> Date: Sun, 19 Sep 2021 19:09:24 +0300
> 
> Thanks, this is a nice change.  I have a problem only with one character.
> Displaying NORTH EAST ARROW ↗ with emoji font is inappropriate to me.

Hmm...  Robert, I see quite a few characters that now belong to the
emoji script, which shouldn't be there, AFAIU.  The above is one of
them (AFAIK, the Arrows block doesn't belong to Emoji).  But there are
more stark cases, for example:

  (aref char-script-table ?#) => emoji
  (aref char-script-table ?0) => emoji

This is definitely not what we want.

It seems like these characters ended up in the emoji script because
they should render as emoji when followed by variation selectors?  But
in that case, the place to do this is in composition-function-table,
if we can, and if we cannot, let's for now decide we don't support
these sequences, because the cure sounds worse than the disease with
our current infrastructure.

Am I missing something?

> If adding this character to the emoji script was not a mistake,
> is it possible to customize this to display such characters
> as a symbol like before?

Regardless of the above issue, you can always customize this by using
set-fontset-font or by modifying the char-script-table entry for the
character.



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-19 17:24                   ` Eli Zaretskii
@ 2021-09-19 18:10                     ` Robert Pluim
  2021-09-19 18:29                       ` Eli Zaretskii
  2021-09-19 18:34                       ` Eli Zaretskii
  0 siblings, 2 replies; 73+ messages in thread
From: Robert Pluim @ 2021-09-19 18:10 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: lists, emacs-devel, Juri Linkov

>>>>> On Sun, 19 Sep 2021 20:24:53 +0300, Eli Zaretskii <eliz@gnu.org> said:

    >> From: Juri Linkov <juri@linkov.net>
    >> Cc: Jean-Christophe Helary <lists@traduction-libre.org>,  Eli Zaretskii
    >> <eliz@gnu.org>,  emacs-devel@gnu.org
    >> Date: Sun, 19 Sep 2021 19:09:24 +0300
    >> 
    >> Thanks, this is a nice change.  I have a problem only with one character.
    >> Displaying NORTH EAST ARROW ↗ with emoji font is inappropriate to me.

    Eli> Hmm...  Robert, I see quite a few characters that now belong to the
    Eli> emoji script, which shouldn't be there, AFAIU.  The above is one of
    Eli> them (AFAIK, the Arrows block doesn't belong to Emoji).  But there are
    Eli> more stark cases, for example:

The whole block might not, but some of the codepoints do:

2194..2199    ; Emoji                # E0.6   [6] (↔️..↙️)    left-right arrow..down-left arrow

    Eli>   (aref char-script-table ?#) => emoji
    Eli>   (aref char-script-table ?0) => emoji

I donʼt see that here (and itʼs definitely not the
intention). Blocks.awk skips any ASCII codepoints (and those both
evaluate to "latin" here). Could you double-check your
lisp/international/charscript.el?

    Eli> This is definitely not what we want.

Right.

    Eli> It seems like these characters ended up in the emoji script because
    Eli> they should render as emoji when followed by variation selectors?  But
    Eli> in that case, the place to do this is in composition-function-table,
    Eli> if we can, and if we cannot, let's for now decide we don't support
    Eli> these sequences, because the cure sounds worse than the disease with
    Eli> our current infrastructure.

    Eli> Am I missing something?

Are now saying that we only want to add to the emoji script those
characters with Emoji_Presentation=Yes?

Robert
-- 



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-19 17:16                   ` Kévin Le Gouguec
@ 2021-09-19 18:20                     ` Robert Pluim
  2021-09-19 19:13                       ` Robert Pluim
  0 siblings, 1 reply; 73+ messages in thread
From: Robert Pluim @ 2021-09-19 18:20 UTC (permalink / raw)
  To: Kévin Le Gouguec
  Cc: Jean-Christophe Helary, Eli Zaretskii, emacs-devel, Juri Linkov

>>>>> On Sun, 19 Sep 2021 19:16:45 +0200, Kévin Le Gouguec <kevin.legouguec@gmail.com> said:

    Kévin> Juri Linkov <juri@linkov.net> writes:
    >> Thanks, this is a nice change.  I have a problem only with one character.
    >> Displaying NORTH EAST ARROW ↗ with emoji font is inappropriate to me.
    >> 
    >> If adding this character to the emoji script was not a mistake,
    >> is it possible to customize this to display such characters
    >> as a symbol like before?

    Kévin> admin/unidata/emoji-data.txt contains a whole section where "omitted
    Kévin> code points have Emoji_Presentation=No", and AFAICT NORTH EAST ARROW
    Kévin> is one of those omitted code points.

True. But it has the 'Emoji' property.

    Kévin> IIUC, the Unicode standard means for those omitted characters to display
    Kévin> as "text" rather than as "emoji", unless they are followed by a
    Kévin> variation selector[1]; maybe some adjustments in fontset.el are in
    Kévin> order?

As "text presentation" rather than "emoji presentation", not as
"text". If we want to follow the Emoji_Presentation property, thatʼs
easy enough to arrange.

Robert
-- 



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-17 19:34                         ` Kévin Le Gouguec
@ 2021-09-19 18:27                           ` Robert Pluim
  2021-09-19 19:43                             ` Kévin Le Gouguec
  0 siblings, 1 reply; 73+ messages in thread
From: Robert Pluim @ 2021-09-19 18:27 UTC (permalink / raw)
  To: Kévin Le Gouguec; +Cc: emacs-devel

>>>>> On Fri, 17 Sep 2021 21:34:23 +0200, Kévin Le Gouguec <kevin.legouguec@gmail.com> said:

    Kévin> That does reduce the set of emoji that change when I call
    Kévin> (set-fontset-font t 'emoji "Noto Color Emoji" nil 'prepend); now it's
    Kévin> down to these four, whatever the value of font-use-system-font:

    >> #*0©®↔♠♣♥🛝🟰🥹🧌🩻🪩🪷🫃🫗🫠🫰
    >>      ^^^^

That ties in with the rest of this thread: those 4 codepoints have
Emoji_Presentation = No, so Noto Color Emoji doesnʼt have glyphs for
them

Robert
-- 



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-19 18:10                     ` Robert Pluim
@ 2021-09-19 18:29                       ` Eli Zaretskii
  2021-09-19 18:40                         ` Robert Pluim
  2021-09-19 18:34                       ` Eli Zaretskii
  1 sibling, 1 reply; 73+ messages in thread
From: Eli Zaretskii @ 2021-09-19 18:29 UTC (permalink / raw)
  To: Robert Pluim; +Cc: lists, emacs-devel, juri

> From: Robert Pluim <rpluim@gmail.com>
> Cc: Juri Linkov <juri@linkov.net>,  lists@traduction-libre.org,
>   emacs-devel@gnu.org
> Date: Sun, 19 Sep 2021 20:10:22 +0200
> 
>     Eli> Hmm...  Robert, I see quite a few characters that now belong to the
>     Eli> emoji script, which shouldn't be there, AFAIU.  The above is one of
>     Eli> them (AFAIK, the Arrows block doesn't belong to Emoji).  But there are
>     Eli> more stark cases, for example:
> 
> The whole block might not, but some of the codepoints do:
> 
> 2194..2199    ; Emoji                # E0.6   [6] (↔️..↙️)    left-right arrow..down-left arrow

Only if followed by a variation selector VS-16, right?

>     Eli>   (aref char-script-table ?#) => emoji
>     Eli>   (aref char-script-table ?0) => emoji
> 
> I donʼt see that here (and itʼs definitely not the
> intention). Blocks.awk skips any ASCII codepoints (and those both
> evaluate to "latin" here). Could you double-check your
> lisp/international/charscript.el?

I see them there:

    (#x0023 #x0023 emoji) ; Autogenerated emoji
    (#x002A #x002A emoji) ; Autogenerated emoji
    (#x0030 #x0039 emoji) ; Autogenerated emoji
    (#x00A9 #x00A9 emoji) ; Autogenerated emoji
    (#x00AE #x00AE emoji) ; Autogenerated emoji

Which corresponds to these lines in emoji-data.txt:

  0023          ; Emoji                # E0.0   [1] (#️)       hash sign
  002A          ; Emoji                # E0.0   [1] (*️)       asterisk
  0030..0039    ; Emoji                # E0.0  [10] (0️..9️)    digit zero..digit nine
  00A9          ; Emoji                # E0.6   [1] (©️)       copyright
  00AE          ; Emoji                # E0.6   [1] (®️)       registered

>     Eli> It seems like these characters ended up in the emoji script because
>     Eli> they should render as emoji when followed by variation selectors?  But
>     Eli> in that case, the place to do this is in composition-function-table,
>     Eli> if we can, and if we cannot, let's for now decide we don't support
>     Eli> these sequences, because the cure sounds worse than the disease with
>     Eli> our current infrastructure.
> 
>     Eli> Am I missing something?
> 
> Are now saying that we only want to add to the emoji script those
> characters with Emoji_Presentation=Yes?

Yes, I think so.  Are there any downsides to that?



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-19 18:10                     ` Robert Pluim
  2021-09-19 18:29                       ` Eli Zaretskii
@ 2021-09-19 18:34                       ` Eli Zaretskii
  1 sibling, 0 replies; 73+ messages in thread
From: Eli Zaretskii @ 2021-09-19 18:34 UTC (permalink / raw)
  To: Robert Pluim; +Cc: lists, juri, emacs-devel

> From: Robert Pluim <rpluim@gmail.com>
> Date: Sun, 19 Sep 2021 20:10:22 +0200
> Cc: lists@traduction-libre.org, emacs-devel@gnu.org,
>  Juri Linkov <juri@linkov.net>
> 
>     Eli>   (aref char-script-table ?#) => emoji
>     Eli>   (aref char-script-table ?0) => emoji
> 
> I donʼt see that here (and itʼs definitely not the
> intention). Blocks.awk skips any ASCII codepoints (and those both
> evaluate to "latin" here).

I guess the {N} construct in regular expressions is somewhat new in
Gawk.  I installed a fix.



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-19 18:29                       ` Eli Zaretskii
@ 2021-09-19 18:40                         ` Robert Pluim
  0 siblings, 0 replies; 73+ messages in thread
From: Robert Pluim @ 2021-09-19 18:40 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: lists, emacs-devel, juri

>>>>> On Sun, 19 Sep 2021 21:29:44 +0300, Eli Zaretskii <eliz@gnu.org> said:

    >> From: Robert Pluim <rpluim@gmail.com>
    >> Cc: Juri Linkov <juri@linkov.net>,  lists@traduction-libre.org,
    >> emacs-devel@gnu.org
    >> Date: Sun, 19 Sep 2021 20:10:22 +0200
    >> 
    Eli> Hmm...  Robert, I see quite a few characters that now belong to the
    Eli> emoji script, which shouldn't be there, AFAIU.  The above is one of
    Eli> them (AFAIK, the Arrows block doesn't belong to Emoji).  But there are
    Eli> more stark cases, for example:
    >> 
    >> The whole block might not, but some of the codepoints do:
    >> 
    >> 2194..2199    ; Emoji                # E0.6   [6] (↔️..↙️)    left-right arrow..down-left arrow

    Eli> Only if followed by a variation selector VS-16, right?

Iʼm inclined to agree, but Iʼd have to re-read tr51, and I have a
headache. They definitely have Emoji_Presentation=No.

    Eli> (aref char-script-table ?#) => emoji
    Eli> (aref char-script-table ?0) => emoji
    >> 
    >> I donʼt see that here (and itʼs definitely not the
    >> intention). Blocks.awk skips any ASCII codepoints (and those both
    >> evaluate to "latin" here). Could you double-check your
    >> lisp/international/charscript.el?

    Eli> I see them there:

    Eli>     (#x0023 #x0023 emoji) ; Autogenerated emoji
    Eli>     (#x002A #x002A emoji) ; Autogenerated emoji
    Eli>     (#x0030 #x0039 emoji) ; Autogenerated emoji
    Eli>     (#x00A9 #x00A9 emoji) ; Autogenerated emoji
    Eli>     (#x00AE #x00AE emoji) ; Autogenerated emoji

    Eli> Which corresponds to these lines in emoji-data.txt:

    Eli>   0023          ; Emoji                # E0.0   [1] (#️)       hash sign
    Eli>   002A          ; Emoji                # E0.0   [1] (*️)       asterisk
    Eli>   0030..0039    ; Emoji                # E0.0  [10] (0️..9️)    digit zero..digit nine
    Eli>   00A9          ; Emoji                # E0.6   [1] (©️)       copyright
    Eli>   00AE          ; Emoji                # E0.6   [1] (®️)       registered

Blocks.awk has this:

FILENAME ~ "emoji-data.txt" && /^00[0-9A-F]{2}.*; Emoji / {
    next
}

so those should have been filtered out (this is where I learn more
about Awk incompatibilities than I care to, perhaps)

    Eli> It seems like these characters ended up in the emoji script because
    Eli> they should render as emoji when followed by variation selectors?  But
    Eli> in that case, the place to do this is in composition-function-table,
    Eli> if we can, and if we cannot, let's for now decide we don't support
    Eli> these sequences, because the cure sounds worse than the disease with
    Eli> our current infrastructure.
    >> 
    Eli> Am I missing something?
    >> 
    >> Are now saying that we only want to add to the emoji script those
    >> characters with Emoji_Presentation=Yes?

    Eli> Yes, I think so.  Are there any downsides to that?

Not that I can see. As a side effect it will fix whatever is causing
those ASCII codepoints to be treated as Emoji for you.

Robert
-- 



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-19 18:20                     ` Robert Pluim
@ 2021-09-19 19:13                       ` Robert Pluim
  0 siblings, 0 replies; 73+ messages in thread
From: Robert Pluim @ 2021-09-19 19:13 UTC (permalink / raw)
  To: Kévin Le Gouguec
  Cc: Jean-Christophe Helary, Eli Zaretskii, Juri Linkov, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 1691 bytes --]

>>>>> On Sun, 19 Sep 2021 20:20:10 +0200, Robert Pluim <rpluim@gmail.com> said:

>>>>> On Sun, 19 Sep 2021 19:16:45 +0200, Kévin Le Gouguec <kevin.legouguec@gmail.com> said:
    Kévin> Juri Linkov <juri@linkov.net> writes:
    >>> Thanks, this is a nice change.  I have a problem only with one character.
    >>> Displaying NORTH EAST ARROW ↗ with emoji font is inappropriate to me.
    >>> 
    >>> If adding this character to the emoji script was not a mistake,
    >>> is it possible to customize this to display such characters
    >>> as a symbol like before?

    Kévin> admin/unidata/emoji-data.txt contains a whole section where "omitted
    Kévin> code points have Emoji_Presentation=No", and AFAICT NORTH EAST ARROW
    Kévin> is one of those omitted code points.

    Robert> True. But it has the 'Emoji' property.

    Kévin> IIUC, the Unicode standard means for those omitted characters to display
    Kévin> as "text" rather than as "emoji", unless they are followed by a
    Kévin> variation selector[1]; maybe some adjustments in fontset.el are in
    Kévin> order?

Eli also pointed out that this should depend on the presence of the
variation selector. Iʼll add that to the work Iʼm doing on emoji ZWNJ
sequences anyway (although given that the selector and the codepoints
will likely be using different fonts, Iʼm not sure we'll be able to
achieve this)

    Robert> As "text presentation" rather than "emoji presentation", not as
    Robert> "text". If we want to follow the Emoji_Presentation property, thatʼs
    Robert> easy enough to arrange.

As per the attached. If itʼs all OK Iʼll push tomorrow.

Robert
-- 


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Base-emoji-script-membership-on-Emoji_Presentation.patch --]
[-- Type: text/x-diff, Size: 1922 bytes --]

From 3f7f622346f1c14bd5aa7e373e5f634a71b318ad Mon Sep 17 00:00:00 2001
From: Robert Pluim <rpluim@gmail.com>
Date: Sun, 19 Sep 2021 21:07:36 +0200
Subject: [PATCH] Base emoji script membership on Emoji_Presentation
To: emacs-devel@gnu.org

The Emoji property describes which codepoints can be displayed as
emoji, but Emoji_Presentation governs which are displayed as emoji by
default.

* admin/notes/unicode: Adjust check-emoji-coverage to look in the
Emoji_Presentation sections of emoji-data.txt
* admin/unidata/blocks.awk: Assign emoji script using the
Emoji_Presentation section.
---
 admin/notes/unicode      | 2 +-
 admin/unidata/blocks.awk | 7 +------
 2 files changed, 2 insertions(+), 7 deletions(-)

diff --git a/admin/notes/unicode b/admin/notes/unicode
index 9dc6f3bdca..0b2ce52794 100644
--- a/admin/notes/unicode
+++ b/admin/notes/unicode
@@ -100,7 +100,7 @@ FONT-NAME-REGEXP is checked using `string-match'."
 (save-excursion
 (goto-char (point-min))
 (let (res char name ifont)
-  (while (re-search-forward "; Emoji [^(]+(\\(.\\)[).\uFE0F]" nil t)
+  (while (re-search-forward "; Emoji_Presentation [^(]+(\\(.\\)[).]" nil t)
     (setq char (aref (match-string 1) 0))
     (setq ifont (car (internal-char-font nil char)))
     (when ifont
diff --git a/admin/unidata/blocks.awk b/admin/unidata/blocks.awk
index 6e52b52f67..29022bf7dd 100755
--- a/admin/unidata/blocks.awk
+++ b/admin/unidata/blocks.awk
@@ -202,12 +202,7 @@ FILENAME ~ "Blocks.txt" && /^[0-9A-F]/ {
     }
 }
 
-# The space after 'Emoji' is significant in the next two rules.
-# This purposely and deliberately excludes codepoints <= 00FF
-FILENAME ~ "emoji-data.txt" && /^00[0-9A-F][0-9A-F].*; Emoji / {
-    next
-}
-FILENAME ~ "emoji-data.txt" && /^[0-9A-F].*; Emoji / {
+FILENAME ~ "emoji-data.txt" && /^[0-9A-F].*; Emoji_Presentation / {
     sep = index($1, "..")
     len = length($1)
     if (sep > 0)  {
-- 
2.33.0.363.g4c719308ce


^ permalink raw reply related	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-19 18:27                           ` Robert Pluim
@ 2021-09-19 19:43                             ` Kévin Le Gouguec
  2021-09-20  4:23                               ` Eli Zaretskii
  0 siblings, 1 reply; 73+ messages in thread
From: Kévin Le Gouguec @ 2021-09-19 19:43 UTC (permalink / raw)
  To: Robert Pluim; +Cc: emacs-devel

Robert Pluim <rpluim@gmail.com> writes:

>>>>>> On Fri, 17 Sep 2021 21:34:23 +0200, Kévin Le Gouguec <kevin.legouguec@gmail.com> said:
>
>     Kévin> That does reduce the set of emoji that change when I call
>     Kévin> (set-fontset-font t 'emoji "Noto Color Emoji" nil 'prepend); now it's
>     Kévin> down to these four, whatever the value of font-use-system-font:
>
>     >> #*0©®↔♠♣♥🛝🟰🥹🧌🩻🪩🪷🫃🫗🫠🫰
>     >>      ^^^^
>
> That ties in with the rest of this thread: those 4 codepoints have
> Emoji_Presentation = No, so Noto Color Emoji doesnʼt have glyphs for
> them

Mmm, Noto Color Emoji *does* have glyphs for them.  The output you quote
is what I observe *before* evaluating

> (set-fontset-font t 'emoji "Noto Color Emoji" nil 'prepend)

After evaluating that, it's down to:

> #*0©®🛝🟰🥹🧌🩻🪩🪷🫃🫗🫠🫰

So there's still something that overrides Noto Color Emoji for those
four codepoints, IIUC.




^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-19 19:43                             ` Kévin Le Gouguec
@ 2021-09-20  4:23                               ` Eli Zaretskii
  2021-09-20  6:20                                 ` Kévin Le Gouguec
  0 siblings, 1 reply; 73+ messages in thread
From: Eli Zaretskii @ 2021-09-20  4:23 UTC (permalink / raw)
  To: Kévin Le Gouguec; +Cc: rpluim, emacs-devel

> From: Kévin Le Gouguec <kevin.legouguec@gmail.com>
> Date: Sun, 19 Sep 2021 21:43:17 +0200
> Cc: emacs-devel@gnu.org
> 
> > (set-fontset-font t 'emoji "Noto Color Emoji" nil 'prepend)
> 
> After evaluating that, it's down to:
> 
> > #*0©®🛝🟰🥹🧌🩻🪩🪷🫃🫗🫠🫰
> 
> So there's still something that overrides Noto Color Emoji for those
> four codepoints, IIUC.

If you mean these four:

   ↔♠♣♥

then why do you expect them to be displayed using Noto Color Emoji?



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-20  4:23                               ` Eli Zaretskii
@ 2021-09-20  6:20                                 ` Kévin Le Gouguec
  2021-09-20  6:53                                   ` Eli Zaretskii
  0 siblings, 1 reply; 73+ messages in thread
From: Kévin Le Gouguec @ 2021-09-20  6:20 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: rpluim, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Kévin Le Gouguec <kevin.legouguec@gmail.com>
>> Date: Sun, 19 Sep 2021 21:43:17 +0200
>> Cc: emacs-devel@gnu.org
>> 
>> > (set-fontset-font t 'emoji "Noto Color Emoji" nil 'prepend)
>> 
>> After evaluating that, it's down to:
>> 
>> > #*0©®🛝🟰🥹🧌🩻🪩🪷🫃🫗🫠🫰
>> 
>> So there's still something that overrides Noto Color Emoji for those
>> four codepoints, IIUC.
>
> If you mean these four:
>
>    ↔♠♣♥
>
> then why do you expect them to be displayed using Noto Color Emoji?

*In the long run*, when Emacs adheres fully to UTS #51, I don't expect
those to be displayed with a color font by default, since their
Emoji_Presentation property is "No".

(IIUC, ideally we'd want Emacs to display them with a color font only if
(1) users enforce it with set-fontset-font or (2) the characters are
followed by U+FE0F VARIATION SELECTOR-16)


*Right now* (as of commit 995a623594), I'd expect them to be displayed
 with Noto Color Emoji, since

(1) (char-table-range char-script-table ?↔) yields "emoji",
(2) fontset.el indiscriminately slaps "Noto Color Emoji" on the whole
    "emoji" script.

IOW my expectation comes from trying to understand what the code
currently does, not necessarily from thinking it's The Right Thing.
Sorry for being unclear.


IIUC Robert's tentative patch[1] gets us closer to The Right Thing, by
making sure (char-table-range char-script-table C) is "emoji" iff C's
Emoji_Presentation property is "Yes".


[1] <87a6k8l6pp.fsf@gmail.com>
    https://lists.gnu.org/archive/html/emacs-devel/2021-09/msg01449.html



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-20  6:20                                 ` Kévin Le Gouguec
@ 2021-09-20  6:53                                   ` Eli Zaretskii
  2021-09-20  8:40                                     ` Robert Pluim
  0 siblings, 1 reply; 73+ messages in thread
From: Eli Zaretskii @ 2021-09-20  6:53 UTC (permalink / raw)
  To: Kévin Le Gouguec; +Cc: rpluim, emacs-devel

> From: Kévin Le Gouguec <kevin.legouguec@gmail.com>
> Cc: rpluim@gmail.com,  emacs-devel@gnu.org
> Date: Mon, 20 Sep 2021 08:20:54 +0200
> 
> *Right now* (as of commit 995a623594), I'd expect them to be displayed
>  with Noto Color Emoji, since
> 
> (1) (char-table-range char-script-table ?↔) yields "emoji",
> (2) fontset.el indiscriminately slaps "Noto Color Emoji" on the whole
>     "emoji" script.
> 
> IOW my expectation comes from trying to understand what the code
> currently does, not necessarily from thinking it's The Right Thing.

Heh, welcome to the club.  At this point, we are generally happy if we
get the display right, even if we don't understand why the wrong
settings of the fontset were effectively ignored ;-)

But if you actually want to understand, then the only way is to step
through the font-selection code in fontset.c and see why it rejects
Noto Color Emoji.  If you find anything interesting, please tell us.

> IIUC Robert's tentative patch[1] gets us closer to The Right Thing, by
> making sure (char-table-range char-script-table C) is "emoji" iff C's
> Emoji_Presentation property is "Yes".

IMO, that's what we want; the emoji sequences should be handled via
composition-function-table, not via the fontset.



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-20  6:53                                   ` Eli Zaretskii
@ 2021-09-20  8:40                                     ` Robert Pluim
  2021-09-20  9:53                                       ` Eli Zaretskii
  0 siblings, 1 reply; 73+ messages in thread
From: Robert Pluim @ 2021-09-20  8:40 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel, Kévin Le Gouguec

>>>>> On Mon, 20 Sep 2021 09:53:09 +0300, Eli Zaretskii <eliz@gnu.org> said:
    >> IIUC Robert's tentative patch[1] gets us closer to The Right Thing, by
    >> making sure (char-table-range char-script-table C) is "emoji" iff C's
    >> Emoji_Presentation property is "Yes".

    Eli> IMO, that's what we want; the emoji sequences should be handled via
    Eli> composition-function-table, not via the fontset.

The emoji sequences can be handled by composition, since the relevant
codepoints will be from the 'emoji' script. But codepoints with
Emoji_Presentation=No will still be 'symbol' or similar, so how can
composition-function-table affect their font-selection?

Robert
-- 



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-20  8:40                                     ` Robert Pluim
@ 2021-09-20  9:53                                       ` Eli Zaretskii
  2021-09-20 13:03                                         ` Robert Pluim
  0 siblings, 1 reply; 73+ messages in thread
From: Eli Zaretskii @ 2021-09-20  9:53 UTC (permalink / raw)
  To: Robert Pluim; +Cc: emacs-devel, kevin.legouguec

> From: Robert Pluim <rpluim@gmail.com>
> Cc: Kévin Le Gouguec <kevin.legouguec@gmail.com>,
>   emacs-devel@gnu.org
> Date: Mon, 20 Sep 2021 10:40:28 +0200
> 
> >>>>> On Mon, 20 Sep 2021 09:53:09 +0300, Eli Zaretskii <eliz@gnu.org> said:
>     >> IIUC Robert's tentative patch[1] gets us closer to The Right Thing, by
>     >> making sure (char-table-range char-script-table C) is "emoji" iff C's
>     >> Emoji_Presentation property is "Yes".
> 
>     Eli> IMO, that's what we want; the emoji sequences should be handled via
>     Eli> composition-function-table, not via the fontset.
> 
> The emoji sequences can be handled by composition, since the relevant
> codepoints will be from the 'emoji' script. But codepoints with
> Emoji_Presentation=No will still be 'symbol' or similar, so how can
> composition-function-table affect their font-selection?

AFAIU, currently this could only be handled if the user has a font
that can display both those Emoji_Presentation=No characters and those
Emoji_Presentation=Yes.  In the future, we could perhaps improve that
by modifying the logic in fontset.c.

I think the presentation of the Emoji appearance for non-Emoji
characters followed by VS-16 is less important than being able to
display sequences of Emoji characters, so we will be doing OK, IMO, if
Emacs 28 only supported the latter.



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-20  9:53                                       ` Eli Zaretskii
@ 2021-09-20 13:03                                         ` Robert Pluim
  2021-09-20 13:15                                           ` Eli Zaretskii
  0 siblings, 1 reply; 73+ messages in thread
From: Robert Pluim @ 2021-09-20 13:03 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: kevin.legouguec, emacs-devel

>>>>> On Mon, 20 Sep 2021 12:53:21 +0300, Eli Zaretskii <eliz@gnu.org> said:
    Eli> I think the presentation of the Emoji appearance for non-Emoji
    Eli> characters followed by VS-16 is less important than being able to
    Eli> display sequences of Emoji characters, so we will be doing OK, IMO, if
    Eli> Emacs 28 only supported the latter.

OK. Whilst updating the emoji sequences support to Unicode-14, I had
to add the following ranges to the 'emoji' script, since otherwise
they donʼt end up getting composed, because Emacs doesnʼt use the
'emoji' font for them. Theyʼre all Emoji_Presentation=No, but
emoji-zwj-sequences.txt modifies them with FE0F

(why didnʼt they just change them to Emoji_Presentation=Yes? I see
very little consistency between similar codepoints that nonetheless
have different Emoji_Presentation values)

(#x26F9 #x26F9 emoji)
(#x2764 #x2764 emoji)
(#x1f3cb #x1f3cc emoji)
(#x1f3f3 #x1f3f4 emoji)
(#x1f441 #x1f441 emoji)
(#x1f575 #x1f575 emoji)

So we get to pick our poison: complete consistency with the
Emoji_Presentation property from emoji-data.txt, or having complete
coverage for emoji-zwj-sequences.txt. Eli? (Iʼll admit to having a
slight preference for the latter, given that I find Emoji_Presentation
to be somewhat arbitrary for quite a few codepoints)

Robert
-- 



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-20 13:03                                         ` Robert Pluim
@ 2021-09-20 13:15                                           ` Eli Zaretskii
  2021-09-20 13:25                                             ` Eli Zaretskii
  2021-09-20 13:40                                             ` Robert Pluim
  0 siblings, 2 replies; 73+ messages in thread
From: Eli Zaretskii @ 2021-09-20 13:15 UTC (permalink / raw)
  To: Robert Pluim; +Cc: kevin.legouguec, emacs-devel

> From: Robert Pluim <rpluim@gmail.com>
> Cc: emacs-devel@gnu.org,  kevin.legouguec@gmail.com
> Date: Mon, 20 Sep 2021 15:03:20 +0200
> 
> OK. Whilst updating the emoji sequences support to Unicode-14, I had
> to add the following ranges to the 'emoji' script, since otherwise
> they donʼt end up getting composed, because Emacs doesnʼt use the
> 'emoji' font for them. Theyʼre all Emoji_Presentation=No, but
> emoji-zwj-sequences.txt modifies them with FE0F
> 
> (why didnʼt they just change them to Emoji_Presentation=Yes? I see
> very little consistency between similar codepoints that nonetheless
> have different Emoji_Presentation values)

It has something to do with text segmentation, although I don't
entirely understand what exactly and how.  What confuses me is that a
lot of symbols are also in that category, and we definitely don't want
to treat them as emoji.

> (#x26F9 #x26F9 emoji)
> (#x2764 #x2764 emoji)
> (#x1f3cb #x1f3cc emoji)
> (#x1f3f3 #x1f3f4 emoji)
> (#x1f441 #x1f441 emoji)
> (#x1f575 #x1f575 emoji)
> 
> So we get to pick our poison: complete consistency with the
> Emoji_Presentation property from emoji-data.txt, or having complete
> coverage for emoji-zwj-sequences.txt. Eli? (Iʼll admit to having a
> slight preference for the latter, given that I find Emoji_Presentation
> to be somewhat arbitrary for quite a few codepoints)

I agree: we should use the latter, at least for now.

Thanks.



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-20 13:15                                           ` Eli Zaretskii
@ 2021-09-20 13:25                                             ` Eli Zaretskii
  2021-09-20 13:50                                               ` Robert Pluim
  2021-09-20 13:40                                             ` Robert Pluim
  1 sibling, 1 reply; 73+ messages in thread
From: Eli Zaretskii @ 2021-09-20 13:25 UTC (permalink / raw)
  To: rpluim; +Cc: emacs-devel, kevin.legouguec

> Date: Mon, 20 Sep 2021 16:15:10 +0300
> From: Eli Zaretskii <eliz@gnu.org>
> Cc: kevin.legouguec@gmail.com, emacs-devel@gnu.org
> 
> > So we get to pick our poison: complete consistency with the
> > Emoji_Presentation property from emoji-data.txt, or having complete
> > coverage for emoji-zwj-sequences.txt. Eli? (Iʼll admit to having a
> > slight preference for the latter, given that I find Emoji_Presentation
> > to be somewhat arbitrary for quite a few codepoints)
> 
> I agree: we should use the latter, at least for now.

Btw, we could perhaps tweak the composition code to produce emoji
representation for the likes of U+231A followed by VS-16, even though
U+231A etc. aren't in the emoji script.  Remind me about this after
the basic emoji composition code is installed, and let's see if it
could be improved for those sequences.



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-20 13:15                                           ` Eli Zaretskii
  2021-09-20 13:25                                             ` Eli Zaretskii
@ 2021-09-20 13:40                                             ` Robert Pluim
  2021-09-20 13:45                                               ` Eli Zaretskii
  1 sibling, 1 reply; 73+ messages in thread
From: Robert Pluim @ 2021-09-20 13:40 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: kevin.legouguec, emacs-devel

>>>>> On Mon, 20 Sep 2021 16:15:10 +0300, Eli Zaretskii <eliz@gnu.org> said:
    >> So we get to pick our poison: complete consistency with the
    >> Emoji_Presentation property from emoji-data.txt, or having complete
    >> coverage for emoji-zwj-sequences.txt. Eli? (Iʼll admit to having a
    >> slight preference for the latter, given that I find Emoji_Presentation
    >> to be somewhat arbitrary for quite a few codepoints)

    Eli> I agree: we should use the latter, at least for now.

OK. I can finish that up tonight, I think.

Robert
-- 



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-20 13:40                                             ` Robert Pluim
@ 2021-09-20 13:45                                               ` Eli Zaretskii
  0 siblings, 0 replies; 73+ messages in thread
From: Eli Zaretskii @ 2021-09-20 13:45 UTC (permalink / raw)
  To: Robert Pluim; +Cc: emacs-devel, kevin.legouguec

> From: Robert Pluim <rpluim@gmail.com>
> Date: Mon, 20 Sep 2021 15:40:03 +0200
> Cc: kevin.legouguec@gmail.com, emacs-devel@gnu.org
> 
> >>>>> On Mon, 20 Sep 2021 16:15:10 +0300, Eli Zaretskii <eliz@gnu.org> said:
>     >> So we get to pick our poison: complete consistency with the
>     >> Emoji_Presentation property from emoji-data.txt, or having complete
>     >> coverage for emoji-zwj-sequences.txt. Eli? (Iʼll admit to having a
>     >> slight preference for the latter, given that I find Emoji_Presentation
>     >> to be somewhat arbitrary for quite a few codepoints)
> 
>     Eli> I agree: we should use the latter, at least for now.
> 
> OK. I can finish that up tonight, I think.

Great news, thanks.



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-20 13:25                                             ` Eli Zaretskii
@ 2021-09-20 13:50                                               ` Robert Pluim
  2021-09-20 15:27                                                 ` Eli Zaretskii
  0 siblings, 1 reply; 73+ messages in thread
From: Robert Pluim @ 2021-09-20 13:50 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel, kevin.legouguec

>>>>> On Mon, 20 Sep 2021 16:25:59 +0300, Eli Zaretskii <eliz@gnu.org> said:

    >> Date: Mon, 20 Sep 2021 16:15:10 +0300
    >> From: Eli Zaretskii <eliz@gnu.org>
    >> Cc: kevin.legouguec@gmail.com, emacs-devel@gnu.org
    >> 
    >> > So we get to pick our poison: complete consistency with the
    >> > Emoji_Presentation property from emoji-data.txt, or having complete
    >> > coverage for emoji-zwj-sequences.txt. Eli? (Iʼll admit to having a
    >> > slight preference for the latter, given that I find Emoji_Presentation
    >> > to be somewhat arbitrary for quite a few codepoints)
    >> 
    >> I agree: we should use the latter, at least for now.

    Eli> Btw, we could perhaps tweak the composition code to produce emoji
    Eli> representation for the likes of U+231A followed by VS-16, even though
    Eli> U+231A etc. aren't in the emoji script.  Remind me about this after
    Eli> the basic emoji composition code is installed, and let's see if it
    Eli> could be improved for those sequences.

? U+231A has Emoji_Presentation=Yes. In any case, donʼt you need at
least one codepoint to be using the emoji font to do that? (Noto Color
Emoji doesnʼt have a glyph for VS-16, so that canʼt be used)

As another aside: lisp/language/japanese.el sets up some
composition-function-table entries for the Variation Selectors
already, so eg

U+231A U+FE0F

already gets composed.

Robert
-- 



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-20 13:50                                               ` Robert Pluim
@ 2021-09-20 15:27                                                 ` Eli Zaretskii
  2021-09-20 17:32                                                   ` Robert Pluim
  0 siblings, 1 reply; 73+ messages in thread
From: Eli Zaretskii @ 2021-09-20 15:27 UTC (permalink / raw)
  To: Robert Pluim; +Cc: emacs-devel, kevin.legouguec

> From: Robert Pluim <rpluim@gmail.com>
> Cc: kevin.legouguec@gmail.com,  emacs-devel@gnu.org
> Date: Mon, 20 Sep 2021 15:50:49 +0200
> 
>     Eli> Btw, we could perhaps tweak the composition code to produce emoji
>     Eli> representation for the likes of U+231A followed by VS-16, even though
>     Eli> U+231A etc. aren't in the emoji script.  Remind me about this after
>     Eli> the basic emoji composition code is installed, and let's see if it
>     Eli> could be improved for those sequences.
> 
> ? U+231A has Emoji_Presentation=Yes.

Well, bad example.  U+21AA is better.

> In any case, donʼt you need at least one codepoint to be using the
> emoji font to do that? (Noto Color Emoji doesnʼt have a glyph for
> VS-16, so that canʼt be used)

My idea is to trick the font_range function, which verifies that the
sequence can be composed using a single font, to use an Emoji font
when it sees something followed by a variation selector, instead of
the font for the first character in the sequence.  For that, the rules
for Emoji sequences in composition-function-table should be anchored
on the VS-n codepoints (which I think is a good idea regardless).

> As another aside: lisp/language/japanese.el sets up some
> composition-function-table entries for the Variation Selectors
> already, so eg
> 
> U+231A U+FE0F
> 
> already gets composed.

Yeah, that's the old kludge, we may wish to revisit it at some point.



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-20 15:27                                                 ` Eli Zaretskii
@ 2021-09-20 17:32                                                   ` Robert Pluim
  2021-09-20 18:54                                                     ` Eli Zaretskii
  0 siblings, 1 reply; 73+ messages in thread
From: Robert Pluim @ 2021-09-20 17:32 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel, kevin.legouguec

>>>>> On Mon, 20 Sep 2021 18:27:31 +0300, Eli Zaretskii <eliz@gnu.org> said:

    >> From: Robert Pluim <rpluim@gmail.com>
    >> Cc: kevin.legouguec@gmail.com,  emacs-devel@gnu.org
    >> Date: Mon, 20 Sep 2021 15:50:49 +0200
    >> 
    Eli> Btw, we could perhaps tweak the composition code to produce emoji
    Eli> representation for the likes of U+231A followed by VS-16, even though
    Eli> U+231A etc. aren't in the emoji script.  Remind me about this after
    Eli> the basic emoji composition code is installed, and let's see if it
    Eli> could be improved for those sequences.
    >> 
    >> ? U+231A has Emoji_Presentation=Yes.

    Eli> Well, bad example.  U+21AA is better.

OK

    >> In any case, donʼt you need at least one codepoint to be using the
    >> emoji font to do that? (Noto Color Emoji doesnʼt have a glyph for
    >> VS-16, so that canʼt be used)

    Eli> My idea is to trick the font_range function, which verifies that the
    Eli> sequence can be composed using a single font, to use an Emoji font
    Eli> when it sees something followed by a variation selector, instead of
    Eli> the font for the first character in the sequence.  For that, the rules
    Eli> for Emoji sequences in composition-function-table should be anchored
    Eli> on the VS-n codepoints (which I think is a good idea regardless).

Weʼd have to raise the lookback limit for composition-function-table
rules higher than 3 (maybe only to 4).

I guess it reduces the number of entries in
composition-function-table, but then you end up with a lot of rules
for eg VS-16. emoji-zwj-sequences.txt would result in about 840 rules,
with a lot of redundancy, which could be reduced, but I think that can
wait until after the zwj sequence stuff goes in.

Robert
-- 



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-20 17:32                                                   ` Robert Pluim
@ 2021-09-20 18:54                                                     ` Eli Zaretskii
  2021-09-20 19:30                                                       ` Robert Pluim
  0 siblings, 1 reply; 73+ messages in thread
From: Eli Zaretskii @ 2021-09-20 18:54 UTC (permalink / raw)
  To: Robert Pluim; +Cc: emacs-devel, kevin.legouguec

> From: Robert Pluim <rpluim@gmail.com>
> Cc: kevin.legouguec@gmail.com,  emacs-devel@gnu.org
> Date: Mon, 20 Sep 2021 19:32:23 +0200
> 
>     Eli> My idea is to trick the font_range function, which verifies that the
>     Eli> sequence can be composed using a single font, to use an Emoji font
>     Eli> when it sees something followed by a variation selector, instead of
>     Eli> the font for the first character in the sequence.  For that, the rules
>     Eli> for Emoji sequences in composition-function-table should be anchored
>     Eli> on the VS-n codepoints (which I think is a good idea regardless).
> 
> Weʼd have to raise the lookback limit for composition-function-table
> rules higher than 3 (maybe only to 4).

Examples?  Not that it's a catastrophe.

> I guess it reduces the number of entries in
> composition-function-table, but then you end up with a lot of rules
> for eg VS-16.

Why do you think we need to have a lot of such rules?  What kind of
rules did you think about?

> emoji-zwj-sequences.txt would result in about 840 rules,
> with a lot of redundancy, which could be reduced, but I think that can
> wait until after the zwj sequence stuff goes in.

I guess I'm missing something because I don't see a problem there.



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-20 18:54                                                     ` Eli Zaretskii
@ 2021-09-20 19:30                                                       ` Robert Pluim
  2021-09-20 19:42                                                         ` Eli Zaretskii
  0 siblings, 1 reply; 73+ messages in thread
From: Robert Pluim @ 2021-09-20 19:30 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel, kevin.legouguec

>>>>> On Mon, 20 Sep 2021 21:54:57 +0300, Eli Zaretskii <eliz@gnu.org> said:

    >> From: Robert Pluim <rpluim@gmail.com>
    >> Cc: kevin.legouguec@gmail.com,  emacs-devel@gnu.org
    >> Date: Mon, 20 Sep 2021 19:32:23 +0200
    >> 
    Eli> My idea is to trick the font_range function, which verifies that the
    Eli> sequence can be composed using a single font, to use an Emoji font
    Eli> when it sees something followed by a variation selector, instead of
    Eli> the font for the first character in the sequence.  For that, the rules
    Eli> for Emoji sequences in composition-function-table should be anchored
    Eli> on the VS-n codepoints (which I think is a good idea regardless).
    >> 
    >> Weʼd have to raise the lookback limit for composition-function-table
    >> rules higher than 3 (maybe only to 4).

    Eli> Examples?  Not that it's a catastrophe.

From emoji-zwj-sequences.txt:

1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence
; couple with heart: man, man, light skin tone                   #
E13.1  [1] (👨🏻‍❤️‍👨🏻)

With the current limit you'd get no further than the 1F3FB if you
anchored at FE0F, and miss the 1F468.

    >> I guess it reduces the number of entries in
    >> composition-function-table, but then you end up with a lot of rules
    >> for eg VS-16.

    Eli> Why do you think we need to have a lot of such rules?  What kind of
    Eli> rules did you think about?

For whatever reason, a lot of the sequences in emoji-zwj-sequences.txt
contain codepoints with Emoji_Presentation = No, hence theyʼre
followed by VS-16. As a result, anchoring to VS-16 would produces a
lot of rules for VS-16.

    >> emoji-zwj-sequences.txt would result in about 840 rules,
    >> with a lot of redundancy, which could be reduced, but I think that can
    >> wait until after the zwj sequence stuff goes in.

    Eli> I guess I'm missing something because I don't see a problem there.

Perhaps Iʼm worrying too much. It would be a lot of rules to check,
but only when encountering VS-16.

Anyway, we can measure the difference, if any, once we have the base
implementation and Someone™ implements the VS-16 anchored version (it
would only be a dozen lines of awk, I think).

Robert
-- 



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-20 19:30                                                       ` Robert Pluim
@ 2021-09-20 19:42                                                         ` Eli Zaretskii
  2021-09-20 20:05                                                           ` Robert Pluim
  0 siblings, 1 reply; 73+ messages in thread
From: Eli Zaretskii @ 2021-09-20 19:42 UTC (permalink / raw)
  To: Robert Pluim; +Cc: emacs-devel, kevin.legouguec

> From: Robert Pluim <rpluim@gmail.com>
> Cc: kevin.legouguec@gmail.com,  emacs-devel@gnu.org
> Date: Mon, 20 Sep 2021 21:30:13 +0200
> 
> >>>>> On Mon, 20 Sep 2021 21:54:57 +0300, Eli Zaretskii <eliz@gnu.org> said:
> 
>     Eli> for Emoji sequences in composition-function-table should be anchored
>     Eli> on the VS-n codepoints (which I think is a good idea regardless).
>     >> 
>     >> Weʼd have to raise the lookback limit for composition-function-table
>     >> rules higher than 3 (maybe only to 4).
> 
>     Eli> Examples?  Not that it's a catastrophe.
> 
> >From emoji-zwj-sequences.txt:
> 
> 1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence
> ; couple with heart: man, man, light skin tone                   #
> E13.1  [1] (👨🏻‍❤️‍👨🏻)
> 
> With the current limit you'd get no further than the 1F3FB if you
> anchored at FE0F, and miss the 1F468.

Ah, that's a misunderstanding.  I meant what I said only for sequences
that start with a non-emoji character.  When the first character is
from the emoji script, we don't need anything special to have the
right font used.

>     >> I guess it reduces the number of entries in
>     >> composition-function-table, but then you end up with a lot of rules
>     >> for eg VS-16.
> 
>     Eli> Why do you think we need to have a lot of such rules?  What kind of
>     Eli> rules did you think about?
> 
> For whatever reason, a lot of the sequences in emoji-zwj-sequences.txt
> contain codepoints with Emoji_Presentation = No, hence theyʼre
> followed by VS-16. As a result, anchoring to VS-16 would produces a
> lot of rules for VS-16.

We don't need a separate rule for every sequence, we can use a regular
expression with character sets.  We can even have regexps that match
more than emoji-zwj-sequences.txt specifies, since the font and the
shaping engine will sort that out and return a failure indication for
sequences that the font doesn't support.

> Anyway, we can measure the difference, if any, once we have the base
> implementation and Someone™ implements the VS-16 anchored version (it
> would only be a dozen lines of awk, I think).

Let's cross that bridge when we get to it.



^ permalink raw reply	[flat|nested] 73+ messages in thread

* Re: Better emoji support
  2021-09-20 19:42                                                         ` Eli Zaretskii
@ 2021-09-20 20:05                                                           ` Robert Pluim
  0 siblings, 0 replies; 73+ messages in thread
From: Robert Pluim @ 2021-09-20 20:05 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel, kevin.legouguec

>>>>> On Mon, 20 Sep 2021 22:42:29 +0300, Eli Zaretskii <eliz@gnu.org> said:

    >> From: Robert Pluim <rpluim@gmail.com>
    >> Cc: kevin.legouguec@gmail.com,  emacs-devel@gnu.org
    >> Date: Mon, 20 Sep 2021 21:30:13 +0200
    >> 
    >> >>>>> On Mon, 20 Sep 2021 21:54:57 +0300, Eli Zaretskii <eliz@gnu.org> said:
    >> 
    Eli> for Emoji sequences in composition-function-table should be anchored
    Eli> on the VS-n codepoints (which I think is a good idea regardless).
    >> >> 
    >> >> Weʼd have to raise the lookback limit for composition-function-table
    >> >> rules higher than 3 (maybe only to 4).
    >> 
    Eli> Examples?  Not that it's a catastrophe.
    >> 
    >> >From emoji-zwj-sequences.txt:
    >> 
    >> 1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence
    >> ; couple with heart: man, man, light skin tone                   #
    >> E13.1  [1] (👨🏻‍❤️‍👨🏻)
    >> 
    >> With the current limit you'd get no further than the 1F3FB if you
    >> anchored at FE0F, and miss the 1F468.

    Eli> Ah, that's a misunderstanding.  I meant what I said only for sequences
    Eli> that start with a non-emoji character.  When the first character is
    Eli> from the emoji script, we don't need anything special to have the
    Eli> right font used.

Phew. Let's talk about en/de-coding next, fun for all the family :-)

    >> >> I guess it reduces the number of entries in
    >> >> composition-function-table, but then you end up with a lot of rules
    >> >> for eg VS-16.
    >> 
    Eli> Why do you think we need to have a lot of such rules?  What kind of
    Eli> rules did you think about?
    >> 
    >> For whatever reason, a lot of the sequences in emoji-zwj-sequences.txt
    >> contain codepoints with Emoji_Presentation = No, hence theyʼre
    >> followed by VS-16. As a result, anchoring to VS-16 would produces a
    >> lot of rules for VS-16.

    Eli> We don't need a separate rule for every sequence, we can use a regular
    Eli> expression with character sets.  We can even have regexps that match
    Eli> more than emoji-zwj-sequences.txt specifies, since the font and the
    Eli> shaping engine will sort that out and return a failure indication for
    Eli> sequences that the font doesn't support.

Right.

    >> Anyway, we can measure the difference, if any, once we have the base
    >> implementation and Someone™ implements the VS-16 anchored version (it
    >> would only be a dozen lines of awk, I think).

    Eli> Let's cross that bridge when we get to it.

Right. For now we key off the first character in the sequence
speficied in emoji-zwj-sequences.txt.

Robert
-- 



^ permalink raw reply	[flat|nested] 73+ messages in thread

end of thread, other threads:[~2021-09-20 20:05 UTC | newest]

Thread overview: 73+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-10  9:19 Better emoji support Eli Zaretskii
2021-07-10  9:24 ` Robert Pluim
2021-07-10  9:37   ` Eli Zaretskii
2021-07-10  9:45     ` Robert Pluim
2021-07-10  9:48       ` Eli Zaretskii
2021-07-12  8:27         ` Robert Pluim
2021-07-12 14:02           ` Robert Pluim
2021-07-12 15:38             ` Robert Pluim
2021-07-12 15:59               ` Eli Zaretskii
2021-07-13  7:00                 ` Jean Louis
2021-07-13  7:50                   ` Robert Pluim
2021-07-15 15:15                 ` Robert Pluim
2021-07-15 15:44                   ` Eli Zaretskii
2021-09-13 12:36         ` Eli Zaretskii
2021-09-13 15:44           ` Robert Pluim
2021-09-13 16:07             ` Eli Zaretskii
2021-09-13 16:36             ` Jean-Christophe Helary
2021-09-17 13:01               ` Robert Pluim
2021-09-17 13:42                 ` Jean-Christophe Helary
2021-09-17 13:50                   ` Robert Pluim
2021-09-17 15:51                     ` Kévin Le Gouguec
2021-09-17 16:43                       ` Robert Pluim
2021-09-17 19:34                         ` Kévin Le Gouguec
2021-09-19 18:27                           ` Robert Pluim
2021-09-19 19:43                             ` Kévin Le Gouguec
2021-09-20  4:23                               ` Eli Zaretskii
2021-09-20  6:20                                 ` Kévin Le Gouguec
2021-09-20  6:53                                   ` Eli Zaretskii
2021-09-20  8:40                                     ` Robert Pluim
2021-09-20  9:53                                       ` Eli Zaretskii
2021-09-20 13:03                                         ` Robert Pluim
2021-09-20 13:15                                           ` Eli Zaretskii
2021-09-20 13:25                                             ` Eli Zaretskii
2021-09-20 13:50                                               ` Robert Pluim
2021-09-20 15:27                                                 ` Eli Zaretskii
2021-09-20 17:32                                                   ` Robert Pluim
2021-09-20 18:54                                                     ` Eli Zaretskii
2021-09-20 19:30                                                       ` Robert Pluim
2021-09-20 19:42                                                         ` Eli Zaretskii
2021-09-20 20:05                                                           ` Robert Pluim
2021-09-20 13:40                                             ` Robert Pluim
2021-09-20 13:45                                               ` Eli Zaretskii
2021-09-17 15:58                     ` Jean-Christophe Helary
2021-09-17 16:35                     ` Daniel Martín
2021-09-17 16:52                       ` Robert Pluim
2021-09-17 15:39                 ` Stephen Berman
2021-09-17 16:01                   ` Eli Zaretskii
2021-09-17 16:34                     ` Stephen Berman
2021-09-17 16:58                       ` Robert Pluim
2021-09-17 17:05                         ` Stephen Berman
2021-09-17 17:10                           ` Robert Pluim
2021-09-17 17:17                             ` Stephen Berman
2021-09-17 17:37                               ` Better emoji support, " Robert Pluim
2021-09-17 17:49                                 ` Stephen Berman
2021-09-17 17:51                                   ` Robert Pluim
2021-09-17 18:53                                     ` martin rudalics
2021-09-17 18:58                                       ` Robert Pluim
2021-09-17 19:44                                         ` Stephen Berman
2021-09-17 18:53                                 ` martin rudalics
2021-09-17 16:55                     ` martin rudalics
2021-09-17 18:48                 ` Eli Zaretskii
2021-09-17 18:59                   ` Robert Pluim
2021-09-18  5:39                     ` Eli Zaretskii
2021-09-18  6:25                 ` Eli Zaretskii
2021-09-19 16:09                 ` Juri Linkov
2021-09-19 17:16                   ` Kévin Le Gouguec
2021-09-19 18:20                     ` Robert Pluim
2021-09-19 19:13                       ` Robert Pluim
2021-09-19 17:24                   ` Eli Zaretskii
2021-09-19 18:10                     ` Robert Pluim
2021-09-19 18:29                       ` Eli Zaretskii
2021-09-19 18:40                         ` Robert Pluim
2021-09-19 18:34                       ` Eli Zaretskii

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).