emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

scratch/emoji 93a835c: Start implementation of an emoji input system bas


From: Lars Ingebrigtsen
Subject: scratch/emoji 93a835c: Start implementation of an emoji input system based on transient
Date: Mon, 25 Oct 2021 23:34:51 -0400 (EDT)

branch: scratch/emoji
commit 93a835c652c98bf0086258c1c18c7ca47747c797
Author: Lars Ingebrigtsen <larsi@gnus.org>
Commit: Lars Ingebrigtsen <larsi@gnus.org>

    Start implementation of an emoji input system based on transient
---
 admin/unidata/labels.txt | 196 +++++++++++++++++++++++++++++++++++++++++++++++
 lisp/play/emoji.el       | 191 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 387 insertions(+)

diff --git a/admin/unidata/labels.txt b/admin/unidata/labels.txt
new file mode 100644
index 0000000..5b35bf5
--- /dev/null
+++ b/admin/unidata/labels.txt
@@ -0,0 +1,196 @@
+# labels.txt
+# Copyright ยฉ 1991-2016 Unicode, Inc.
+# CLDR data files are interpreted according to the LDML specification 
(http://unicode.org/reports/tr35/)
+# For terms of use, see http://www.unicode.org/copyright.html
+#
+# This file provides information for mapping character labels to sets of 
characters.
+# The characters should normally be sorted using CLDR collation data, but that 
order may be further customized.
+# For example, lists of brackets may be ordered to show pairs together.
+# The data is not in XML; instead it uses a variant of the UCD semicolon 
format for compactness and maintainability:
+# Format:
+#   Field 0: a hex Unicode character, or a hex Unicode character range, or a 
UnicodeSet.
+#   Field 1: a label that applies to that character.
+#   Field 2: a second-level label (optional) that applies to that character.
+# Any field that would contain a literal โ€˜;โ€™ has that replaced by \u003B.
+# Note that characters may get multiple labels.
+
+[โ˜บ๐Ÿ˜€-๐Ÿ˜†๐Ÿ˜‰-๐Ÿ˜‹๐Ÿ˜๐Ÿ˜Ž๐Ÿ˜—-๐Ÿ˜š๐Ÿ™‚๐Ÿค—]     ; Smileys & People        ;       face-positive
+[๐Ÿคฃ๐Ÿคฉ๐Ÿฅฐ]                       ;  Smileys & People        ;       face-positive
+[๐Ÿ˜Œ๐Ÿ˜-๐Ÿ˜•๐Ÿ˜›-๐Ÿ˜๐Ÿ˜ฃ๐Ÿ˜ฅ๐Ÿ˜ช๐Ÿ˜ซ๐Ÿ˜ฎ๐Ÿ˜ฏ]     ;  Smileys & People        ;       face-neutral
+[๐Ÿ˜ฒ๐Ÿ˜ด๐Ÿ˜ถ๐Ÿ™ƒ๐Ÿ™„๐Ÿค๐Ÿค‘๐Ÿค”๐Ÿคค๐Ÿคจ]         ; Smileys & People        ;       face-neutral
+[โ˜น๐Ÿ˜–๐Ÿ˜ž-๐Ÿ˜ข๐Ÿ˜ค๐Ÿ˜ฆ-๐Ÿ˜ฉ๐Ÿ˜ฌ๐Ÿ˜ญ๐Ÿ˜ฐ๐Ÿ˜ฑ]      ; Smileys & People        ;       face-negative
+[๐Ÿ˜ณ๐Ÿ˜ต๐Ÿ™๐Ÿคช๐Ÿคฌ๐Ÿคฏ๐Ÿฅต๐Ÿฅถ]             ;       Smileys & People        ;       face-negative
+[๐Ÿ˜ท๐Ÿค’๐Ÿค•๐Ÿคข๐Ÿคง๐Ÿคฎ]                 ;     Smileys & People        ;       face-sick
+[๐Ÿ˜‡๐Ÿค“๐Ÿค ๐Ÿคฅ๐Ÿคซ๐Ÿคญ๐Ÿฅณ๐Ÿฅด๐Ÿฅบ๐Ÿง]         ; Smileys & People        ;       face-role
+[โ˜ ๐Ÿ‘น-๐Ÿ‘ป๐Ÿ‘ฝ-๐Ÿ’€๐Ÿ’ฉ๐Ÿ˜ˆ๐Ÿค–๐Ÿคก]          ;       Smileys & People        ;       face-fantasy
+[๐Ÿ˜ธ-๐Ÿ™€]                        ; Smileys & People        ;       cat-face
+[๐Ÿ™ˆ-๐Ÿ™Š]                        ; Smileys & People        ;       monkey-face
+[๐Ÿป-๐Ÿฟ]                        ; Smileys & People        ;       skin-tone
+[๐Ÿ‘ฆ-๐Ÿ‘ฉ๐Ÿ‘ด-๐Ÿ‘ถ๐Ÿง‘-๐Ÿง“]              ;     Smileys & People        ;       person
+[๐Ÿ‘ฎ๐Ÿ‘ฐ-๐Ÿ‘ณ๐Ÿ‘ท๐Ÿ‘ธ๐Ÿ’‚๐Ÿ•ต๐Ÿคฐ๐Ÿคฑ๐Ÿคด๐Ÿคต]      ;  Smileys & People        ;       person-role
+[๐Ÿง”๐Ÿง•{๐Ÿ‘จโ€โš•๏ธ}{๐Ÿ‘จโ€โš–๏ธ}{๐Ÿ‘จโ€โœˆ๏ธ}{๐Ÿ‘จโ€๐ŸŒพ}{๐Ÿ‘จโ€๐Ÿณ}] ;     Smileys & People        ;       
person-role
+[{๐Ÿ‘จโ€๐ŸŽ“}{๐Ÿ‘จโ€๐ŸŽค}{๐Ÿ‘จโ€๐ŸŽจ}{๐Ÿ‘จโ€๐Ÿซ}{๐Ÿ‘จโ€๐Ÿญ}{๐Ÿ‘จโ€๐Ÿ’ป}] ;     Smileys & People        ;       
person-role
+[{๐Ÿ‘จโ€๐Ÿ’ผ}{๐Ÿ‘จโ€๐Ÿ”ง}{๐Ÿ‘จโ€๐Ÿ”ฌ}{๐Ÿ‘จโ€๐Ÿš€}{๐Ÿ‘จโ€๐Ÿš’}{๐Ÿ‘จโ€๐Ÿฆฐ}] ;     Smileys & People        ;       
person-role
+[{๐Ÿ‘จโ€๐Ÿฆฑ}{๐Ÿ‘จโ€๐Ÿฆฒ}{๐Ÿ‘จโ€๐Ÿฆณ}{๐Ÿ‘ฉโ€โš•๏ธ}{๐Ÿ‘ฉโ€โš–๏ธ}{๐Ÿ‘ฉโ€โœˆ๏ธ}] ;  Smileys & People        ;       
person-role
+[{๐Ÿ‘ฉโ€๐ŸŒพ}{๐Ÿ‘ฉโ€๐Ÿณ}{๐Ÿ‘ฉโ€๐ŸŽ“}{๐Ÿ‘ฉโ€๐ŸŽค}{๐Ÿ‘ฉโ€๐ŸŽจ}{๐Ÿ‘ฉโ€๐Ÿซ}] ;     Smileys & People        ;       
person-role
+[{๐Ÿ‘ฉโ€๐Ÿญ}{๐Ÿ‘ฉโ€๐Ÿ’ป}{๐Ÿ‘ฉโ€๐Ÿ’ผ}{๐Ÿ‘ฉโ€๐Ÿ”ง}{๐Ÿ‘ฉโ€๐Ÿ”ฌ}{๐Ÿ‘ฉโ€๐Ÿš€}] ;     Smileys & People        ;       
person-role
+[{๐Ÿ‘ฉโ€๐Ÿš’}{๐Ÿ‘ฉโ€๐Ÿฆฐ}{๐Ÿ‘ฉโ€๐Ÿฆฑ}{๐Ÿ‘ฉโ€๐Ÿฆฒ}{๐Ÿ‘ฉโ€๐Ÿฆณ}{๐Ÿ‘ฎโ€โ™€๏ธ}] ;    Smileys & People        ;       
person-role
+[{๐Ÿ‘ฎโ€โ™‚๏ธ}{๐Ÿ‘ฑโ€โ™€๏ธ}{๐Ÿ‘ฑโ€โ™‚๏ธ}{๐Ÿ‘ณโ€โ™€๏ธ}{๐Ÿ‘ณโ€โ™‚๏ธ}{๐Ÿ‘ทโ€โ™€๏ธ}] ;       Smileys & People        ;       
person-role
+[{๐Ÿ‘ทโ€โ™‚๏ธ}{๐Ÿ’‚โ€โ™€๏ธ}{๐Ÿ’‚โ€โ™‚๏ธ}{๐Ÿ•ต๏ธโ€โ™€๏ธ}{๐Ÿ•ต๏ธโ€โ™‚๏ธ}] ;   Smileys & People        ;       
person-role
+[๐ŸŽ…๐Ÿ‘ผ๐Ÿคถ๐Ÿฆธ๐Ÿฆน๐Ÿง™-๐ŸงŸ{๐Ÿฆธโ€โ™€๏ธ}{๐Ÿฆธโ€โ™‚๏ธ}] ;       Smileys & People        ;       person-fantasy
+[{๐Ÿฆนโ€โ™€๏ธ}{๐Ÿฆนโ€โ™‚๏ธ}{๐Ÿง™โ€โ™€๏ธ}{๐Ÿง™โ€โ™‚๏ธ}{๐Ÿงšโ€โ™€๏ธ}{๐Ÿงšโ€โ™‚๏ธ}] ;       Smileys & People        ;       
person-fantasy
+[{๐Ÿง›โ€โ™€๏ธ}{๐Ÿง›โ€โ™‚๏ธ}{๐Ÿงœโ€โ™€๏ธ}{๐Ÿงœโ€โ™‚๏ธ}{๐Ÿงโ€โ™€๏ธ}{๐Ÿงโ€โ™‚๏ธ}] ;       Smileys & People        ;       
person-fantasy
+[{๐Ÿงžโ€โ™€๏ธ}{๐Ÿงžโ€โ™‚๏ธ}{๐ŸงŸโ€โ™€๏ธ}{๐ŸงŸโ€โ™‚๏ธ}] ;   Smileys & People        ;       person-fantasy
+[๐Ÿ’๐Ÿ™…-๐Ÿ™‡๐Ÿ™‹๐Ÿ™๐Ÿ™Ž๐Ÿคฆ๐Ÿคท{๐Ÿ’โ€โ™€๏ธ}{๐Ÿ’โ€โ™‚๏ธ}] ;      Smileys & People        ;       person-gesture
+[{๐Ÿ™…โ€โ™€๏ธ}{๐Ÿ™…โ€โ™‚๏ธ}{๐Ÿ™†โ€โ™€๏ธ}{๐Ÿ™†โ€โ™‚๏ธ}{๐Ÿ™‡โ€โ™€๏ธ}{๐Ÿ™‡โ€โ™‚๏ธ}] ;       Smileys & People        ;       
person-gesture
+[{๐Ÿ™‹โ€โ™€๏ธ}{๐Ÿ™‹โ€โ™‚๏ธ}{๐Ÿ™โ€โ™€๏ธ}{๐Ÿ™โ€โ™‚๏ธ}{๐Ÿ™Žโ€โ™€๏ธ}{๐Ÿ™Žโ€โ™‚๏ธ}] ;       Smileys & People        ;       
person-gesture
+[{๐Ÿคฆโ€โ™€๏ธ}{๐Ÿคฆโ€โ™‚๏ธ}{๐Ÿคทโ€โ™€๏ธ}{๐Ÿคทโ€โ™‚๏ธ}] ;   Smileys & People        ;       person-gesture
+[๐Ÿƒ๐Ÿ‘ค๐Ÿ‘ฅ๐Ÿ‘ฏ๐Ÿ’ƒ๐Ÿ’†๐Ÿ’‡๐Ÿ•ด๐Ÿ•บ๐Ÿ—ฃ๐Ÿšถ]       ;  Smileys & People        ;       person-activity
+[๐Ÿ›€๐Ÿ›Œ๐Ÿง–-๐Ÿง˜{๐Ÿƒโ€โ™€๏ธ}{๐Ÿƒโ€โ™‚๏ธ}{๐Ÿ‘ฏโ€โ™€๏ธ}{๐Ÿ‘ฏโ€โ™‚๏ธ}] ;      Smileys & People        ;       
person-activity
+[{๐Ÿ’†โ€โ™€๏ธ}{๐Ÿ’†โ€โ™‚๏ธ}{๐Ÿ’‡โ€โ™€๏ธ}{๐Ÿ’‡โ€โ™‚๏ธ}{๐Ÿšถโ€โ™€๏ธ}{๐Ÿšถโ€โ™‚๏ธ}] ;       Smileys & People        ;       
person-activity
+[{๐Ÿง–โ€โ™€๏ธ}{๐Ÿง–โ€โ™‚๏ธ}{๐Ÿง—โ€โ™€๏ธ}{๐Ÿง—โ€โ™‚๏ธ}{๐Ÿง˜โ€โ™€๏ธ}{๐Ÿง˜โ€โ™‚๏ธ}] ;       Smileys & People        ;       
person-activity
+[โ›ทโ›น๐Ÿ‚๐Ÿ„๐Ÿ‡๐ŸŠ-๐ŸŽ๐Ÿšฃ๐Ÿšด๐Ÿšต๐Ÿคธ-๐Ÿคบ]     ; Smileys & People        ;       person-sport
+[๐Ÿคผ-๐Ÿคพ{โ›น๏ธโ€โ™€๏ธ}{โ›น๏ธโ€โ™‚๏ธ}{๐Ÿ„โ€โ™€๏ธ}{๐Ÿ„โ€โ™‚๏ธ}{๐ŸŠโ€โ™€๏ธ}] ;        Smileys & People        ;       
person-sport
+[{๐ŸŠโ€โ™‚๏ธ}{๐Ÿ‹๏ธโ€โ™€๏ธ}{๐Ÿ‹๏ธโ€โ™‚๏ธ}{๐ŸŒ๏ธโ€โ™€๏ธ}{๐ŸŒ๏ธโ€โ™‚๏ธ}{๐Ÿšฃโ€โ™€๏ธ}] ;   Smileys & People        ;       
person-sport
+[{๐Ÿšฃโ€โ™‚๏ธ}{๐Ÿšดโ€โ™€๏ธ}{๐Ÿšดโ€โ™‚๏ธ}{๐Ÿšตโ€โ™€๏ธ}{๐Ÿšตโ€โ™‚๏ธ}{๐Ÿคธโ€โ™€๏ธ}] ;       Smileys & People        ;       
person-sport
+[{๐Ÿคธโ€โ™‚๏ธ}{๐Ÿคนโ€โ™€๏ธ}{๐Ÿคนโ€โ™‚๏ธ}{๐Ÿคผโ€โ™€๏ธ}{๐Ÿคผโ€โ™‚๏ธ}{๐Ÿคฝโ€โ™€๏ธ}] ;       Smileys & People        ;       
person-sport
+[{๐Ÿคฝโ€โ™‚๏ธ}{๐Ÿคพโ€โ™€๏ธ}{๐Ÿคพโ€โ™‚๏ธ}]        ;  Smileys & People        ;       person-sport
+[๐Ÿ‘ช-๐Ÿ‘ญ๐Ÿ’๐Ÿ’‘{๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ}{๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ}{๐Ÿ‘จโ€๐Ÿ‘ฆ}{๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ}] ;        Smileys & People        ;       
family
+[{๐Ÿ‘จโ€๐Ÿ‘ง}{๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ}{๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง}{๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆ}{๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ}{๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ง}] ; Smileys & People        ;       
family
+[{๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ}{๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง}{๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ}{๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ}{๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง}{๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ}] ; Smileys & People        
;       family
+[{๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง}{๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘จ}{๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘ฉ}{๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ}{๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ}{๐Ÿ‘ฉโ€๐Ÿ‘ฆ}] ; Smileys & People        
;       family
+[{๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ}{๐Ÿ‘ฉโ€๐Ÿ‘ง}{๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ}{๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง}{๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ}{๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ}] ; Smileys & People        ;       
family
+[{๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ง}{๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ}{๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง}] ;  Smileys & People        ;       family
+[โ˜โœŠ-โœ๐Ÿ‘€-๐Ÿ‘๐Ÿ‘ฃ๐Ÿ’…๐Ÿ’ช๐Ÿ–๐Ÿ–•๐Ÿ––]        ;       Smileys & People        ;       body
+[๐Ÿ™Œ๐Ÿ™๐Ÿค˜-๐ŸคŸ๐Ÿคฒ๐Ÿคณ๐Ÿฆฐ-๐Ÿฆท๐Ÿง {๐Ÿ‘๏ธโ€๐Ÿ—จ๏ธ}] ; Smileys & People        ;       body
+[โฃโค๐Ÿ’‹๐Ÿ’Œ๐Ÿ’“-๐Ÿ’Ÿ๐Ÿ’ข-๐Ÿ’ฆ๐Ÿ’จ๐Ÿ’ซ-๐Ÿ’ญ]      ;        Smileys & People        ;       emotion
+[๐Ÿ•ณ๐Ÿ–ค๐Ÿ—จ๐Ÿ—ฏ๐Ÿงก]                   ;    Smileys & People        ;       emotion
+[โ›‘๐ŸŽ’๐ŸŽ“๐ŸŽฉ๐Ÿ‘‘-๐Ÿ‘ข๐Ÿ’„๐Ÿ’๐Ÿ’Ž๐Ÿ“ฟ๐Ÿ•ถ]       ; Smileys & People        ;       clothing
+[๐Ÿ›๐Ÿฅผ-๐Ÿฅฟ๐Ÿงข-๐Ÿงฆ]                 ;    Smileys & People        ;       clothing
+[๐Ÿ€-๐Ÿˆ๐ŸŽ-๐Ÿ’๐Ÿ•-๐Ÿ˜๐Ÿจ-๐Ÿซ๐Ÿญ-๐Ÿฑ๐Ÿด-๐Ÿท] ; Animals & Nature        ;       animal-mammal
+[๐Ÿน-๐Ÿฟ๐Ÿฆ๐Ÿฆ„๐Ÿฆ‡๐ŸฆŠ๐ŸฆŒ๐Ÿฆ๐Ÿฆ๐Ÿฆ’-๐Ÿฆ”]     ;  Animals & Nature        ;       animal-mammal
+[๐Ÿฆ˜๐Ÿฆ™๐Ÿฆ›๐Ÿฆ๐Ÿฆก]                   ;    Animals & Nature        ;       animal-mammal
+[๐Ÿ“๐Ÿ”๐Ÿฃ-๐Ÿง๐Ÿ•Š๐Ÿฆƒ๐Ÿฆ…๐Ÿฆ†๐Ÿฆ‰๐Ÿฆš๐Ÿฆœ]      ;  Animals & Nature        ;       animal-bird
+[๐Ÿฆข]                           ;        Animals & Nature        ;       
animal-bird
+[๐Ÿธ]                           ;        Animals & Nature        ;       
animal-amphibian
+[๐Ÿ‰๐ŸŠ๐Ÿ๐Ÿข๐Ÿฒ๐ŸฆŽ๐Ÿฆ•๐Ÿฆ–]             ;       Animals & Nature        ;       animal-reptile
+[๐Ÿ‹๐Ÿ™๐Ÿš๐ŸŸ-๐Ÿก๐Ÿฌ๐Ÿณ๐Ÿฆ€๐Ÿฆˆ๐Ÿฆ๐Ÿฆ‘]      ;  Animals & Nature        ;       animal-marine
+[๐Ÿฆž]                           ;        Animals & Nature        ;       
animal-marine
+[๐ŸŒ๐Ÿ›-๐Ÿž๐Ÿ•ท๐Ÿ•ธ๐Ÿฆ‚๐Ÿฆ‹๐Ÿฆ—๐ŸฆŸ๐Ÿฆ ]        ; Animals & Nature        ;       animal-bug
+[๐ŸŒท-๐ŸŒผ๐Ÿต๐Ÿ’๐Ÿ’ฎ๐Ÿฅ€]                ;     Animals & Nature        ;       plant-flower
+[โ˜˜๐ŸŒฑ-๐ŸŒต๐ŸŒพ-๐Ÿƒ]                  ;   Animals & Nature        ;       plant-other
+[๐Ÿ…๐Ÿ‡-๐Ÿ“๐Ÿฅ๐Ÿฅฅ๐Ÿฅญ]                ;     Food & Drink    ;       food-fruit
+[๐ŸŒฐ๐ŸŒถ๐ŸŒฝ๐Ÿ„๐Ÿ†๐Ÿฅ‘๐Ÿฅ’๐Ÿฅ”๐Ÿฅ•๐Ÿฅœ๐Ÿฅฆ]       ;  Food & Drink    ;       food-vegetable
+[๐Ÿฅฌ]                           ;        Food & Drink    ;       food-vegetable
+[๐ŸŒญ-๐ŸŒฏ๐Ÿ”-๐Ÿ—๐Ÿž๐ŸŸ๐Ÿฒ๐Ÿณ๐Ÿฟ๐Ÿฅ๐Ÿฅ“]     ;  Food & Drink    ;       food-prepared
+[๐Ÿฅ–-๐Ÿฅš๐Ÿฅž๐Ÿฅฃ๐Ÿฅจ-๐Ÿฅซ๐Ÿฅฏ๐Ÿง€๐Ÿง‚]         ;        Food & Drink    ;       food-prepared
+[๐Ÿ˜-๐Ÿ๐Ÿ -๐Ÿฅ๐Ÿฑ๐ŸฅŸ-๐Ÿฅก๐Ÿฅฎ]          ;       Food & Drink    ;       food-asian
+[๐Ÿฆ-๐Ÿฐ๐ŸŽ‚๐Ÿฅง๐Ÿง]                  ;    Food & Drink    ;       food-sweet
+[โ˜•๐Ÿต-๐Ÿผ๐Ÿพ๐Ÿฅ‚๐Ÿฅƒ๐Ÿฅ›๐Ÿฅค]             ;      Food & Drink    ;       drink
+[๐Ÿด๐Ÿฝ๐Ÿบ๐Ÿ”ช๐Ÿฅ„๐Ÿฅข]                 ;     Food & Drink    ;       dishware
+[๐ŸŒ-๐ŸŒ๐Ÿ—บ๐Ÿ—พ๐Ÿงญ]                  ;    Travel & Places ;       place-map
+[โ›ฐ๐ŸŒ‹๐Ÿ”-๐Ÿ–๐Ÿœ-๐Ÿž๐Ÿ—ป]              ;     Travel & Places ;       place-geographic
+[๐Ÿ—๐Ÿ˜๐Ÿš๐Ÿ›๐ŸŸ-๐Ÿฆ๐Ÿจ-๐Ÿญ๐Ÿฏ๐Ÿฐ๐Ÿ’’]     ;  Travel & Places ;       place-building
+[๐Ÿ—ผ๐Ÿ—ฝ๐Ÿงฑ]                       ;  Travel & Places ;       place-building
+[โ›ฉโ›ช๐Ÿ•‹-๐Ÿ•]                      ; Travel & Places ;       place-religious
+[โ™จโ›ฒโ›บ๐ŸŒ๐ŸŒƒ-๐ŸŒ‡๐ŸŒ‰๐ŸŒŒ๐ŸŽ -๐ŸŽข๐ŸŽช]        ;       Travel & Places ;       place-other
+[๐Ÿ™๐Ÿ’ˆ]                         ; Travel & Places ;       place-other
+[โ›ฝ๐Ÿš‚-๐Ÿšž๐Ÿšฅ-๐Ÿšจ๐Ÿšฒ๐Ÿ›‘๐Ÿ›ข-๐Ÿ›ค๐Ÿ›ด๐Ÿ›ต]     ; Travel & Places ;       transport-ground
+[๐Ÿ›น]                           ;        Travel & Places ;       transport-ground
+[โš“โ›ดโ›ต๐Ÿšข๐Ÿšค๐Ÿ›ฅ๐Ÿ›ณ๐Ÿ›ถ]                ;    Travel & Places ;       transport-water
+[โœˆ๐Ÿ’บ๐Ÿš€๐Ÿš๐ŸšŸ-๐Ÿšก๐Ÿ›ฉ๐Ÿ›ซ๐Ÿ›ฌ๐Ÿ›ฐ๐Ÿ›ธ]       ; Travel & Places ;       transport-air
+[๐Ÿ›Ž๐Ÿงณ]                         ; Travel & Places ;       hotel
+[โŒšโŒ›โฐ-โณ๐Ÿ•-๐Ÿ•ง๐Ÿ•ฐ]                 ;  Travel & Places ;       time
+[โ˜€-โ˜„โ˜”โšกโ›„โ›…โ›ˆโ›ฑโ„โญ๐ŸŒ€]                ;        Travel & Places ;       sky & weather
+[๐ŸŒ‚๐ŸŒˆ๐ŸŒŠ๐ŸŒ‘-๐ŸŒก๐ŸŒค-๐ŸŒฌ๐Ÿ’ง๐Ÿ”ฅ]         ;        Travel & Places ;       sky & weather
+[โœจ๐ŸŽ€๐ŸŽ๐ŸŽƒ๐ŸŽ„๐ŸŽ†-๐ŸŽ‹๐ŸŽ-๐ŸŽ‘๐ŸŽ—๐ŸŽŸ]      ; Activities      ;       event
+[๐ŸŽซ๐Ÿงง๐Ÿงจ]                       ;  Activities      ;       event
+[๐ŸŽ–๐Ÿ…๐Ÿ†๐Ÿฅ‡-๐Ÿฅ‰]                  ;    Activities      ;       award-medal
+[โšฝโšพโ›ณโ›ธ๐ŸŽฃ๐ŸŽณ๐ŸŽฝ-๐Ÿ€๐Ÿˆ๐Ÿ‰๐Ÿ-๐Ÿ“]       ;       Activities      ;       sport
+[๐Ÿธ๐Ÿ›ท๐Ÿฅ…๐ŸฅŠ-๐Ÿฅ]                  ;    Activities      ;       sport
+[โ™Ÿโ™ โ™ฃโ™ฅโ™ฆ๐Ÿ€„๐Ÿƒ๐ŸŽฎ-๐ŸŽฒ๐ŸŽด๐Ÿ”ฎ]           ;     Activities      ;       game
+[๐Ÿ•น๐Ÿงฉ๐Ÿงธ๐Ÿงฟ]                     ;   Activities      ;       game
+[๐ŸŽจ๐ŸŽญ๐Ÿ–ผ๐Ÿงต๐Ÿงถ]                   ;    Activities      ;       arts & crafts
+[๐Ÿ“ข๐Ÿ“ฃ๐Ÿ“ฏ๐Ÿ”‡-๐Ÿ”Š๐Ÿ””๐Ÿ”•]              ;      Objects ;       sound
+[๐ŸŽ™-๐ŸŽ›๐ŸŽค๐ŸŽง๐ŸŽต๐ŸŽถ๐ŸŽผ๐Ÿ“ป]            ;       Objects ;       music
+[๐ŸŽท-๐ŸŽป๐Ÿฅ]                      ;  Objects ;       musical-instrument
+[โ˜Ž๐Ÿ“ž-๐Ÿ“ ๐Ÿ“ฑ๐Ÿ“ฒ]                   ;   Objects ;       phone
+[โŒจ๐Ÿ’ป๐Ÿ’ฝ-๐Ÿ“€๐Ÿ”‹๐Ÿ”Œ๐Ÿ–ฅ๐Ÿ–จ๐Ÿ–ฑ๐Ÿ–ฒ๐Ÿงฎ]       ; Objects ;       computer
+[๐ŸŽž๐ŸŽฅ๐ŸŽฌ๐Ÿฎ๐Ÿ’ก๐Ÿ“ท-๐Ÿ“บ๐Ÿ“ผ๐Ÿ“ฝ๐Ÿ”๐Ÿ”Ž]      ;  Objects ;       light & video
+[๐Ÿ”ฆ๐Ÿ•ฏ]                         ; Objects ;       light & video
+[๐Ÿท๐Ÿ“ƒ๐Ÿ“„๐Ÿ“‘-๐Ÿ“š๐Ÿ“œ๐Ÿ“ฐ๐Ÿ”–๐Ÿ—ž]          ;        Objects ;       book-paper
+[๐Ÿ’ฐ-๐Ÿ’น๐Ÿงพ]                      ;  Objects ;       money
+[โœ‰๐Ÿ“ค-๐Ÿ“ฎ๐Ÿ—ณ]                     ;  Objects ;       mail
+[โœโœ’๐Ÿ“๐Ÿ–Š-๐Ÿ–]                    ;  Objects ;       writing
+[โœ‚๐Ÿ’ผ๐Ÿ“๐Ÿ“‚๐Ÿ“…-๐Ÿ“๐Ÿ–‡๐Ÿ—‚-๐Ÿ—„๐Ÿ—‘-๐Ÿ—“]     ; Objects ;       office
+[๐Ÿ”-๐Ÿ”“๐Ÿ—]                      ;  Objects ;       lock
+[โš’โš”โš–โš™โ›โ›“๐Ÿน๐Ÿ”—๐Ÿ”ง-๐Ÿ”ฉ๐Ÿ”ซ]            ;    Objects ;       tool
+[๐Ÿ—œ๐Ÿ—ก๐Ÿ› ๐Ÿ›ก๐Ÿงฐ๐Ÿงฒ]                 ;     Objects ;       tool
+[โš—๐Ÿ“ก๐Ÿ”ฌ๐Ÿ”ญ๐Ÿงช-๐Ÿงฌ]                 ;    Objects ;       science
+[๐Ÿ’‰๐Ÿ’Š]                         ; Objects ;       medical
+[๐Ÿšช๐Ÿšฝ๐Ÿšฟ๐Ÿ›๐Ÿ›‹๐Ÿ›๐Ÿ›’๐Ÿงฏ๐Ÿงด๐Ÿงท๐Ÿงน-๐Ÿงฝ]    ;   Objects ;       household
+[โšฐโšฑ๐Ÿ—ฟ๐Ÿšฌ]                       ; Objects ;       other-object
+[โ™ฟ๐Ÿง๐Ÿšฎ๐Ÿšฐ๐Ÿšน-๐Ÿšผ๐Ÿšพ๐Ÿ›‚-๐Ÿ›…]          ;       Symbols ;       transport-sign
+[โ˜ขโ˜ฃโš โ›”๐Ÿ“ต๐Ÿ”ž๐Ÿšซ๐Ÿšญ๐Ÿšฏ๐Ÿšฑ๐Ÿšณ]           ;      Symbols ;       warning
+[๐Ÿšท๐Ÿšธ]                         ; Symbols ;       warning
+[โ†”-โ†™โ†ฉโ†ชโžกโคดโคตโฌ…-โฌ‡๐Ÿ”ƒ๐Ÿ”„]              ; Symbols ;       arrow
+[๐Ÿ”™-๐Ÿ”]                        ; Symbols ;       arrow
+[โ˜ฆโ˜ชโ˜ฎโ˜ฏโ˜ธโš›โœโœก๐Ÿ”ฏ๐Ÿ•‰๐Ÿ•Ž]               ;  Symbols ;       religion
+[๐Ÿ›]                           ;        Symbols ;       religion
+[โ™ˆ-โ™“โ›Ž]                         ;       Symbols ;       zodiac
+[โโฉ-โฏโธ-โบโ–ถโ—€๐ŸŽฆ๐Ÿ“ณ๐Ÿ“ด๐Ÿ“ถ]            ;   Symbols ;       av-symbol
+[๐Ÿ”€-๐Ÿ”‚๐Ÿ”…๐Ÿ”†๐Ÿ”ผ๐Ÿ”ฝ]                ;     Symbols ;       av-symbol
+[ยฉยฎโ€ผโ‰โ„ขโ˜‘โ™€โ™‚โ™ปโ™พโš•]                  ;       Symbols ;       other-symbol
+[โšœโœ…โœ”โœ–โœณโœดโ‡โŒโŽโ“-โ•]                 ;       Symbols ;       other-symbol
+[โ—โž•-โž—โžฐโžฟโญ•ใ€ฐใ€ฝ๐Ÿ“›๐Ÿ”ฐ๐Ÿ”ฑ]              ;  Symbols ;       other-symbol
+[๐Ÿ”Ÿ{#๏ธโƒฃ}{*๏ธโƒฃ}{0๏ธโƒฃ}{1๏ธโƒฃ}{2๏ธโƒฃ}]  ;        Symbols ;       keycap
+[{3๏ธโƒฃ}{4๏ธโƒฃ}{5๏ธโƒฃ}{6๏ธโƒฃ}{7๏ธโƒฃ}{8๏ธโƒฃ}] ;     Symbols ;       keycap
+[{9๏ธโƒฃ}]                        ;       Symbols ;       keycap
+[โ„นโ“‚ใŠ—ใŠ™๐Ÿ…ฐ๐Ÿ…ฑ๐Ÿ…พ๐Ÿ…ฟ๐Ÿ†Ž๐Ÿ†‘-๐Ÿ†š]          ;      Symbols ;       alphanum
+[๐Ÿˆ๐Ÿˆ‚๐Ÿˆš๐Ÿˆฏ๐Ÿˆฒ-๐Ÿˆบ๐Ÿ‰๐Ÿ‰‘๐Ÿ’ฏ๐Ÿ” -๐Ÿ”ค]     ;  Symbols ;       alphanum
+[โ–ชโ–ซโ—ป-โ—พโšชโšซโฌ›โฌœ๐Ÿ’ ๐Ÿ”˜๐Ÿ”ฒ-๐Ÿ”ป]           ;   Symbols ;       geometric
+[๐ŸŽŒ๐Ÿ๐Ÿณ๐Ÿด๐Ÿšฉ{๐Ÿณ๏ธโ€๐ŸŒˆ}{๐Ÿดโ€โ˜ ๏ธ}]    ;       Flags   ;       flag
+[{๐Ÿ‡ฆ๐Ÿ‡จ}{๐Ÿ‡ฆ๐Ÿ‡ฉ}{๐Ÿ‡ฆ๐Ÿ‡ช}{๐Ÿ‡ฆ๐Ÿ‡ซ}{๐Ÿ‡ฆ๐Ÿ‡ฌ}{๐Ÿ‡ฆ๐Ÿ‡ฎ}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ฆ๐Ÿ‡ฑ}{๐Ÿ‡ฆ๐Ÿ‡ฒ}{๐Ÿ‡ฆ๐Ÿ‡ด}{๐Ÿ‡ฆ๐Ÿ‡ถ}{๐Ÿ‡ฆ๐Ÿ‡ท}{๐Ÿ‡ฆ๐Ÿ‡ธ}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ฆ๐Ÿ‡น}{๐Ÿ‡ฆ๐Ÿ‡บ}{๐Ÿ‡ฆ๐Ÿ‡ผ}{๐Ÿ‡ฆ๐Ÿ‡ฝ}{๐Ÿ‡ฆ๐Ÿ‡ฟ}{๐Ÿ‡ง๐Ÿ‡ฆ}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ง๐Ÿ‡ง}{๐Ÿ‡ง๐Ÿ‡ฉ}{๐Ÿ‡ง๐Ÿ‡ช}{๐Ÿ‡ง๐Ÿ‡ซ}{๐Ÿ‡ง๐Ÿ‡ฌ}{๐Ÿ‡ง๐Ÿ‡ญ}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ง๐Ÿ‡ฎ}{๐Ÿ‡ง๐Ÿ‡ฏ}{๐Ÿ‡ง๐Ÿ‡ฑ}{๐Ÿ‡ง๐Ÿ‡ฒ}{๐Ÿ‡ง๐Ÿ‡ณ}{๐Ÿ‡ง๐Ÿ‡ด}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ง๐Ÿ‡ถ}{๐Ÿ‡ง๐Ÿ‡ท}{๐Ÿ‡ง๐Ÿ‡ธ}{๐Ÿ‡ง๐Ÿ‡น}{๐Ÿ‡ง๐Ÿ‡ป}{๐Ÿ‡ง๐Ÿ‡ผ}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ง๐Ÿ‡พ}{๐Ÿ‡ง๐Ÿ‡ฟ}{๐Ÿ‡จ๐Ÿ‡ฆ}{๐Ÿ‡จ๐Ÿ‡จ}{๐Ÿ‡จ๐Ÿ‡ฉ}{๐Ÿ‡จ๐Ÿ‡ซ}] ;   Flags   ;       country-flag
+[{๐Ÿ‡จ๐Ÿ‡ฌ}{๐Ÿ‡จ๐Ÿ‡ญ}{๐Ÿ‡จ๐Ÿ‡ฎ}{๐Ÿ‡จ๐Ÿ‡ฐ}{๐Ÿ‡จ๐Ÿ‡ฑ}{๐Ÿ‡จ๐Ÿ‡ฒ}] ;   Flags   ;       country-flag
+[{๐Ÿ‡จ๐Ÿ‡ณ}{๐Ÿ‡จ๐Ÿ‡ด}{๐Ÿ‡จ๐Ÿ‡ต}{๐Ÿ‡จ๐Ÿ‡ท}{๐Ÿ‡จ๐Ÿ‡บ}{๐Ÿ‡จ๐Ÿ‡ป}] ;   Flags   ;       country-flag
+[{๐Ÿ‡จ๐Ÿ‡ผ}{๐Ÿ‡จ๐Ÿ‡ฝ}{๐Ÿ‡จ๐Ÿ‡พ}{๐Ÿ‡จ๐Ÿ‡ฟ}{๐Ÿ‡ฉ๐Ÿ‡ช}{๐Ÿ‡ฉ๐Ÿ‡ฌ}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ฉ๐Ÿ‡ฏ}{๐Ÿ‡ฉ๐Ÿ‡ฐ}{๐Ÿ‡ฉ๐Ÿ‡ฒ}{๐Ÿ‡ฉ๐Ÿ‡ด}{๐Ÿ‡ฉ๐Ÿ‡ฟ}{๐Ÿ‡ช๐Ÿ‡ฆ}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ช๐Ÿ‡จ}{๐Ÿ‡ช๐Ÿ‡ช}{๐Ÿ‡ช๐Ÿ‡ฌ}{๐Ÿ‡ช๐Ÿ‡ญ}{๐Ÿ‡ช๐Ÿ‡ท}{๐Ÿ‡ช๐Ÿ‡ธ}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ช๐Ÿ‡น}{๐Ÿ‡ช๐Ÿ‡บ}{๐Ÿ‡ซ๐Ÿ‡ฎ}{๐Ÿ‡ซ๐Ÿ‡ฏ}{๐Ÿ‡ซ๐Ÿ‡ฐ}{๐Ÿ‡ซ๐Ÿ‡ฒ}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ซ๐Ÿ‡ด}{๐Ÿ‡ซ๐Ÿ‡ท}{๐Ÿ‡ฌ๐Ÿ‡ฆ}{๐Ÿ‡ฌ๐Ÿ‡ง}{๐Ÿ‡ฌ๐Ÿ‡ฉ}{๐Ÿ‡ฌ๐Ÿ‡ช}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ฌ๐Ÿ‡ซ}{๐Ÿ‡ฌ๐Ÿ‡ฌ}{๐Ÿ‡ฌ๐Ÿ‡ญ}{๐Ÿ‡ฌ๐Ÿ‡ฎ}{๐Ÿ‡ฌ๐Ÿ‡ฑ}{๐Ÿ‡ฌ๐Ÿ‡ฒ}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ฌ๐Ÿ‡ณ}{๐Ÿ‡ฌ๐Ÿ‡ต}{๐Ÿ‡ฌ๐Ÿ‡ถ}{๐Ÿ‡ฌ๐Ÿ‡ท}{๐Ÿ‡ฌ๐Ÿ‡ธ}{๐Ÿ‡ฌ๐Ÿ‡น}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ฌ๐Ÿ‡บ}{๐Ÿ‡ฌ๐Ÿ‡ผ}{๐Ÿ‡ฌ๐Ÿ‡พ}{๐Ÿ‡ญ๐Ÿ‡ฐ}{๐Ÿ‡ญ๐Ÿ‡ฒ}{๐Ÿ‡ญ๐Ÿ‡ณ}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ญ๐Ÿ‡ท}{๐Ÿ‡ญ๐Ÿ‡น}{๐Ÿ‡ญ๐Ÿ‡บ}{๐Ÿ‡ฎ๐Ÿ‡จ}{๐Ÿ‡ฎ๐Ÿ‡ฉ}{๐Ÿ‡ฎ๐Ÿ‡ช}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ฎ๐Ÿ‡ฑ}{๐Ÿ‡ฎ๐Ÿ‡ฒ}{๐Ÿ‡ฎ๐Ÿ‡ณ}{๐Ÿ‡ฎ๐Ÿ‡ด}{๐Ÿ‡ฎ๐Ÿ‡ถ}{๐Ÿ‡ฎ๐Ÿ‡ท}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ฎ๐Ÿ‡ธ}{๐Ÿ‡ฎ๐Ÿ‡น}{๐Ÿ‡ฏ๐Ÿ‡ช}{๐Ÿ‡ฏ๐Ÿ‡ฒ}{๐Ÿ‡ฏ๐Ÿ‡ด}{๐Ÿ‡ฏ๐Ÿ‡ต}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ฐ๐Ÿ‡ช}{๐Ÿ‡ฐ๐Ÿ‡ฌ}{๐Ÿ‡ฐ๐Ÿ‡ญ}{๐Ÿ‡ฐ๐Ÿ‡ฎ}{๐Ÿ‡ฐ๐Ÿ‡ฒ}{๐Ÿ‡ฐ๐Ÿ‡ณ}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ฐ๐Ÿ‡ต}{๐Ÿ‡ฐ๐Ÿ‡ท}{๐Ÿ‡ฐ๐Ÿ‡ผ}{๐Ÿ‡ฐ๐Ÿ‡พ}{๐Ÿ‡ฐ๐Ÿ‡ฟ}{๐Ÿ‡ฑ๐Ÿ‡ฆ}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ฑ๐Ÿ‡ง}{๐Ÿ‡ฑ๐Ÿ‡จ}{๐Ÿ‡ฑ๐Ÿ‡ฎ}{๐Ÿ‡ฑ๐Ÿ‡ฐ}{๐Ÿ‡ฑ๐Ÿ‡ท}{๐Ÿ‡ฑ๐Ÿ‡ธ}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ฑ๐Ÿ‡น}{๐Ÿ‡ฑ๐Ÿ‡บ}{๐Ÿ‡ฑ๐Ÿ‡ป}{๐Ÿ‡ฑ๐Ÿ‡พ}{๐Ÿ‡ฒ๐Ÿ‡ฆ}{๐Ÿ‡ฒ๐Ÿ‡จ}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ฒ๐Ÿ‡ฉ}{๐Ÿ‡ฒ๐Ÿ‡ช}{๐Ÿ‡ฒ๐Ÿ‡ซ}{๐Ÿ‡ฒ๐Ÿ‡ฌ}{๐Ÿ‡ฒ๐Ÿ‡ญ}{๐Ÿ‡ฒ๐Ÿ‡ฐ}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ฒ๐Ÿ‡ฑ}{๐Ÿ‡ฒ๐Ÿ‡ฒ}{๐Ÿ‡ฒ๐Ÿ‡ณ}{๐Ÿ‡ฒ๐Ÿ‡ด}{๐Ÿ‡ฒ๐Ÿ‡ต}{๐Ÿ‡ฒ๐Ÿ‡ถ}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ฒ๐Ÿ‡ท}{๐Ÿ‡ฒ๐Ÿ‡ธ}{๐Ÿ‡ฒ๐Ÿ‡น}{๐Ÿ‡ฒ๐Ÿ‡บ}{๐Ÿ‡ฒ๐Ÿ‡ป}{๐Ÿ‡ฒ๐Ÿ‡ผ}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ฒ๐Ÿ‡ฝ}{๐Ÿ‡ฒ๐Ÿ‡พ}{๐Ÿ‡ฒ๐Ÿ‡ฟ}{๐Ÿ‡ณ๐Ÿ‡ฆ}{๐Ÿ‡ณ๐Ÿ‡จ}{๐Ÿ‡ณ๐Ÿ‡ช}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ณ๐Ÿ‡ซ}{๐Ÿ‡ณ๐Ÿ‡ฌ}{๐Ÿ‡ณ๐Ÿ‡ฎ}{๐Ÿ‡ณ๐Ÿ‡ฑ}{๐Ÿ‡ณ๐Ÿ‡ด}{๐Ÿ‡ณ๐Ÿ‡ต}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ณ๐Ÿ‡ท}{๐Ÿ‡ณ๐Ÿ‡บ}{๐Ÿ‡ณ๐Ÿ‡ฟ}{๐Ÿ‡ด๐Ÿ‡ฒ}{๐Ÿ‡ต๐Ÿ‡ฆ}{๐Ÿ‡ต๐Ÿ‡ช}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ต๐Ÿ‡ซ}{๐Ÿ‡ต๐Ÿ‡ฌ}{๐Ÿ‡ต๐Ÿ‡ญ}{๐Ÿ‡ต๐Ÿ‡ฐ}{๐Ÿ‡ต๐Ÿ‡ฑ}{๐Ÿ‡ต๐Ÿ‡ฒ}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ต๐Ÿ‡ณ}{๐Ÿ‡ต๐Ÿ‡ท}{๐Ÿ‡ต๐Ÿ‡ธ}{๐Ÿ‡ต๐Ÿ‡น}{๐Ÿ‡ต๐Ÿ‡ผ}{๐Ÿ‡ต๐Ÿ‡พ}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ถ๐Ÿ‡ฆ}{๐Ÿ‡ท๐Ÿ‡ช}{๐Ÿ‡ท๐Ÿ‡ด}{๐Ÿ‡ท๐Ÿ‡ธ}{๐Ÿ‡ท๐Ÿ‡บ}{๐Ÿ‡ท๐Ÿ‡ผ}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ธ๐Ÿ‡ฆ}{๐Ÿ‡ธ๐Ÿ‡ง}{๐Ÿ‡ธ๐Ÿ‡จ}{๐Ÿ‡ธ๐Ÿ‡ฉ}{๐Ÿ‡ธ๐Ÿ‡ช}{๐Ÿ‡ธ๐Ÿ‡ฌ}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ธ๐Ÿ‡ญ}{๐Ÿ‡ธ๐Ÿ‡ฎ}{๐Ÿ‡ธ๐Ÿ‡ฏ}{๐Ÿ‡ธ๐Ÿ‡ฐ}{๐Ÿ‡ธ๐Ÿ‡ฑ}{๐Ÿ‡ธ๐Ÿ‡ฒ}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ธ๐Ÿ‡ณ}{๐Ÿ‡ธ๐Ÿ‡ด}{๐Ÿ‡ธ๐Ÿ‡ท}{๐Ÿ‡ธ๐Ÿ‡ธ}{๐Ÿ‡ธ๐Ÿ‡น}{๐Ÿ‡ธ๐Ÿ‡ป}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ธ๐Ÿ‡ฝ}{๐Ÿ‡ธ๐Ÿ‡พ}{๐Ÿ‡ธ๐Ÿ‡ฟ}{๐Ÿ‡น๐Ÿ‡ฆ}{๐Ÿ‡น๐Ÿ‡จ}{๐Ÿ‡น๐Ÿ‡ฉ}] ;   Flags   ;       country-flag
+[{๐Ÿ‡น๐Ÿ‡ซ}{๐Ÿ‡น๐Ÿ‡ฌ}{๐Ÿ‡น๐Ÿ‡ญ}{๐Ÿ‡น๐Ÿ‡ฏ}{๐Ÿ‡น๐Ÿ‡ฐ}{๐Ÿ‡น๐Ÿ‡ฑ}] ;   Flags   ;       country-flag
+[{๐Ÿ‡น๐Ÿ‡ฒ}{๐Ÿ‡น๐Ÿ‡ณ}{๐Ÿ‡น๐Ÿ‡ด}{๐Ÿ‡น๐Ÿ‡ท}{๐Ÿ‡น๐Ÿ‡น}{๐Ÿ‡น๐Ÿ‡ป}] ;   Flags   ;       country-flag
+[{๐Ÿ‡น๐Ÿ‡ผ}{๐Ÿ‡น๐Ÿ‡ฟ}{๐Ÿ‡บ๐Ÿ‡ฆ}{๐Ÿ‡บ๐Ÿ‡ฌ}{๐Ÿ‡บ๐Ÿ‡ฒ}{๐Ÿ‡บ๐Ÿ‡ณ}] ;   Flags   ;       country-flag
+[{๐Ÿ‡บ๐Ÿ‡ธ}{๐Ÿ‡บ๐Ÿ‡พ}{๐Ÿ‡บ๐Ÿ‡ฟ}{๐Ÿ‡ป๐Ÿ‡ฆ}{๐Ÿ‡ป๐Ÿ‡จ}{๐Ÿ‡ป๐Ÿ‡ช}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ป๐Ÿ‡ฌ}{๐Ÿ‡ป๐Ÿ‡ฎ}{๐Ÿ‡ป๐Ÿ‡ณ}{๐Ÿ‡ป๐Ÿ‡บ}{๐Ÿ‡ผ๐Ÿ‡ซ}{๐Ÿ‡ผ๐Ÿ‡ธ}] ;   Flags   ;       country-flag
+[{๐Ÿ‡ฝ๐Ÿ‡ฐ}{๐Ÿ‡พ๐Ÿ‡ช}{๐Ÿ‡พ๐Ÿ‡น}{๐Ÿ‡ฟ๐Ÿ‡ฆ}{๐Ÿ‡ฟ๐Ÿ‡ฒ}{๐Ÿ‡ฟ๐Ÿ‡ผ}] ;   Flags   ;       country-flag
+[{๐Ÿด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ}{๐Ÿด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ}{๐Ÿด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ}] ;        Flags   ;       subdivision-flag
diff --git a/lisp/play/emoji.el b/lisp/play/emoji.el
new file mode 100644
index 0000000..fdde7fc
--- /dev/null
+++ b/lisp/play/emoji.el
@@ -0,0 +1,191 @@
+;;; emoji.el --- Inserting emojis  -*- lexical-binding:t -*-
+
+;; Copyright (C) 2021 Free Software Foundation, Inc.
+
+;; Author: Lars Ingebrigtsen <larsi@gnus.org>
+;; Keywords: fun
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;; Code:
+
+(eval-when-compile (require 'cl-lib))
+
+(defvar emoji--labels nil)
+
+(defun emoji--parse-labels ()
+  (setq emoji--labels nil)
+  (with-temp-buffer
+    (insert-file-contents (expand-file-name "../admin/unidata/labels.txt"
+                                            data-directory))
+    ;; The format is "[...] ; Main ; sub".
+    (while (re-search-forward "^\\[\\([^]]+\\)\\][ \t]*;[ \t]*\\(.*?\\)[ 
\t]*;[ \t]*\\(.*\\)$" nil t)
+      (let ((ranges (match-string 1))
+            (main (match-string 2))
+            (sub (match-string 3)))
+        (emoji--add-characters
+         (cl-loop with range-start
+                  and set
+                  for char across ranges
+                  ;; a-z
+                  if (eql char ?-)
+                  do (setq range-start (1+ prev))
+                  else if (and set (eql char ?}))
+                  collect (prog1
+                              (apply #'string (cdr (nreverse set)))
+                            (setq set nil))
+                  ;; {set}
+                  else if (or (eql char ?{) set)
+                  do (push char set)
+                  else
+                  append (if range-start
+                             (prog1
+                                 (mapcar #'string
+                                         (number-sequence range-start char))
+                               (setq range-start nil))
+                           (list (string char)))
+                  do (setq prev char))
+         main sub)))))
+
+(defun emoji--add-characters (chars main sub)
+  (let ((subs (if (member sub '( "cat-face" "monkey-face" "skin-tone"
+                                 "country-flag" "subdivision-flag"
+                                 "award-medal" "musical-instrument"
+                                 "book-paper" "other-object"
+                                 "transport-sign" "av-symbol"
+                                 "other-symbol"))
+                  (list sub)
+                (split-string sub "-")))
+        parent elem)
+    ;; This category is way too big; split it up.
+    (when (equal main "Smileys & People")
+      (setq main
+            (if (member (car subs) '("face" "cat-face" "monkey-face"))
+                "Smileys"
+              (capitalize (car subs))))
+      (when (and (equal (car subs) "person")
+                 (= (length subs) 1))
+        (setq subs (list "person" "single")))
+      (when (equal (car subs) "person")
+        (pop subs))
+      (when (and (= (length subs) 1)
+                 (not (string-search "-" (car subs))))
+        (setq subs nil)))
+    ;; Useless category.
+    (unless (member main '("Skin-Tone"))
+      (unless (setq parent (assoc main emoji--labels))
+        (setq emoji--labels (append emoji--labels
+                                    (list (setq parent (list main))))))
+      (setq elem parent)
+      (while subs
+        (unless (setq elem (assoc (car subs) parent))
+          (nconc parent (list (setq elem (list (car subs))))))
+        (pop subs)
+        (setq parent elem))
+      (nconc elem chars))))
+
+(defun emoji--define-transient (&optional alist)
+  (unless alist
+    (setq alist (cons "Emoji" emoji--labels)))
+  (let* ((mname (pop alist))
+         (name (intern (format "emoji-command-%s" mname)))
+         (layout
+          (if (consp (cadr alist))
+              ;; Define sub-maps.
+              (cl-loop for entry in (emoji--compute-prefix alist)
+                       collect (list
+                                (car entry)
+                                (emoji--compute-name (cdr entry))
+                                (emoji--define-transient
+                                 (cons (concat mname " " (cadr entry))
+                                       (cddr entry)))))
+            ;; Insert an emoji.
+            (cl-loop for char in alist
+                     for i from ?a
+                     collect (let ((this-char char))
+                               (list (string i)
+                                     char
+                                     (lambda ()
+                                       (interactive)
+                                       (insert this-char)))))))
+         (half (/ (length layout) 2))
+         args)
+    (unless (zerop (mod (length layout) 2))
+      (setq half (1+ half)))
+    (if (nthcdr half layout)
+        (setq args (vector mname
+                           (apply #'vector
+                                  (seq-take layout half))
+                           (apply #'vector
+                                  (nthcdr half layout))))
+      (setq args (vector mname (apply #'vector layout))))
+    ;; There's probably a better way to do this...
+    (setf (symbol-function name)
+          (lambda ()
+            (interactive)
+            (transient-setup name)))
+    (pcase-let ((`(,class ,slots ,suffixes ,docstr ,_body)
+                 (transient--expand-define-args (list args))))
+       (put name 'interactive-only t)
+       (put name 'function-documentation docstr)
+       (put name 'transient--prefix
+            (apply (or class 'transient-prefix) :command name
+                   slots))
+       (put name 'transient--layout
+            (cl-mapcan (lambda (s) (transient--parse-child name s))
+                       suffixes)))
+    name))
+
+(defun emoji--compute-prefix (alist)
+  "Compute characters to use for entries in ALIST.
+We prefer the earliest unique letter."
+  (cl-loop with taken = (make-hash-table)
+           for entry in alist
+           for name = (car entry)
+           collect (cons (cl-loop for char across name
+                                  while (gethash char taken)
+                                  finally (progn
+                                            (setf (gethash char taken) t)
+                                            (cl-return (string char))))
+                         entry)))
+
+(defun emoji--compute-name (entry)
+  "Add example emojis to the name."
+  (let ((name (concat (car entry) " "))
+        (children (emoji--flatten entry)))
+    (cl-loop for i from 0 upto 20
+             while (< (length name) 10)
+             do (cl-loop for child in children
+                         for char = (elt child i)
+                         while (< (length name) 10)
+                         when char
+                         do (setq name (concat name char))))
+    (if (= (length name) 20)
+        (concat name "โ€ฆ")
+      name)))
+
+(defun emoji--flatten (alist)
+  (pop alist)
+  (if (consp (cadr alist))
+      (cl-loop for child in alist
+               append (emoji--flatten child))
+    (list alist)))
+
+(provide 'emoji)
+
+;;; emoji.el ends here



reply via email to

[Prev in Thread] Current Thread [Next in Thread]