summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--resources/emoji-test.txt125
-rwxr-xr-xscripts/emoji_codegen.py5
-rw-r--r--src/emoji/Provider.cpp282
-rw-r--r--src/emoji/Provider.h2
4 files changed, 234 insertions, 180 deletions
diff --git a/resources/emoji-test.txt b/resources/emoji-test.txt
index dd549336..87d093d6 100644
--- a/resources/emoji-test.txt
+++ b/resources/emoji-test.txt
@@ -1,13 +1,13 @@
 # emoji-test.txt
-# Date: 2021-08-26, 17:22:23 GMT
-# ยฉ 2021 Unicodeยฎ, Inc.
+# Date: 2022-08-12, 20:24:39 GMT
+# ยฉ 2022 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
+# For terms of use, see https://www.unicode.org/terms_of_use.html
 #
 # Emoji Keyboard/Display Test Data for UTS #51
-# Version: 14.0
+# Version: 15.0
 #
-# For documentation and usage, see http://www.unicode.org/reports/tr51
+# For documentation and usage, see https://www.unicode.org/reports/tr51
 #
 # This file provides data for testing which emoji forms should be in keyboards and which should also be displayed/processed.
 # Format: code points; status # emoji name
@@ -92,6 +92,7 @@
 1F62C                                                  ; fully-qualified     # ๐Ÿ˜ฌ E1.0 grimacing face
 1F62E 200D 1F4A8                                       ; fully-qualified     # ๐Ÿ˜ฎโ€๐Ÿ’จ E13.1 face exhaling
 1F925                                                  ; fully-qualified     # ๐Ÿคฅ E3.0 lying face
+1FAE8                                                  ; fully-qualified     # ๐Ÿซจ E15.0 shaking face
 
 # subgroup: face-sleepy
 1F60C                                                  ; fully-qualified     # ๐Ÿ˜Œ E0.6 relieved face
@@ -155,7 +156,7 @@
 
 # subgroup: face-negative
 1F624                                                  ; fully-qualified     # ๐Ÿ˜ค E0.6 face with steam from nose
-1F621                                                  ; fully-qualified     # ๐Ÿ˜ก E0.6 pouting face
+1F621                                                  ; fully-qualified     # ๐Ÿ˜ก E0.6 enraged face
 1F620                                                  ; fully-qualified     # ๐Ÿ˜  E0.6 angry face
 1F92C                                                  ; fully-qualified     # ๐Ÿคฌ E5.0 face with symbols on mouth
 1F608                                                  ; fully-qualified     # ๐Ÿ˜ˆ E1.0 smiling face with horns
@@ -190,8 +191,7 @@
 1F649                                                  ; fully-qualified     # ๐Ÿ™‰ E0.6 hear-no-evil monkey
 1F64A                                                  ; fully-qualified     # ๐Ÿ™Š E0.6 speak-no-evil monkey
 
-# subgroup: emotion
-1F48B                                                  ; fully-qualified     # ๐Ÿ’‹ E0.6 kiss mark
+# subgroup: heart
 1F48C                                                  ; fully-qualified     # ๐Ÿ’Œ E0.6 love letter
 1F498                                                  ; fully-qualified     # ๐Ÿ’˜ E0.6 heart with arrow
 1F49D                                                  ; fully-qualified     # ๐Ÿ’ E0.6 heart with ribbon
@@ -210,14 +210,20 @@
 2764 200D 1FA79                                        ; unqualified         # โคโ€๐Ÿฉน E13.1 mending heart
 2764 FE0F                                              ; fully-qualified     # โค๏ธ E0.6 red heart
 2764                                                   ; unqualified         # โค E0.6 red heart
+1FA77                                                  ; fully-qualified     # ๐Ÿฉท E15.0 pink heart
 1F9E1                                                  ; fully-qualified     # ๐Ÿงก E5.0 orange heart
 1F49B                                                  ; fully-qualified     # ๐Ÿ’› E0.6 yellow heart
 1F49A                                                  ; fully-qualified     # ๐Ÿ’š E0.6 green heart
 1F499                                                  ; fully-qualified     # ๐Ÿ’™ E0.6 blue heart
+1FA75                                                  ; fully-qualified     # ๐Ÿฉต E15.0 light blue heart
 1F49C                                                  ; fully-qualified     # ๐Ÿ’œ E0.6 purple heart
 1F90E                                                  ; fully-qualified     # ๐ŸคŽ E12.0 brown heart
 1F5A4                                                  ; fully-qualified     # ๐Ÿ–ค E3.0 black heart
+1FA76                                                  ; fully-qualified     # ๐Ÿฉถ E15.0 grey heart
 1F90D                                                  ; fully-qualified     # ๐Ÿค E12.0 white heart
+
+# subgroup: emotion
+1F48B                                                  ; fully-qualified     # ๐Ÿ’‹ E0.6 kiss mark
 1F4AF                                                  ; fully-qualified     # ๐Ÿ’ฏ E0.6 hundred points
 1F4A2                                                  ; fully-qualified     # ๐Ÿ’ข E0.6 anger symbol
 1F4A5                                                  ; fully-qualified     # ๐Ÿ’ฅ E0.6 collision
@@ -226,21 +232,20 @@
 1F4A8                                                  ; fully-qualified     # ๐Ÿ’จ E0.6 dashing away
 1F573 FE0F                                             ; fully-qualified     # ๐Ÿ•ณ๏ธ E0.7 hole
 1F573                                                  ; unqualified         # ๐Ÿ•ณ E0.7 hole
-1F4A3                                                  ; fully-qualified     # ๐Ÿ’ฃ E0.6 bomb
 1F4AC                                                  ; fully-qualified     # ๐Ÿ’ฌ E0.6 speech balloon
 1F441 FE0F 200D 1F5E8 FE0F                             ; fully-qualified     # ๐Ÿ‘๏ธโ€๐Ÿ—จ๏ธ E2.0 eye in speech bubble
 1F441 200D 1F5E8 FE0F                                  ; unqualified         # ๐Ÿ‘โ€๐Ÿ—จ๏ธ E2.0 eye in speech bubble
-1F441 FE0F 200D 1F5E8                                  ; unqualified         # ๐Ÿ‘๏ธโ€๐Ÿ—จ E2.0 eye in speech bubble
+1F441 FE0F 200D 1F5E8                                  ; minimally-qualified # ๐Ÿ‘๏ธโ€๐Ÿ—จ E2.0 eye in speech bubble
 1F441 200D 1F5E8                                       ; unqualified         # ๐Ÿ‘โ€๐Ÿ—จ E2.0 eye in speech bubble
 1F5E8 FE0F                                             ; fully-qualified     # ๐Ÿ—จ๏ธ E2.0 left speech bubble
 1F5E8                                                  ; unqualified         # ๐Ÿ—จ E2.0 left speech bubble
 1F5EF FE0F                                             ; fully-qualified     # ๐Ÿ—ฏ๏ธ E0.7 right anger bubble
 1F5EF                                                  ; unqualified         # ๐Ÿ—ฏ E0.7 right anger bubble
 1F4AD                                                  ; fully-qualified     # ๐Ÿ’ญ E1.0 thought balloon
-1F4A4                                                  ; fully-qualified     # ๐Ÿ’ค E0.6 zzz
+1F4A4                                                  ; fully-qualified     # ๐Ÿ’ค E0.6 ZZZ
 
-# Smileys & Emotion subtotal:		177
-# Smileys & Emotion subtotal:		177	w/o modifiers
+# Smileys & Emotion subtotal:		180
+# Smileys & Emotion subtotal:		180	w/o modifiers
 
 # group: People & Body
 
@@ -300,6 +305,18 @@
 1FAF4 1F3FD                                            ; fully-qualified     # ๐Ÿซด๐Ÿฝ E14.0 palm up hand: medium skin tone
 1FAF4 1F3FE                                            ; fully-qualified     # ๐Ÿซด๐Ÿพ E14.0 palm up hand: medium-dark skin tone
 1FAF4 1F3FF                                            ; fully-qualified     # ๐Ÿซด๐Ÿฟ E14.0 palm up hand: dark skin tone
+1FAF7                                                  ; fully-qualified     # ๐Ÿซท E15.0 leftwards pushing hand
+1FAF7 1F3FB                                            ; fully-qualified     # ๐Ÿซท๐Ÿป E15.0 leftwards pushing hand: light skin tone
+1FAF7 1F3FC                                            ; fully-qualified     # ๐Ÿซท๐Ÿผ E15.0 leftwards pushing hand: medium-light skin tone
+1FAF7 1F3FD                                            ; fully-qualified     # ๐Ÿซท๐Ÿฝ E15.0 leftwards pushing hand: medium skin tone
+1FAF7 1F3FE                                            ; fully-qualified     # ๐Ÿซท๐Ÿพ E15.0 leftwards pushing hand: medium-dark skin tone
+1FAF7 1F3FF                                            ; fully-qualified     # ๐Ÿซท๐Ÿฟ E15.0 leftwards pushing hand: dark skin tone
+1FAF8                                                  ; fully-qualified     # ๐Ÿซธ E15.0 rightwards pushing hand
+1FAF8 1F3FB                                            ; fully-qualified     # ๐Ÿซธ๐Ÿป E15.0 rightwards pushing hand: light skin tone
+1FAF8 1F3FC                                            ; fully-qualified     # ๐Ÿซธ๐Ÿผ E15.0 rightwards pushing hand: medium-light skin tone
+1FAF8 1F3FD                                            ; fully-qualified     # ๐Ÿซธ๐Ÿฝ E15.0 rightwards pushing hand: medium skin tone
+1FAF8 1F3FE                                            ; fully-qualified     # ๐Ÿซธ๐Ÿพ E15.0 rightwards pushing hand: medium-dark skin tone
+1FAF8 1F3FF                                            ; fully-qualified     # ๐Ÿซธ๐Ÿฟ E15.0 rightwards pushing hand: dark skin tone
 
 # subgroup: hand-fingers-partial
 1F44C                                                  ; fully-qualified     # ๐Ÿ‘Œ E0.6 OK hand
@@ -473,11 +490,11 @@
 1F932 1F3FE                                            ; fully-qualified     # ๐Ÿคฒ๐Ÿพ E5.0 palms up together: medium-dark skin tone
 1F932 1F3FF                                            ; fully-qualified     # ๐Ÿคฒ๐Ÿฟ E5.0 palms up together: dark skin tone
 1F91D                                                  ; fully-qualified     # ๐Ÿค E3.0 handshake
-1F91D 1F3FB                                            ; fully-qualified     # ๐Ÿค๐Ÿป E3.0 handshake: light skin tone
-1F91D 1F3FC                                            ; fully-qualified     # ๐Ÿค๐Ÿผ E3.0 handshake: medium-light skin tone
-1F91D 1F3FD                                            ; fully-qualified     # ๐Ÿค๐Ÿฝ E3.0 handshake: medium skin tone
-1F91D 1F3FE                                            ; fully-qualified     # ๐Ÿค๐Ÿพ E3.0 handshake: medium-dark skin tone
-1F91D 1F3FF                                            ; fully-qualified     # ๐Ÿค๐Ÿฟ E3.0 handshake: dark skin tone
+1F91D 1F3FB                                            ; fully-qualified     # ๐Ÿค๐Ÿป E14.0 handshake: light skin tone
+1F91D 1F3FC                                            ; fully-qualified     # ๐Ÿค๐Ÿผ E14.0 handshake: medium-light skin tone
+1F91D 1F3FD                                            ; fully-qualified     # ๐Ÿค๐Ÿฝ E14.0 handshake: medium skin tone
+1F91D 1F3FE                                            ; fully-qualified     # ๐Ÿค๐Ÿพ E14.0 handshake: medium-dark skin tone
+1F91D 1F3FF                                            ; fully-qualified     # ๐Ÿค๐Ÿฟ E14.0 handshake: dark skin tone
 1FAF1 1F3FB 200D 1FAF2 1F3FC                           ; fully-qualified     # ๐Ÿซฑ๐Ÿปโ€๐Ÿซฒ๐Ÿผ E14.0 handshake: light skin tone, medium-light skin tone
 1FAF1 1F3FB 200D 1FAF2 1F3FD                           ; fully-qualified     # ๐Ÿซฑ๐Ÿปโ€๐Ÿซฒ๐Ÿฝ E14.0 handshake: light skin tone, medium skin tone
 1FAF1 1F3FB 200D 1FAF2 1F3FE                           ; fully-qualified     # ๐Ÿซฑ๐Ÿปโ€๐Ÿซฒ๐Ÿพ E14.0 handshake: light skin tone, medium-dark skin tone
@@ -1455,7 +1472,7 @@
 1F575 1F3FF                                            ; fully-qualified     # ๐Ÿ•ต๐Ÿฟ E2.0 detective: dark skin tone
 1F575 FE0F 200D 2642 FE0F                              ; fully-qualified     # ๐Ÿ•ต๏ธโ€โ™‚๏ธ E4.0 man detective
 1F575 200D 2642 FE0F                                   ; unqualified         # ๐Ÿ•ตโ€โ™‚๏ธ E4.0 man detective
-1F575 FE0F 200D 2642                                   ; unqualified         # ๐Ÿ•ต๏ธโ€โ™‚ E4.0 man detective
+1F575 FE0F 200D 2642                                   ; minimally-qualified # ๐Ÿ•ต๏ธโ€โ™‚ E4.0 man detective
 1F575 200D 2642                                        ; unqualified         # ๐Ÿ•ตโ€โ™‚ E4.0 man detective
 1F575 1F3FB 200D 2642 FE0F                             ; fully-qualified     # ๐Ÿ•ต๐Ÿปโ€โ™‚๏ธ E4.0 man detective: light skin tone
 1F575 1F3FB 200D 2642                                  ; minimally-qualified # ๐Ÿ•ต๐Ÿปโ€โ™‚ E4.0 man detective: light skin tone
@@ -1469,7 +1486,7 @@
 1F575 1F3FF 200D 2642                                  ; minimally-qualified # ๐Ÿ•ต๐Ÿฟโ€โ™‚ E4.0 man detective: dark skin tone
 1F575 FE0F 200D 2640 FE0F                              ; fully-qualified     # ๐Ÿ•ต๏ธโ€โ™€๏ธ E4.0 woman detective
 1F575 200D 2640 FE0F                                   ; unqualified         # ๐Ÿ•ตโ€โ™€๏ธ E4.0 woman detective
-1F575 FE0F 200D 2640                                   ; unqualified         # ๐Ÿ•ต๏ธโ€โ™€ E4.0 woman detective
+1F575 FE0F 200D 2640                                   ; minimally-qualified # ๐Ÿ•ต๏ธโ€โ™€ E4.0 woman detective
 1F575 200D 2640                                        ; unqualified         # ๐Ÿ•ตโ€โ™€ E4.0 woman detective
 1F575 1F3FB 200D 2640 FE0F                             ; fully-qualified     # ๐Ÿ•ต๐Ÿปโ€โ™€๏ธ E4.0 woman detective: light skin tone
 1F575 1F3FB 200D 2640                                  ; minimally-qualified # ๐Ÿ•ต๐Ÿปโ€โ™€ E4.0 woman detective: light skin tone
@@ -2302,7 +2319,7 @@
 1F3CC 1F3FF                                            ; fully-qualified     # ๐ŸŒ๐Ÿฟ E4.0 person golfing: dark skin tone
 1F3CC FE0F 200D 2642 FE0F                              ; fully-qualified     # ๐ŸŒ๏ธโ€โ™‚๏ธ E4.0 man golfing
 1F3CC 200D 2642 FE0F                                   ; unqualified         # ๐ŸŒโ€โ™‚๏ธ E4.0 man golfing
-1F3CC FE0F 200D 2642                                   ; unqualified         # ๐ŸŒ๏ธโ€โ™‚ E4.0 man golfing
+1F3CC FE0F 200D 2642                                   ; minimally-qualified # ๐ŸŒ๏ธโ€โ™‚ E4.0 man golfing
 1F3CC 200D 2642                                        ; unqualified         # ๐ŸŒโ€โ™‚ E4.0 man golfing
 1F3CC 1F3FB 200D 2642 FE0F                             ; fully-qualified     # ๐ŸŒ๐Ÿปโ€โ™‚๏ธ E4.0 man golfing: light skin tone
 1F3CC 1F3FB 200D 2642                                  ; minimally-qualified # ๐ŸŒ๐Ÿปโ€โ™‚ E4.0 man golfing: light skin tone
@@ -2316,7 +2333,7 @@
 1F3CC 1F3FF 200D 2642                                  ; minimally-qualified # ๐ŸŒ๐Ÿฟโ€โ™‚ E4.0 man golfing: dark skin tone
 1F3CC FE0F 200D 2640 FE0F                              ; fully-qualified     # ๐ŸŒ๏ธโ€โ™€๏ธ E4.0 woman golfing
 1F3CC 200D 2640 FE0F                                   ; unqualified         # ๐ŸŒโ€โ™€๏ธ E4.0 woman golfing
-1F3CC FE0F 200D 2640                                   ; unqualified         # ๐ŸŒ๏ธโ€โ™€ E4.0 woman golfing
+1F3CC FE0F 200D 2640                                   ; minimally-qualified # ๐ŸŒ๏ธโ€โ™€ E4.0 woman golfing
 1F3CC 200D 2640                                        ; unqualified         # ๐ŸŒโ€โ™€ E4.0 woman golfing
 1F3CC 1F3FB 200D 2640 FE0F                             ; fully-qualified     # ๐ŸŒ๐Ÿปโ€โ™€๏ธ E4.0 woman golfing: light skin tone
 1F3CC 1F3FB 200D 2640                                  ; minimally-qualified # ๐ŸŒ๐Ÿปโ€โ™€ E4.0 woman golfing: light skin tone
@@ -2427,7 +2444,7 @@
 26F9 1F3FF                                             ; fully-qualified     # โ›น๐Ÿฟ E2.0 person bouncing ball: dark skin tone
 26F9 FE0F 200D 2642 FE0F                               ; fully-qualified     # โ›น๏ธโ€โ™‚๏ธ E4.0 man bouncing ball
 26F9 200D 2642 FE0F                                    ; unqualified         # โ›นโ€โ™‚๏ธ E4.0 man bouncing ball
-26F9 FE0F 200D 2642                                    ; unqualified         # โ›น๏ธโ€โ™‚ E4.0 man bouncing ball
+26F9 FE0F 200D 2642                                    ; minimally-qualified # โ›น๏ธโ€โ™‚ E4.0 man bouncing ball
 26F9 200D 2642                                         ; unqualified         # โ›นโ€โ™‚ E4.0 man bouncing ball
 26F9 1F3FB 200D 2642 FE0F                              ; fully-qualified     # โ›น๐Ÿปโ€โ™‚๏ธ E4.0 man bouncing ball: light skin tone
 26F9 1F3FB 200D 2642                                   ; minimally-qualified # โ›น๐Ÿปโ€โ™‚ E4.0 man bouncing ball: light skin tone
@@ -2441,7 +2458,7 @@
 26F9 1F3FF 200D 2642                                   ; minimally-qualified # โ›น๐Ÿฟโ€โ™‚ E4.0 man bouncing ball: dark skin tone
 26F9 FE0F 200D 2640 FE0F                               ; fully-qualified     # โ›น๏ธโ€โ™€๏ธ E4.0 woman bouncing ball
 26F9 200D 2640 FE0F                                    ; unqualified         # โ›นโ€โ™€๏ธ E4.0 woman bouncing ball
-26F9 FE0F 200D 2640                                    ; unqualified         # โ›น๏ธโ€โ™€ E4.0 woman bouncing ball
+26F9 FE0F 200D 2640                                    ; minimally-qualified # โ›น๏ธโ€โ™€ E4.0 woman bouncing ball
 26F9 200D 2640                                         ; unqualified         # โ›นโ€โ™€ E4.0 woman bouncing ball
 26F9 1F3FB 200D 2640 FE0F                              ; fully-qualified     # โ›น๐Ÿปโ€โ™€๏ธ E4.0 woman bouncing ball: light skin tone
 26F9 1F3FB 200D 2640                                   ; minimally-qualified # โ›น๐Ÿปโ€โ™€ E4.0 woman bouncing ball: light skin tone
@@ -2462,7 +2479,7 @@
 1F3CB 1F3FF                                            ; fully-qualified     # ๐Ÿ‹๐Ÿฟ E2.0 person lifting weights: dark skin tone
 1F3CB FE0F 200D 2642 FE0F                              ; fully-qualified     # ๐Ÿ‹๏ธโ€โ™‚๏ธ E4.0 man lifting weights
 1F3CB 200D 2642 FE0F                                   ; unqualified         # ๐Ÿ‹โ€โ™‚๏ธ E4.0 man lifting weights
-1F3CB FE0F 200D 2642                                   ; unqualified         # ๐Ÿ‹๏ธโ€โ™‚ E4.0 man lifting weights
+1F3CB FE0F 200D 2642                                   ; minimally-qualified # ๐Ÿ‹๏ธโ€โ™‚ E4.0 man lifting weights
 1F3CB 200D 2642                                        ; unqualified         # ๐Ÿ‹โ€โ™‚ E4.0 man lifting weights
 1F3CB 1F3FB 200D 2642 FE0F                             ; fully-qualified     # ๐Ÿ‹๐Ÿปโ€โ™‚๏ธ E4.0 man lifting weights: light skin tone
 1F3CB 1F3FB 200D 2642                                  ; minimally-qualified # ๐Ÿ‹๐Ÿปโ€โ™‚ E4.0 man lifting weights: light skin tone
@@ -2476,7 +2493,7 @@
 1F3CB 1F3FF 200D 2642                                  ; minimally-qualified # ๐Ÿ‹๐Ÿฟโ€โ™‚ E4.0 man lifting weights: dark skin tone
 1F3CB FE0F 200D 2640 FE0F                              ; fully-qualified     # ๐Ÿ‹๏ธโ€โ™€๏ธ E4.0 woman lifting weights
 1F3CB 200D 2640 FE0F                                   ; unqualified         # ๐Ÿ‹โ€โ™€๏ธ E4.0 woman lifting weights
-1F3CB FE0F 200D 2640                                   ; unqualified         # ๐Ÿ‹๏ธโ€โ™€ E4.0 woman lifting weights
+1F3CB FE0F 200D 2640                                   ; minimally-qualified # ๐Ÿ‹๏ธโ€โ™€ E4.0 woman lifting weights
 1F3CB 200D 2640                                        ; unqualified         # ๐Ÿ‹โ€โ™€ E4.0 woman lifting weights
 1F3CB 1F3FB 200D 2640 FE0F                             ; fully-qualified     # ๐Ÿ‹๐Ÿปโ€โ™€๏ธ E4.0 woman lifting weights: light skin tone
 1F3CB 1F3FB 200D 2640                                  ; minimally-qualified # ๐Ÿ‹๐Ÿปโ€โ™€ E4.0 woman lifting weights: light skin tone
@@ -3262,8 +3279,8 @@
 1FAC2                                                  ; fully-qualified     # ๐Ÿซ‚ E13.0 people hugging
 1F463                                                  ; fully-qualified     # ๐Ÿ‘ฃ E0.6 footprints
 
-# People & Body subtotal:		2986
-# People & Body subtotal:		506	w/o modifiers
+# People & Body subtotal:		2998
+# People & Body subtotal:		508	w/o modifiers
 
 # group: Component
 
@@ -3306,6 +3323,8 @@
 1F405                                                  ; fully-qualified     # ๐Ÿ… E1.0 tiger
 1F406                                                  ; fully-qualified     # ๐Ÿ† E1.0 leopard
 1F434                                                  ; fully-qualified     # ๐Ÿด E0.6 horse face
+1FACE                                                  ; fully-qualified     # ๐ŸซŽ E15.0 moose
+1FACF                                                  ; fully-qualified     # ๐Ÿซ E15.0 donkey
 1F40E                                                  ; fully-qualified     # ๐ŸŽ E0.6 horse
 1F984                                                  ; fully-qualified     # ๐Ÿฆ„ E1.0 unicorn
 1F993                                                  ; fully-qualified     # ๐Ÿฆ“ E5.0 zebra
@@ -3373,6 +3392,9 @@
 1F9A9                                                  ; fully-qualified     # ๐Ÿฆฉ E12.0 flamingo
 1F99A                                                  ; fully-qualified     # ๐Ÿฆš E11.0 peacock
 1F99C                                                  ; fully-qualified     # ๐Ÿฆœ E11.0 parrot
+1FABD                                                  ; fully-qualified     # ๐Ÿชฝ E15.0 wing
+1F426 200D 2B1B                                        ; fully-qualified     # ๐Ÿฆโ€โฌ› E15.0 black bird
+1FABF                                                  ; fully-qualified     # ๐Ÿชฟ E15.0 goose
 
 # subgroup: animal-amphibian
 1F438                                                  ; fully-qualified     # ๐Ÿธ E0.6 frog
@@ -3399,6 +3421,7 @@
 1F419                                                  ; fully-qualified     # ๐Ÿ™ E0.6 octopus
 1F41A                                                  ; fully-qualified     # ๐Ÿš E0.6 spiral shell
 1FAB8                                                  ; fully-qualified     # ๐Ÿชธ E14.0 coral
+1FABC                                                  ; fully-qualified     # ๐Ÿชผ E15.0 jellyfish
 
 # subgroup: animal-bug
 1F40C                                                  ; fully-qualified     # ๐ŸŒ E0.6 snail
@@ -3433,6 +3456,7 @@
 1F33B                                                  ; fully-qualified     # ๐ŸŒป E0.6 sunflower
 1F33C                                                  ; fully-qualified     # ๐ŸŒผ E0.6 blossom
 1F337                                                  ; fully-qualified     # ๐ŸŒท E0.6 tulip
+1FABB                                                  ; fully-qualified     # ๐Ÿชป E15.0 hyacinth
 
 # subgroup: plant-other
 1F331                                                  ; fully-qualified     # ๐ŸŒฑ E0.6 seedling
@@ -3451,9 +3475,10 @@
 1F343                                                  ; fully-qualified     # ๐Ÿƒ E0.6 leaf fluttering in wind
 1FAB9                                                  ; fully-qualified     # ๐Ÿชน E14.0 empty nest
 1FABA                                                  ; fully-qualified     # ๐Ÿชบ E14.0 nest with eggs
+1F344                                                  ; fully-qualified     # ๐Ÿ„ E0.6 mushroom
 
-# Animals & Nature subtotal:		151
-# Animals & Nature subtotal:		151	w/o modifiers
+# Animals & Nature subtotal:		159
+# Animals & Nature subtotal:		159	w/o modifiers
 
 # group: Food & Drink
 
@@ -3492,10 +3517,11 @@
 1F966                                                  ; fully-qualified     # ๐Ÿฅฆ E5.0 broccoli
 1F9C4                                                  ; fully-qualified     # ๐Ÿง„ E12.0 garlic
 1F9C5                                                  ; fully-qualified     # ๐Ÿง… E12.0 onion
-1F344                                                  ; fully-qualified     # ๐Ÿ„ E0.6 mushroom
 1F95C                                                  ; fully-qualified     # ๐Ÿฅœ E3.0 peanuts
 1FAD8                                                  ; fully-qualified     # ๐Ÿซ˜ E14.0 beans
 1F330                                                  ; fully-qualified     # ๐ŸŒฐ E0.6 chestnut
+1FADA                                                  ; fully-qualified     # ๐Ÿซš E15.0 ginger root
+1FADB                                                  ; fully-qualified     # ๐Ÿซ› E15.0 pea pod
 
 # subgroup: food-prepared
 1F35E                                                  ; fully-qualified     # ๐Ÿž E0.6 bread
@@ -3607,8 +3633,8 @@
 1FAD9                                                  ; fully-qualified     # ๐Ÿซ™ E14.0 jar
 1F3FA                                                  ; fully-qualified     # ๐Ÿบ E1.0 amphora
 
-# Food & Drink subtotal:		134
-# Food & Drink subtotal:		134	w/o modifiers
+# Food & Drink subtotal:		135
+# Food & Drink subtotal:		135	w/o modifiers
 
 # group: Travel & Places
 
@@ -3974,11 +4000,10 @@
 1F3AF                                                  ; fully-qualified     # ๐ŸŽฏ E0.6 bullseye
 1FA80                                                  ; fully-qualified     # ๐Ÿช€ E12.0 yo-yo
 1FA81                                                  ; fully-qualified     # ๐Ÿช E12.0 kite
+1F52B                                                  ; fully-qualified     # ๐Ÿ”ซ E0.6 water pistol
 1F3B1                                                  ; fully-qualified     # ๐ŸŽฑ E0.6 pool 8 ball
 1F52E                                                  ; fully-qualified     # ๐Ÿ”ฎ E0.6 crystal ball
 1FA84                                                  ; fully-qualified     # ๐Ÿช„ E13.0 magic wand
-1F9FF                                                  ; fully-qualified     # ๐Ÿงฟ E11.0 nazar amulet
-1FAAC                                                  ; fully-qualified     # ๐Ÿชฌ E14.0 hamsa
 1F3AE                                                  ; fully-qualified     # ๐ŸŽฎ E0.6 video game
 1F579 FE0F                                             ; fully-qualified     # ๐Ÿ•น๏ธ E0.7 joystick
 1F579                                                  ; unqualified         # ๐Ÿ•น E0.7 joystick
@@ -4013,8 +4038,8 @@
 1F9F6                                                  ; fully-qualified     # ๐Ÿงถ E11.0 yarn
 1FAA2                                                  ; fully-qualified     # ๐Ÿชข E13.0 knot
 
-# Activities subtotal:		97
-# Activities subtotal:		97	w/o modifiers
+# Activities subtotal:		96
+# Activities subtotal:		96	w/o modifiers
 
 # group: Objects
 
@@ -4040,6 +4065,7 @@
 1FA73                                                  ; fully-qualified     # ๐Ÿฉณ E12.0 shorts
 1F459                                                  ; fully-qualified     # ๐Ÿ‘™ E0.6 bikini
 1F45A                                                  ; fully-qualified     # ๐Ÿ‘š E0.6 womanโ€™s clothes
+1FAAD                                                  ; fully-qualified     # ๐Ÿชญ E15.0 folding hand fan
 1F45B                                                  ; fully-qualified     # ๐Ÿ‘› E0.6 purse
 1F45C                                                  ; fully-qualified     # ๐Ÿ‘œ E0.6 handbag
 1F45D                                                  ; fully-qualified     # ๐Ÿ‘ E0.6 clutch bag
@@ -4055,6 +4081,7 @@
 1F461                                                  ; fully-qualified     # ๐Ÿ‘ก E0.6 womanโ€™s sandal
 1FA70                                                  ; fully-qualified     # ๐Ÿฉฐ E12.0 ballet shoes
 1F462                                                  ; fully-qualified     # ๐Ÿ‘ข E0.6 womanโ€™s boot
+1FAAE                                                  ; fully-qualified     # ๐Ÿชฎ E15.0 hair pick
 1F451                                                  ; fully-qualified     # ๐Ÿ‘‘ E0.6 crown
 1F452                                                  ; fully-qualified     # ๐Ÿ‘’ E0.6 womanโ€™s hat
 1F3A9                                                  ; fully-qualified     # ๐ŸŽฉ E0.6 top hat
@@ -4103,6 +4130,8 @@
 1FA95                                                  ; fully-qualified     # ๐Ÿช• E12.0 banjo
 1F941                                                  ; fully-qualified     # ๐Ÿฅ E3.0 drum
 1FA98                                                  ; fully-qualified     # ๐Ÿช˜ E13.0 long drum
+1FA87                                                  ; fully-qualified     # ๐Ÿช‡ E15.0 maracas
+1FA88                                                  ; fully-qualified     # ๐Ÿชˆ E15.0 flute
 
 # subgroup: phone
 1F4F1                                                  ; fully-qualified     # ๐Ÿ“ฑ E0.6 mobile phone
@@ -4275,7 +4304,7 @@
 1F5E1                                                  ; unqualified         # ๐Ÿ—ก E0.7 dagger
 2694 FE0F                                              ; fully-qualified     # โš”๏ธ E1.0 crossed swords
 2694                                                   ; unqualified         # โš” E1.0 crossed swords
-1F52B                                                  ; fully-qualified     # ๐Ÿ”ซ E0.6 water pistol
+1F4A3                                                  ; fully-qualified     # ๐Ÿ’ฃ E0.6 bomb
 1FA83                                                  ; fully-qualified     # ๐Ÿชƒ E13.0 boomerang
 1F3F9                                                  ; fully-qualified     # ๐Ÿน E1.0 bow and arrow
 1F6E1 FE0F                                             ; fully-qualified     # ๐Ÿ›ก๏ธ E0.7 shield
@@ -4354,12 +4383,14 @@
 1FAA6                                                  ; fully-qualified     # ๐Ÿชฆ E13.0 headstone
 26B1 FE0F                                              ; fully-qualified     # โšฑ๏ธ E1.0 funeral urn
 26B1                                                   ; unqualified         # โšฑ E1.0 funeral urn
+1F9FF                                                  ; fully-qualified     # ๐Ÿงฟ E11.0 nazar amulet
+1FAAC                                                  ; fully-qualified     # ๐Ÿชฌ E14.0 hamsa
 1F5FF                                                  ; fully-qualified     # ๐Ÿ—ฟ E0.6 moai
 1FAA7                                                  ; fully-qualified     # ๐Ÿชง E13.0 placard
 1FAAA                                                  ; fully-qualified     # ๐Ÿชช E14.0 identification card
 
-# Objects subtotal:		304
-# Objects subtotal:		304	w/o modifiers
+# Objects subtotal:		310
+# Objects subtotal:		310	w/o modifiers
 
 # group: Symbols
 
@@ -4455,6 +4486,7 @@
 262E                                                   ; unqualified         # โ˜ฎ E1.0 peace symbol
 1F54E                                                  ; fully-qualified     # ๐Ÿ•Ž E1.0 menorah
 1F52F                                                  ; fully-qualified     # ๐Ÿ”ฏ E0.6 dotted six-pointed star
+1FAAF                                                  ; fully-qualified     # ๐Ÿชฏ E15.0 khanda
 
 # subgroup: zodiac
 2648                                                   ; fully-qualified     # โ™ˆ E0.6 Aries
@@ -4503,6 +4535,7 @@
 1F505                                                  ; fully-qualified     # ๐Ÿ”… E1.0 dim button
 1F506                                                  ; fully-qualified     # ๐Ÿ”† E1.0 bright button
 1F4F6                                                  ; fully-qualified     # ๐Ÿ“ถ E0.6 antenna bars
+1F6DC                                                  ; fully-qualified     # ๐Ÿ›œ E15.0 wireless
 1F4F3                                                  ; fully-qualified     # ๐Ÿ“ณ E0.6 vibration mode
 1F4F4                                                  ; fully-qualified     # ๐Ÿ“ด E0.6 mobile phone off
 
@@ -4693,8 +4726,8 @@
 1F533                                                  ; fully-qualified     # ๐Ÿ”ณ E0.6 white square button
 1F532                                                  ; fully-qualified     # ๐Ÿ”ฒ E0.6 black square button
 
-# Symbols subtotal:		302
-# Symbols subtotal:		302	w/o modifiers
+# Symbols subtotal:		304
+# Symbols subtotal:		304	w/o modifiers
 
 # group: Flags
 
@@ -4709,7 +4742,7 @@
 1F3F3 200D 1F308                                       ; unqualified         # ๐Ÿณโ€๐ŸŒˆ E4.0 rainbow flag
 1F3F3 FE0F 200D 26A7 FE0F                              ; fully-qualified     # ๐Ÿณ๏ธโ€โšง๏ธ E13.0 transgender flag
 1F3F3 200D 26A7 FE0F                                   ; unqualified         # ๐Ÿณโ€โšง๏ธ E13.0 transgender flag
-1F3F3 FE0F 200D 26A7                                   ; unqualified         # ๐Ÿณ๏ธโ€โšง E13.0 transgender flag
+1F3F3 FE0F 200D 26A7                                   ; minimally-qualified # ๐Ÿณ๏ธโ€โšง E13.0 transgender flag
 1F3F3 200D 26A7                                        ; unqualified         # ๐Ÿณโ€โšง E13.0 transgender flag
 1F3F4 200D 2620 FE0F                                   ; fully-qualified     # ๐Ÿดโ€โ˜ ๏ธ E11.0 pirate flag
 1F3F4 200D 2620                                        ; minimally-qualified # ๐Ÿดโ€โ˜  E11.0 pirate flag
@@ -4983,9 +5016,9 @@
 # Flags subtotal:		275	w/o modifiers
 
 # Status Counts
-# fully-qualified : 3624
-# minimally-qualified : 817
-# unqualified : 252
+# fully-qualified : 3655
+# minimally-qualified : 827
+# unqualified : 242
 # component : 9
 
 #EOF
diff --git a/scripts/emoji_codegen.py b/scripts/emoji_codegen.py
index a0758454..7e4f4702 100755
--- a/scripts/emoji_codegen.py
+++ b/scripts/emoji_codegen.py
@@ -13,8 +13,9 @@ class Emoji(object):
         self.unicodename = unicodename
 
 def generate_qml_list(**kwargs):
+    entrycount = sum([len(c[1]) for c in kwargs.items()])
     tmpl = Template('''
-const std::array<Emoji, {{ sum([len(c[1]) for c in kwargs.items()]) }}> emoji::Provider::emoji = {
+const std::array<Emoji, {{ entrycount }} > emoji::Provider::emoji = {
     {%- for c in kwargs.items() %}
     // {{ c[0].capitalize() }}
     {%- for e in c[1] %}
@@ -23,7 +24,7 @@ const std::array<Emoji, {{ sum([len(c[1]) for c in kwargs.items()]) }}> emoji::P
     {%- endfor %}
 };
     ''')
-    d = dict(kwargs=kwargs)
+    d = dict(kwargs=kwargs, entrycount=entrycount)
     print(tmpl.render(d))
 if __name__ == '__main__':
     if len(sys.argv) < 3:
diff --git a/src/emoji/Provider.cpp b/src/emoji/Provider.cpp
index f98e5d34..41c254d8 100644
--- a/src/emoji/Provider.cpp
+++ b/src/emoji/Provider.cpp
@@ -7,7 +7,7 @@
 
 using namespace emoji;
 
-const std::array<Emoji, 3650> emoji::Provider::emoji = {
+const std::array<Emoji, 3655> emoji::Provider::emoji = {
   // People
   Emoji{QStringLiteral(u"\U0001F600"),
         QStringLiteral(u"grinning"),
@@ -205,6 +205,10 @@ const std::array<Emoji, 3650> emoji::Provider::emoji = {
         QStringLiteral(u"lying"),
         QStringLiteral(u"lying face"),
         emoji::Emoji::Category::People},
+  Emoji{QStringLiteral(u"\U0001FAE8"),
+        QStringLiteral(u"shaking"),
+        QStringLiteral(u"shaking face"),
+        emoji::Emoji::Category::People},
   Emoji{QStringLiteral(u"\U0001F60C"),
         QStringLiteral(u"relieved"),
         QStringLiteral(u"relieved face"),
@@ -406,8 +410,8 @@ const std::array<Emoji, 3650> emoji::Provider::emoji = {
         QStringLiteral(u"face with steam from nose"),
         emoji::Emoji::Category::People},
   Emoji{QStringLiteral(u"\U0001F621"),
-        QStringLiteral(u"pouting"),
-        QStringLiteral(u"pouting face"),
+        QStringLiteral(u"enraged"),
+        QStringLiteral(u"enraged face"),
         emoji::Emoji::Category::People},
   Emoji{QStringLiteral(u"\U0001F620"),
         QStringLiteral(u"angry"),
@@ -513,10 +517,6 @@ const std::array<Emoji, 3650> emoji::Provider::emoji = {
         QStringLiteral(u"speak_no_evil_monkey"),
         QStringLiteral(u"speak-no-evil monkey"),
         emoji::Emoji::Category::People},
-  Emoji{QStringLiteral(u"\U0001F48B"),
-        QStringLiteral(u"kiss_mark"),
-        QStringLiteral(u"kiss mark"),
-        emoji::Emoji::Category::People},
   Emoji{QStringLiteral(u"\U0001F48C"),
         QStringLiteral(u"love_letter"),
         QStringLiteral(u"love letter"),
@@ -573,6 +573,10 @@ const std::array<Emoji, 3650> emoji::Provider::emoji = {
         QStringLiteral(u"red_heart"),
         QStringLiteral(u"red heart"),
         emoji::Emoji::Category::People},
+  Emoji{QStringLiteral(u"\U0001FA77"),
+        QStringLiteral(u"pink_heart"),
+        QStringLiteral(u"pink heart"),
+        emoji::Emoji::Category::People},
   Emoji{QStringLiteral(u"\U0001F9E1"),
         QStringLiteral(u"orange_heart"),
         QStringLiteral(u"orange heart"),
@@ -589,6 +593,10 @@ const std::array<Emoji, 3650> emoji::Provider::emoji = {
         QStringLiteral(u"blue_heart"),
         QStringLiteral(u"blue heart"),
         emoji::Emoji::Category::People},
+  Emoji{QStringLiteral(u"\U0001FA75"),
+        QStringLiteral(u"light_blue_heart"),
+        QStringLiteral(u"light blue heart"),
+        emoji::Emoji::Category::People},
   Emoji{QStringLiteral(u"\U0001F49C"),
         QStringLiteral(u"purple_heart"),
         QStringLiteral(u"purple heart"),
@@ -601,10 +609,18 @@ const std::array<Emoji, 3650> emoji::Provider::emoji = {
         QStringLiteral(u"black_heart"),
         QStringLiteral(u"black heart"),
         emoji::Emoji::Category::People},
+  Emoji{QStringLiteral(u"\U0001FA76"),
+        QStringLiteral(u"grey_heart"),
+        QStringLiteral(u"grey heart"),
+        emoji::Emoji::Category::People},
   Emoji{QStringLiteral(u"\U0001F90D"),
         QStringLiteral(u"white_heart"),
         QStringLiteral(u"white heart"),
         emoji::Emoji::Category::People},
+  Emoji{QStringLiteral(u"\U0001F48B"),
+        QStringLiteral(u"kiss_mark"),
+        QStringLiteral(u"kiss mark"),
+        emoji::Emoji::Category::People},
   Emoji{QStringLiteral(u"\U0001F4AF"),
         QStringLiteral(u"100"),
         QStringLiteral(u"hundred points"),
@@ -633,10 +649,6 @@ const std::array<Emoji, 3650> emoji::Provider::emoji = {
         QStringLiteral(u"hole"),
         QStringLiteral(u"hole"),
         emoji::Emoji::Category::People},
-  Emoji{QStringLiteral(u"\U0001F4A3"),
-        QStringLiteral(u"bomb"),
-        QStringLiteral(u"bomb"),
-        emoji::Emoji::Category::People},
   Emoji{QStringLiteral(u"\U0001F4AC"),
         QStringLiteral(u"speech_balloon"),
         QStringLiteral(u"speech balloon"),
@@ -659,7 +671,7 @@ const std::array<Emoji, 3650> emoji::Provider::emoji = {
         emoji::Emoji::Category::People},
   Emoji{QStringLiteral(u"\U0001F4A4"),
         QStringLiteral(u"zzz"),
-        QStringLiteral(u"zzz"),
+        QStringLiteral(u"ZZZ"),
         emoji::Emoji::Category::People},
   Emoji{QStringLiteral(u"\U0001F44B"),
         QStringLiteral(u"wave"),
@@ -877,6 +889,54 @@ const std::array<Emoji, 3650> emoji::Provider::emoji = {
         QStringLiteral(u"palm_up_hand_dark_skin_tone"),
         QStringLiteral(u"palm up hand: dark skin tone"),
         emoji::Emoji::Category::People},
+  Emoji{QStringLiteral(u"\U0001FAF7"),
+        QStringLiteral(u"leftwards_pushing_hand"),
+        QStringLiteral(u"leftwards pushing hand"),
+        emoji::Emoji::Category::People},
+  Emoji{QStringLiteral(u"\U0001FAF7\U0001F3FB"),
+        QStringLiteral(u"leftwards_pushing_hand_light_skin_tone"),
+        QStringLiteral(u"leftwards pushing hand: light skin tone"),
+        emoji::Emoji::Category::People},
+  Emoji{QStringLiteral(u"\U0001FAF7\U0001F3FC"),
+        QStringLiteral(u"leftwards_pushing_hand_medium_light_skin_tone"),
+        QStringLiteral(u"leftwards pushing hand: medium-light skin tone"),
+        emoji::Emoji::Category::People},
+  Emoji{QStringLiteral(u"\U0001FAF7\U0001F3FD"),
+        QStringLiteral(u"leftwards_pushing_hand_medium_skin_tone"),
+        QStringLiteral(u"leftwards pushing hand: medium skin tone"),
+        emoji::Emoji::Category::People},
+  Emoji{QStringLiteral(u"\U0001FAF7\U0001F3FE"),
+        QStringLiteral(u"leftwards_pushing_hand_medium_dark_skin_tone"),
+        QStringLiteral(u"leftwards pushing hand: medium-dark skin tone"),
+        emoji::Emoji::Category::People},
+  Emoji{QStringLiteral(u"\U0001FAF7\U0001F3FF"),
+        QStringLiteral(u"leftwards_pushing_hand_dark_skin_tone"),
+        QStringLiteral(u"leftwards pushing hand: dark skin tone"),
+        emoji::Emoji::Category::People},
+  Emoji{QStringLiteral(u"\U0001FAF8"),
+        QStringLiteral(u"rightwards_pushing_hand"),
+        QStringLiteral(u"rightwards pushing hand"),
+        emoji::Emoji::Category::People},
+  Emoji{QStringLiteral(u"\U0001FAF8\U0001F3FB"),
+        QStringLiteral(u"rightwards_pushing_hand_light_skin_tone"),
+        QStringLiteral(u"rightwards pushing hand: light skin tone"),
+        emoji::Emoji::Category::People},
+  Emoji{QStringLiteral(u"\U0001FAF8\U0001F3FC"),
+        QStringLiteral(u"rightwards_pushing_hand_medium_light_skin_tone"),
+        QStringLiteral(u"rightwards pushing hand: medium-light skin tone"),
+        emoji::Emoji::Category::People},
+  Emoji{QStringLiteral(u"\U0001FAF8\U0001F3FD"),
+        QStringLiteral(u"rightwards_pushing_hand_medium_skin_tone"),
+        QStringLiteral(u"rightwards pushing hand: medium skin tone"),
+        emoji::Emoji::Category::People},
+  Emoji{QStringLiteral(u"\U0001FAF8\U0001F3FE"),
+        QStringLiteral(u"rightwards_pushing_hand_medium_dark_skin_tone"),
+        QStringLiteral(u"rightwards pushing hand: medium-dark skin tone"),
+        emoji::Emoji::Category::People},
+  Emoji{QStringLiteral(u"\U0001FAF8\U0001F3FF"),
+        QStringLiteral(u"rightwards_pushing_hand_dark_skin_tone"),
+        QStringLiteral(u"rightwards pushing hand: dark skin tone"),
+        emoji::Emoji::Category::People},
   Emoji{QStringLiteral(u"\U0001F44C"),
         QStringLiteral(u"ok_hand"),
         QStringLiteral(u"OK hand"),
@@ -9505,6 +9565,14 @@ const std::array<Emoji, 3650> emoji::Provider::emoji = {
         QStringLiteral(u"horse"),
         QStringLiteral(u"horse face"),
         emoji::Emoji::Category::Nature},
+  Emoji{QStringLiteral(u"\U0001FACE"),
+        QStringLiteral(u"moose"),
+        QStringLiteral(u"moose"),
+        emoji::Emoji::Category::Nature},
+  Emoji{QStringLiteral(u"\U0001FACF"),
+        QStringLiteral(u"donkey"),
+        QStringLiteral(u"donkey"),
+        emoji::Emoji::Category::Nature},
   Emoji{QStringLiteral(u"\U0001F40E"),
         QStringLiteral(u"horse"),
         QStringLiteral(u"horse"),
@@ -9753,6 +9821,18 @@ const std::array<Emoji, 3650> emoji::Provider::emoji = {
         QStringLiteral(u"parrot"),
         QStringLiteral(u"parrot"),
         emoji::Emoji::Category::Nature},
+  Emoji{QStringLiteral(u"\U0001FABD"),
+        QStringLiteral(u"wing"),
+        QStringLiteral(u"wing"),
+        emoji::Emoji::Category::Nature},
+  Emoji{QStringLiteral(u"\U0001F426\U0000200D\U00002B1B"),
+        QStringLiteral(u"black_bird"),
+        QStringLiteral(u"black bird"),
+        emoji::Emoji::Category::Nature},
+  Emoji{QStringLiteral(u"\U0001FABF"),
+        QStringLiteral(u"goose"),
+        QStringLiteral(u"goose"),
+        emoji::Emoji::Category::Nature},
   Emoji{QStringLiteral(u"\U0001F438"),
         QStringLiteral(u"frog"),
         QStringLiteral(u"frog"),
@@ -9833,6 +9913,10 @@ const std::array<Emoji, 3650> emoji::Provider::emoji = {
         QStringLiteral(u"coral"),
         QStringLiteral(u"coral"),
         emoji::Emoji::Category::Nature},
+  Emoji{QStringLiteral(u"\U0001FABC"),
+        QStringLiteral(u"jellyfish"),
+        QStringLiteral(u"jellyfish"),
+        emoji::Emoji::Category::Nature},
   Emoji{QStringLiteral(u"\U0001F40C"),
         QStringLiteral(u"snail"),
         QStringLiteral(u"snail"),
@@ -9941,6 +10025,10 @@ const std::array<Emoji, 3650> emoji::Provider::emoji = {
         QStringLiteral(u"tulip"),
         QStringLiteral(u"tulip"),
         emoji::Emoji::Category::Nature},
+  Emoji{QStringLiteral(u"\U0001FABB"),
+        QStringLiteral(u"hyacinth"),
+        QStringLiteral(u"hyacinth"),
+        emoji::Emoji::Category::Nature},
   Emoji{QStringLiteral(u"\U0001F331"),
         QStringLiteral(u"seedling"),
         QStringLiteral(u"seedling"),
@@ -10001,6 +10089,10 @@ const std::array<Emoji, 3650> emoji::Provider::emoji = {
         QStringLiteral(u"nest_with_eggs"),
         QStringLiteral(u"nest with eggs"),
         emoji::Emoji::Category::Nature},
+  Emoji{QStringLiteral(u"\U0001F344"),
+        QStringLiteral(u"mushroom"),
+        QStringLiteral(u"mushroom"),
+        emoji::Emoji::Category::Nature},
   // Food
   Emoji{QStringLiteral(u"\U0001F347"),
         QStringLiteral(u"grapes"),
@@ -10126,10 +10218,6 @@ const std::array<Emoji, 3650> emoji::Provider::emoji = {
         QStringLiteral(u"onion"),
         QStringLiteral(u"onion"),
         emoji::Emoji::Category::Food},
-  Emoji{QStringLiteral(u"\U0001F344"),
-        QStringLiteral(u"mushroom"),
-        QStringLiteral(u"mushroom"),
-        emoji::Emoji::Category::Food},
   Emoji{QStringLiteral(u"\U0001F95C"),
         QStringLiteral(u"peanuts"),
         QStringLiteral(u"peanuts"),
@@ -10142,6 +10230,14 @@ const std::array<Emoji, 3650> emoji::Provider::emoji = {
         QStringLiteral(u"chestnut"),
         QStringLiteral(u"chestnut"),
         emoji::Emoji::Category::Food},
+  Emoji{QStringLiteral(u"\U0001FADA"),
+        QStringLiteral(u"ginger_root"),
+        QStringLiteral(u"ginger root"),
+        emoji::Emoji::Category::Food},
+  Emoji{QStringLiteral(u"\U0001FADB"),
+        QStringLiteral(u"pea_pod"),
+        QStringLiteral(u"pea pod"),
+        emoji::Emoji::Category::Food},
   Emoji{QStringLiteral(u"\U0001F35E"),
         QStringLiteral(u"bread"),
         QStringLiteral(u"bread"),
@@ -10759,6 +10855,10 @@ const std::array<Emoji, 3650> emoji::Provider::emoji = {
         QStringLiteral(u"kite"),
         QStringLiteral(u"kite"),
         emoji::Emoji::Category::Activity},
+  Emoji{QStringLiteral(u"\U0001F52B"),
+        QStringLiteral(u"water_pistol"),
+        QStringLiteral(u"water pistol"),
+        emoji::Emoji::Category::Activity},
   Emoji{QStringLiteral(u"\U0001F3B1"),
         QStringLiteral(u"pool_8_ball"),
         QStringLiteral(u"pool 8 ball"),
@@ -10771,14 +10871,6 @@ const std::array<Emoji, 3650> emoji::Provider::emoji = {
         QStringLiteral(u"magic_wand"),
         QStringLiteral(u"magic wand"),
         emoji::Emoji::Category::Activity},
-  Emoji{QStringLiteral(u"\U0001F9FF"),
-        QStringLiteral(u"nazar_amulet"),
-        QStringLiteral(u"nazar amulet"),
-        emoji::Emoji::Category::Activity},
-  Emoji{QStringLiteral(u"\U0001FAAC"),
-        QStringLiteral(u"hamsa"),
-        QStringLiteral(u"hamsa"),
-        emoji::Emoji::Category::Activity},
   Emoji{QStringLiteral(u"\U0001F3AE"),
         QStringLiteral(u"video_game"),
         QStringLiteral(u"video game"),
@@ -11829,6 +11921,10 @@ const std::array<Emoji, 3650> emoji::Provider::emoji = {
         QStringLiteral(u"woman_s_clothes"),
         QStringLiteral(u"womanโ€™s clothes"),
         emoji::Emoji::Category::Objects},
+  Emoji{QStringLiteral(u"\U0001FAAD"),
+        QStringLiteral(u"folding_hand_fan"),
+        QStringLiteral(u"folding hand fan"),
+        emoji::Emoji::Category::Objects},
   Emoji{QStringLiteral(u"\U0001F45B"),
         QStringLiteral(u"purse"),
         QStringLiteral(u"purse"),
@@ -11885,6 +11981,10 @@ const std::array<Emoji, 3650> emoji::Provider::emoji = {
         QStringLiteral(u"woman_s_boot"),
         QStringLiteral(u"womanโ€™s boot"),
         emoji::Emoji::Category::Objects},
+  Emoji{QStringLiteral(u"\U0001FAAE"),
+        QStringLiteral(u"hair_pick"),
+        QStringLiteral(u"hair pick"),
+        emoji::Emoji::Category::Objects},
   Emoji{QStringLiteral(u"\U0001F451"),
         QStringLiteral(u"crown"),
         QStringLiteral(u"crown"),
@@ -12037,6 +12137,14 @@ const std::array<Emoji, 3650> emoji::Provider::emoji = {
         QStringLiteral(u"long_drum"),
         QStringLiteral(u"long drum"),
         emoji::Emoji::Category::Objects},
+  Emoji{QStringLiteral(u"\U0001FA87"),
+        QStringLiteral(u"maracas"),
+        QStringLiteral(u"maracas"),
+        emoji::Emoji::Category::Objects},
+  Emoji{QStringLiteral(u"\U0001FA88"),
+        QStringLiteral(u"flute"),
+        QStringLiteral(u"flute"),
+        emoji::Emoji::Category::Objects},
   Emoji{QStringLiteral(u"\U0001F4F1"),
         QStringLiteral(u"mobile_phone"),
         QStringLiteral(u"mobile phone"),
@@ -12513,9 +12621,9 @@ const std::array<Emoji, 3650> emoji::Provider::emoji = {
         QStringLiteral(u"crossed_swords"),
         QStringLiteral(u"crossed swords"),
         emoji::Emoji::Category::Objects},
-  Emoji{QStringLiteral(u"\U0001F52B"),
-        QStringLiteral(u"water_pistol"),
-        QStringLiteral(u"water pistol"),
+  Emoji{QStringLiteral(u"\U0001F4A3"),
+        QStringLiteral(u"bomb"),
+        QStringLiteral(u"bomb"),
         emoji::Emoji::Category::Objects},
   Emoji{QStringLiteral(u"\U0001FA83"),
         QStringLiteral(u"boomerang"),
@@ -12757,6 +12865,14 @@ const std::array<Emoji, 3650> emoji::Provider::emoji = {
         QStringLiteral(u"funeral_urn"),
         QStringLiteral(u"funeral urn"),
         emoji::Emoji::Category::Objects},
+  Emoji{QStringLiteral(u"\U0001F9FF"),
+        QStringLiteral(u"nazar_amulet"),
+        QStringLiteral(u"nazar amulet"),
+        emoji::Emoji::Category::Objects},
+  Emoji{QStringLiteral(u"\U0001FAAC"),
+        QStringLiteral(u"hamsa"),
+        QStringLiteral(u"hamsa"),
+        emoji::Emoji::Category::Objects},
   Emoji{QStringLiteral(u"\U0001F5FF"),
         QStringLiteral(u"moai"),
         QStringLiteral(u"moai"),
@@ -12770,110 +12886,6 @@ const std::array<Emoji, 3650> emoji::Provider::emoji = {
         QStringLiteral(u"identification card"),
         emoji::Emoji::Category::Objects},
   // Symbols
-  Emoji{QStringLiteral(u"\U0000200C\U0001F1E6\U0000200C"),
-        QStringLiteral(u"regional_indicator_a"),
-        QStringLiteral(u"regional indicator a"),
-        emoji::Emoji::Category::Symbols},
-  Emoji{QStringLiteral(u"\U0000200C\U0001F1E7\U0000200C"),
-        QStringLiteral(u"regional_indicator_b"),
-        QStringLiteral(u"regional indicator b"),
-        emoji::Emoji::Category::Symbols},
-  Emoji{QStringLiteral(u"\U0000200C\U0001F1E8\U0000200C"),
-        QStringLiteral(u"regional_indicator_c"),
-        QStringLiteral(u"regional indicator c"),
-        emoji::Emoji::Category::Symbols},
-  Emoji{QStringLiteral(u"\U0000200C\U0001F1E9\U0000200C"),
-        QStringLiteral(u"regional_indicator_d"),
-        QStringLiteral(u"regional indicator d"),
-        emoji::Emoji::Category::Symbols},
-  Emoji{QStringLiteral(u"\U0000200C\U0001F1EA\U0000200C"),
-        QStringLiteral(u"regional_indicator_e"),
-        QStringLiteral(u"regional indicator e"),
-        emoji::Emoji::Category::Symbols},
-  Emoji{QStringLiteral(u"\U0000200C\U0001F1EB\U0000200C"),
-        QStringLiteral(u"regional_indicator_f"),
-        QStringLiteral(u"regional indicator f"),
-        emoji::Emoji::Category::Symbols},
-  Emoji{QStringLiteral(u"\U0000200C\U0001F1EC\U0000200C"),
-        QStringLiteral(u"regional_indicator_g"),
-        QStringLiteral(u"regional indicator g"),
-        emoji::Emoji::Category::Symbols},
-  Emoji{QStringLiteral(u"\U0000200C\U0001F1ED\U0000200C"),
-        QStringLiteral(u"regional_indicator_h"),
-        QStringLiteral(u"regional indicator h"),
-        emoji::Emoji::Category::Symbols},
-  Emoji{QStringLiteral(u"\U0000200C\U0001F1EE\U0000200C"),
-        QStringLiteral(u"regional_indicator_i"),
-        QStringLiteral(u"regional indicator i"),
-        emoji::Emoji::Category::Symbols},
-  Emoji{QStringLiteral(u"\U0000200C\U0001F1EF\U0000200C"),
-        QStringLiteral(u"regional_indicator_j"),
-        QStringLiteral(u"regional indicator j"),
-        emoji::Emoji::Category::Symbols},
-  Emoji{QStringLiteral(u"\U0000200C\U0001F1F0\U0000200C"),
-        QStringLiteral(u"regional_indicator_k"),
-        QStringLiteral(u"regional indicator k"),
-        emoji::Emoji::Category::Symbols},
-  Emoji{QStringLiteral(u"\U0000200C\U0001F1F1\U0000200C"),
-        QStringLiteral(u"regional_indicator_l"),
-        QStringLiteral(u"regional indicator l"),
-        emoji::Emoji::Category::Symbols},
-  Emoji{QStringLiteral(u"\U0000200C\U0001F1F2\U0000200C"),
-        QStringLiteral(u"regional_indicator_m"),
-        QStringLiteral(u"regional indicator m"),
-        emoji::Emoji::Category::Symbols},
-  Emoji{QStringLiteral(u"\U0000200C\U0001F1F3\U0000200C"),
-        QStringLiteral(u"regional_indicator_n"),
-        QStringLiteral(u"regional indicator n"),
-        emoji::Emoji::Category::Symbols},
-  Emoji{QStringLiteral(u"\U0000200C\U0001F1F4\U0000200C"),
-        QStringLiteral(u"regional_indicator_o"),
-        QStringLiteral(u"regional indicator o"),
-        emoji::Emoji::Category::Symbols},
-  Emoji{QStringLiteral(u"\U0000200C\U0001F1F5\U0000200C"),
-        QStringLiteral(u"regional_indicator_p"),
-        QStringLiteral(u"regional indicator p"),
-        emoji::Emoji::Category::Symbols},
-  Emoji{QStringLiteral(u"\U0000200C\U0001F1F6\U0000200C"),
-        QStringLiteral(u"regional_indicator_q"),
-        QStringLiteral(u"regional indicator q"),
-        emoji::Emoji::Category::Symbols},
-  Emoji{QStringLiteral(u"\U0000200C\U0001F1F7\U0000200C"),
-        QStringLiteral(u"regional_indicator_r"),
-        QStringLiteral(u"regional indicator r"),
-        emoji::Emoji::Category::Symbols},
-  Emoji{QStringLiteral(u"\U0000200C\U0001F1F8\U0000200C"),
-        QStringLiteral(u"regional_indicator_s"),
-        QStringLiteral(u"regional indicator s"),
-        emoji::Emoji::Category::Symbols},
-  Emoji{QStringLiteral(u"\U0000200C\U0001F1F9\U0000200C"),
-        QStringLiteral(u"regional_indicator_t"),
-        QStringLiteral(u"regional indicator t"),
-        emoji::Emoji::Category::Symbols},
-  Emoji{QStringLiteral(u"\U0000200C\U0001F1FA\U0000200C"),
-        QStringLiteral(u"regional_indicator_u"),
-        QStringLiteral(u"regional indicator u"),
-        emoji::Emoji::Category::Symbols},
-  Emoji{QStringLiteral(u"\U0000200C\U0001F1FB\U0000200C"),
-        QStringLiteral(u"regional_indicator_v"),
-        QStringLiteral(u"regional indicator v"),
-        emoji::Emoji::Category::Symbols},
-  Emoji{QStringLiteral(u"\U0000200C\U0001F1FC\U0000200C"),
-        QStringLiteral(u"regional_indicator_w"),
-        QStringLiteral(u"regional indicator w"),
-        emoji::Emoji::Category::Symbols},
-  Emoji{QStringLiteral(u"\U0000200C\U0001F1FD\U0000200C"),
-        QStringLiteral(u"regional_indicator_x"),
-        QStringLiteral(u"regional indicator x"),
-        emoji::Emoji::Category::Symbols},
-  Emoji{QStringLiteral(u"\U0000200C\U0001F1FE\U0000200C"),
-        QStringLiteral(u"regional_indicator_y"),
-        QStringLiteral(u"regional indicator y"),
-        emoji::Emoji::Category::Symbols},
-  Emoji{QStringLiteral(u"\U0000200C\U0001F1FF\U0000200C"),
-        QStringLiteral(u"regional_indicator_z"),
-        QStringLiteral(u"regional indicator z"),
-        emoji::Emoji::Category::Symbols},
   Emoji{QStringLiteral(u"\U0001F3E7"),
         QStringLiteral(u"atm_sign"),
         QStringLiteral(u"ATM sign"),
@@ -13110,6 +13122,10 @@ const std::array<Emoji, 3650> emoji::Provider::emoji = {
         QStringLiteral(u"dotted_six_pointed_star"),
         QStringLiteral(u"dotted six-pointed star"),
         emoji::Emoji::Category::Symbols},
+  Emoji{QStringLiteral(u"\U0001FAAF"),
+        QStringLiteral(u"khanda"),
+        QStringLiteral(u"khanda"),
+        emoji::Emoji::Category::Symbols},
   Emoji{QStringLiteral(u"\U00002648"),
         QStringLiteral(u"aries"),
         QStringLiteral(u"Aries"),
@@ -13250,6 +13266,10 @@ const std::array<Emoji, 3650> emoji::Provider::emoji = {
         QStringLiteral(u"antenna_bars"),
         QStringLiteral(u"antenna bars"),
         emoji::Emoji::Category::Symbols},
+  Emoji{QStringLiteral(u"\U0001F6DC"),
+        QStringLiteral(u"wireless"),
+        QStringLiteral(u"wireless"),
+        emoji::Emoji::Category::Symbols},
   Emoji{QStringLiteral(u"\U0001F4F3"),
         QStringLiteral(u"vibration_mode"),
         QStringLiteral(u"vibration mode"),
diff --git a/src/emoji/Provider.h b/src/emoji/Provider.h
index 566c53a0..32544793 100644
--- a/src/emoji/Provider.h
+++ b/src/emoji/Provider.h
@@ -46,7 +46,7 @@ class Provider
 {
 public:
     // all emoji for QML purposes
-    static const std::array<Emoji, 3650> emoji;
+    static const std::array<Emoji, 3655> emoji;
 };
 
 } // namespace emoji