fix naming issues with emoji, edit how codegen works

pull/1720/head
TheDrawingCoding-Gamer 7 months ago
parent f465a5b52f
commit a6090f4a1c
  1. 2
      CMakeLists.txt
  2. 337
      resources/emoji-test.txt
  3. 11
      resources/provider-head.txt
  4. 18
      resources/provider-header.txt
  5. 2
      resources/shortcodes.txt
  6. 5
      scripts/codegen.sh
  7. 49
      scripts/emoji_codegen.py
  8. 25
      src/GridImagePackModel.cpp
  9. 33
      src/emoji/Emoji.cpp
  10. 88
      src/emoji/Emoji.h
  11. 1069
      src/emoji/Provider.cpp
  12. 86
      src/emoji/Provider.h

@ -357,6 +357,8 @@ set(SRC_FILES
# Emoji # Emoji
src/emoji/Provider.cpp src/emoji/Provider.cpp
src/emoji/Provider.h src/emoji/Provider.h
src/emoji/Emoji.cpp
src/emoji/Emoji.h
# Timeline # Timeline
src/timeline/CommunitiesModel.cpp src/timeline/CommunitiesModel.cpp

@ -1,11 +1,11 @@
# emoji-test.txt # emoji-test.txt
# Date: 2022-08-12, 20:24:39 GMT # Date: 2023-06-05, 21:39:54 GMT
# © 2022 Unicode®, Inc. # © 2023 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see https://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 # Emoji Keyboard/Display Test Data for UTS #51
# Version: 15.0 # Version: 15.1
# #
# For documentation and usage, see https://www.unicode.org/reports/tr51 # For documentation and usage, see https://www.unicode.org/reports/tr51
# #
@ -93,6 +93,10 @@
1F62E 200D 1F4A8 ; fully-qualified # 😮💨 E13.1 face exhaling 1F62E 200D 1F4A8 ; fully-qualified # 😮💨 E13.1 face exhaling
1F925 ; fully-qualified # 🤥 E3.0 lying face 1F925 ; fully-qualified # 🤥 E3.0 lying face
1FAE8 ; fully-qualified # 🫨 E15.0 shaking face 1FAE8 ; fully-qualified # 🫨 E15.0 shaking face
1F642 200D 2194 FE0F ; fully-qualified # 🙂 E15.1 head shaking horizontally
1F642 200D 2194 ; minimally-qualified # 🙂↔ E15.1 head shaking horizontally
1F642 200D 2195 FE0F ; fully-qualified # 🙂 E15.1 head shaking vertically
1F642 200D 2195 ; minimally-qualified # 🙂↕ E15.1 head shaking vertically
# subgroup: face-sleepy # subgroup: face-sleepy
1F60C ; fully-qualified # 😌 E0.6 relieved face 1F60C ; fully-qualified # 😌 E0.6 relieved face
@ -244,8 +248,8 @@
1F4AD ; fully-qualified # 💭 E1.0 thought balloon 1F4AD ; fully-qualified # 💭 E1.0 thought balloon
1F4A4 ; fully-qualified # 💤 E0.6 ZZZ 1F4A4 ; fully-qualified # 💤 E0.6 ZZZ
# Smileys & Emotion subtotal: 180 # Smileys & Emotion subtotal: 184
# Smileys & Emotion subtotal: 180 w/o modifiers # Smileys & Emotion subtotal: 184 w/o modifiers
# group: People & Body # group: People & Body
@ -2065,6 +2069,66 @@
1F6B6 1F3FE 200D 2640 ; minimally-qualified # 🚶🏾♀ E4.0 woman walking: medium-dark skin tone 1F6B6 1F3FE 200D 2640 ; minimally-qualified # 🚶🏾♀ E4.0 woman walking: medium-dark skin tone
1F6B6 1F3FF 200D 2640 FE0F ; fully-qualified # 🚶🏿 E4.0 woman walking: dark skin tone 1F6B6 1F3FF 200D 2640 FE0F ; fully-qualified # 🚶🏿 E4.0 woman walking: dark skin tone
1F6B6 1F3FF 200D 2640 ; minimally-qualified # 🚶🏿♀ E4.0 woman walking: dark skin tone 1F6B6 1F3FF 200D 2640 ; minimally-qualified # 🚶🏿♀ E4.0 woman walking: dark skin tone
1F6B6 200D 27A1 FE0F ; fully-qualified # 🚶 E15.1 person walking facing right
1F6B6 200D 27A1 ; minimally-qualified # 🚶➡ E15.1 person walking facing right
1F6B6 1F3FB 200D 27A1 FE0F ; fully-qualified # 🚶🏻 E15.1 person walking facing right: light skin tone
1F6B6 1F3FB 200D 27A1 ; minimally-qualified # 🚶🏻➡ E15.1 person walking facing right: light skin tone
1F6B6 1F3FC 200D 27A1 FE0F ; fully-qualified # 🚶🏼 E15.1 person walking facing right: medium-light skin tone
1F6B6 1F3FC 200D 27A1 ; minimally-qualified # 🚶🏼➡ E15.1 person walking facing right: medium-light skin tone
1F6B6 1F3FD 200D 27A1 FE0F ; fully-qualified # 🚶🏽 E15.1 person walking facing right: medium skin tone
1F6B6 1F3FD 200D 27A1 ; minimally-qualified # 🚶🏽➡ E15.1 person walking facing right: medium skin tone
1F6B6 1F3FE 200D 27A1 FE0F ; fully-qualified # 🚶🏾 E15.1 person walking facing right: medium-dark skin tone
1F6B6 1F3FE 200D 27A1 ; minimally-qualified # 🚶🏾➡ E15.1 person walking facing right: medium-dark skin tone
1F6B6 1F3FF 200D 27A1 FE0F ; fully-qualified # 🚶🏿 E15.1 person walking facing right: dark skin tone
1F6B6 1F3FF 200D 27A1 ; minimally-qualified # 🚶🏿➡ E15.1 person walking facing right: dark skin tone
1F6B6 200D 2640 FE0F 200D 27A1 FE0F ; fully-qualified # 🚶 E15.1 woman walking facing right
1F6B6 200D 2640 200D 27A1 FE0F ; minimally-qualified # 🚶 E15.1 woman walking facing right
1F6B6 200D 2640 FE0F 200D 27A1 ; minimally-qualified # 🚶➡ E15.1 woman walking facing right
1F6B6 200D 2640 200D 27A1 ; minimally-qualified # 🚶➡ E15.1 woman walking facing right
1F6B6 1F3FB 200D 2640 FE0F 200D 27A1 FE0F ; fully-qualified # 🚶🏻 E15.1 woman walking facing right: light skin tone
1F6B6 1F3FB 200D 2640 200D 27A1 FE0F ; minimally-qualified # 🚶🏻 E15.1 woman walking facing right: light skin tone
1F6B6 1F3FB 200D 2640 FE0F 200D 27A1 ; minimally-qualified # 🚶🏻➡ E15.1 woman walking facing right: light skin tone
1F6B6 1F3FB 200D 2640 200D 27A1 ; minimally-qualified # 🚶🏻➡ E15.1 woman walking facing right: light skin tone
1F6B6 1F3FC 200D 2640 FE0F 200D 27A1 FE0F ; fully-qualified # 🚶🏼 E15.1 woman walking facing right: medium-light skin tone
1F6B6 1F3FC 200D 2640 200D 27A1 FE0F ; minimally-qualified # 🚶🏼 E15.1 woman walking facing right: medium-light skin tone
1F6B6 1F3FC 200D 2640 FE0F 200D 27A1 ; minimally-qualified # 🚶🏼➡ E15.1 woman walking facing right: medium-light skin tone
1F6B6 1F3FC 200D 2640 200D 27A1 ; minimally-qualified # 🚶🏼➡ E15.1 woman walking facing right: medium-light skin tone
1F6B6 1F3FD 200D 2640 FE0F 200D 27A1 FE0F ; fully-qualified # 🚶🏽 E15.1 woman walking facing right: medium skin tone
1F6B6 1F3FD 200D 2640 200D 27A1 FE0F ; minimally-qualified # 🚶🏽 E15.1 woman walking facing right: medium skin tone
1F6B6 1F3FD 200D 2640 FE0F 200D 27A1 ; minimally-qualified # 🚶🏽➡ E15.1 woman walking facing right: medium skin tone
1F6B6 1F3FD 200D 2640 200D 27A1 ; minimally-qualified # 🚶🏽➡ E15.1 woman walking facing right: medium skin tone
1F6B6 1F3FE 200D 2640 FE0F 200D 27A1 FE0F ; fully-qualified # 🚶🏾 E15.1 woman walking facing right: medium-dark skin tone
1F6B6 1F3FE 200D 2640 200D 27A1 FE0F ; minimally-qualified # 🚶🏾 E15.1 woman walking facing right: medium-dark skin tone
1F6B6 1F3FE 200D 2640 FE0F 200D 27A1 ; minimally-qualified # 🚶🏾➡ E15.1 woman walking facing right: medium-dark skin tone
1F6B6 1F3FE 200D 2640 200D 27A1 ; minimally-qualified # 🚶🏾➡ E15.1 woman walking facing right: medium-dark skin tone
1F6B6 1F3FF 200D 2640 FE0F 200D 27A1 FE0F ; fully-qualified # 🚶🏿 E15.1 woman walking facing right: dark skin tone
1F6B6 1F3FF 200D 2640 200D 27A1 FE0F ; minimally-qualified # 🚶🏿 E15.1 woman walking facing right: dark skin tone
1F6B6 1F3FF 200D 2640 FE0F 200D 27A1 ; minimally-qualified # 🚶🏿➡ E15.1 woman walking facing right: dark skin tone
1F6B6 1F3FF 200D 2640 200D 27A1 ; minimally-qualified # 🚶🏿➡ E15.1 woman walking facing right: dark skin tone
1F6B6 200D 2642 FE0F 200D 27A1 FE0F ; fully-qualified # 🚶 E15.1 man walking facing right
1F6B6 200D 2642 200D 27A1 FE0F ; minimally-qualified # 🚶 E15.1 man walking facing right
1F6B6 200D 2642 FE0F 200D 27A1 ; minimally-qualified # 🚶➡ E15.1 man walking facing right
1F6B6 200D 2642 200D 27A1 ; minimally-qualified # 🚶➡ E15.1 man walking facing right
1F6B6 1F3FB 200D 2642 FE0F 200D 27A1 FE0F ; fully-qualified # 🚶🏻 E15.1 man walking facing right: light skin tone
1F6B6 1F3FB 200D 2642 200D 27A1 FE0F ; minimally-qualified # 🚶🏻 E15.1 man walking facing right: light skin tone
1F6B6 1F3FB 200D 2642 FE0F 200D 27A1 ; minimally-qualified # 🚶🏻➡ E15.1 man walking facing right: light skin tone
1F6B6 1F3FB 200D 2642 200D 27A1 ; minimally-qualified # 🚶🏻➡ E15.1 man walking facing right: light skin tone
1F6B6 1F3FC 200D 2642 FE0F 200D 27A1 FE0F ; fully-qualified # 🚶🏼 E15.1 man walking facing right: medium-light skin tone
1F6B6 1F3FC 200D 2642 200D 27A1 FE0F ; minimally-qualified # 🚶🏼 E15.1 man walking facing right: medium-light skin tone
1F6B6 1F3FC 200D 2642 FE0F 200D 27A1 ; minimally-qualified # 🚶🏼➡ E15.1 man walking facing right: medium-light skin tone
1F6B6 1F3FC 200D 2642 200D 27A1 ; minimally-qualified # 🚶🏼➡ E15.1 man walking facing right: medium-light skin tone
1F6B6 1F3FD 200D 2642 FE0F 200D 27A1 FE0F ; fully-qualified # 🚶🏽 E15.1 man walking facing right: medium skin tone
1F6B6 1F3FD 200D 2642 200D 27A1 FE0F ; minimally-qualified # 🚶🏽 E15.1 man walking facing right: medium skin tone
1F6B6 1F3FD 200D 2642 FE0F 200D 27A1 ; minimally-qualified # 🚶🏽➡ E15.1 man walking facing right: medium skin tone
1F6B6 1F3FD 200D 2642 200D 27A1 ; minimally-qualified # 🚶🏽➡ E15.1 man walking facing right: medium skin tone
1F6B6 1F3FE 200D 2642 FE0F 200D 27A1 FE0F ; fully-qualified # 🚶🏾 E15.1 man walking facing right: medium-dark skin tone
1F6B6 1F3FE 200D 2642 200D 27A1 FE0F ; minimally-qualified # 🚶🏾 E15.1 man walking facing right: medium-dark skin tone
1F6B6 1F3FE 200D 2642 FE0F 200D 27A1 ; minimally-qualified # 🚶🏾➡ E15.1 man walking facing right: medium-dark skin tone
1F6B6 1F3FE 200D 2642 200D 27A1 ; minimally-qualified # 🚶🏾➡ E15.1 man walking facing right: medium-dark skin tone
1F6B6 1F3FF 200D 2642 FE0F 200D 27A1 FE0F ; fully-qualified # 🚶🏿 E15.1 man walking facing right: dark skin tone
1F6B6 1F3FF 200D 2642 200D 27A1 FE0F ; minimally-qualified # 🚶🏿 E15.1 man walking facing right: dark skin tone
1F6B6 1F3FF 200D 2642 FE0F 200D 27A1 ; minimally-qualified # 🚶🏿➡ E15.1 man walking facing right: dark skin tone
1F6B6 1F3FF 200D 2642 200D 27A1 ; minimally-qualified # 🚶🏿➡ E15.1 man walking facing right: dark skin tone
1F9CD ; fully-qualified # 🧍 E12.0 person standing 1F9CD ; fully-qualified # 🧍 E12.0 person standing
1F9CD 1F3FB ; fully-qualified # 🧍🏻 E12.0 person standing: light skin tone 1F9CD 1F3FB ; fully-qualified # 🧍🏻 E12.0 person standing: light skin tone
1F9CD 1F3FC ; fully-qualified # 🧍🏼 E12.0 person standing: medium-light skin tone 1F9CD 1F3FC ; fully-qualified # 🧍🏼 E12.0 person standing: medium-light skin tone
@ -2125,60 +2189,228 @@
1F9CE 1F3FE 200D 2640 ; minimally-qualified # 🧎🏾♀ E12.0 woman kneeling: medium-dark skin tone 1F9CE 1F3FE 200D 2640 ; minimally-qualified # 🧎🏾♀ E12.0 woman kneeling: medium-dark skin tone
1F9CE 1F3FF 200D 2640 FE0F ; fully-qualified # 🧎🏿 E12.0 woman kneeling: dark skin tone 1F9CE 1F3FF 200D 2640 FE0F ; fully-qualified # 🧎🏿 E12.0 woman kneeling: dark skin tone
1F9CE 1F3FF 200D 2640 ; minimally-qualified # 🧎🏿♀ E12.0 woman kneeling: dark skin tone 1F9CE 1F3FF 200D 2640 ; minimally-qualified # 🧎🏿♀ E12.0 woman kneeling: dark skin tone
1F9CE 200D 27A1 FE0F ; fully-qualified # 🧎 E15.1 person kneeling facing right
1F9CE 200D 27A1 ; minimally-qualified # 🧎➡ E15.1 person kneeling facing right
1F9CE 1F3FB 200D 27A1 FE0F ; fully-qualified # 🧎🏻 E15.1 person kneeling facing right: light skin tone
1F9CE 1F3FB 200D 27A1 ; minimally-qualified # 🧎🏻➡ E15.1 person kneeling facing right: light skin tone
1F9CE 1F3FC 200D 27A1 FE0F ; fully-qualified # 🧎🏼 E15.1 person kneeling facing right: medium-light skin tone
1F9CE 1F3FC 200D 27A1 ; minimally-qualified # 🧎🏼➡ E15.1 person kneeling facing right: medium-light skin tone
1F9CE 1F3FD 200D 27A1 FE0F ; fully-qualified # 🧎🏽 E15.1 person kneeling facing right: medium skin tone
1F9CE 1F3FD 200D 27A1 ; minimally-qualified # 🧎🏽➡ E15.1 person kneeling facing right: medium skin tone
1F9CE 1F3FE 200D 27A1 FE0F ; fully-qualified # 🧎🏾 E15.1 person kneeling facing right: medium-dark skin tone
1F9CE 1F3FE 200D 27A1 ; minimally-qualified # 🧎🏾➡ E15.1 person kneeling facing right: medium-dark skin tone
1F9CE 1F3FF 200D 27A1 FE0F ; fully-qualified # 🧎🏿 E15.1 person kneeling facing right: dark skin tone
1F9CE 1F3FF 200D 27A1 ; minimally-qualified # 🧎🏿➡ E15.1 person kneeling facing right: dark skin tone
1F9CE 200D 2640 FE0F 200D 27A1 FE0F ; fully-qualified # 🧎 E15.1 woman kneeling facing right
1F9CE 200D 2640 200D 27A1 FE0F ; minimally-qualified # 🧎 E15.1 woman kneeling facing right
1F9CE 200D 2640 FE0F 200D 27A1 ; minimally-qualified # 🧎➡ E15.1 woman kneeling facing right
1F9CE 200D 2640 200D 27A1 ; minimally-qualified # 🧎➡ E15.1 woman kneeling facing right
1F9CE 1F3FB 200D 2640 FE0F 200D 27A1 FE0F ; fully-qualified # 🧎🏻 E15.1 woman kneeling facing right: light skin tone
1F9CE 1F3FB 200D 2640 200D 27A1 FE0F ; minimally-qualified # 🧎🏻 E15.1 woman kneeling facing right: light skin tone
1F9CE 1F3FB 200D 2640 FE0F 200D 27A1 ; minimally-qualified # 🧎🏻➡ E15.1 woman kneeling facing right: light skin tone
1F9CE 1F3FB 200D 2640 200D 27A1 ; minimally-qualified # 🧎🏻➡ E15.1 woman kneeling facing right: light skin tone
1F9CE 1F3FC 200D 2640 FE0F 200D 27A1 FE0F ; fully-qualified # 🧎🏼 E15.1 woman kneeling facing right: medium-light skin tone
1F9CE 1F3FC 200D 2640 200D 27A1 FE0F ; minimally-qualified # 🧎🏼 E15.1 woman kneeling facing right: medium-light skin tone
1F9CE 1F3FC 200D 2640 FE0F 200D 27A1 ; minimally-qualified # 🧎🏼➡ E15.1 woman kneeling facing right: medium-light skin tone
1F9CE 1F3FC 200D 2640 200D 27A1 ; minimally-qualified # 🧎🏼➡ E15.1 woman kneeling facing right: medium-light skin tone
1F9CE 1F3FD 200D 2640 FE0F 200D 27A1 FE0F ; fully-qualified # 🧎🏽 E15.1 woman kneeling facing right: medium skin tone
1F9CE 1F3FD 200D 2640 200D 27A1 FE0F ; minimally-qualified # 🧎🏽 E15.1 woman kneeling facing right: medium skin tone
1F9CE 1F3FD 200D 2640 FE0F 200D 27A1 ; minimally-qualified # 🧎🏽➡ E15.1 woman kneeling facing right: medium skin tone
1F9CE 1F3FD 200D 2640 200D 27A1 ; minimally-qualified # 🧎🏽➡ E15.1 woman kneeling facing right: medium skin tone
1F9CE 1F3FE 200D 2640 FE0F 200D 27A1 FE0F ; fully-qualified # 🧎🏾 E15.1 woman kneeling facing right: medium-dark skin tone
1F9CE 1F3FE 200D 2640 200D 27A1 FE0F ; minimally-qualified # 🧎🏾 E15.1 woman kneeling facing right: medium-dark skin tone
1F9CE 1F3FE 200D 2640 FE0F 200D 27A1 ; minimally-qualified # 🧎🏾➡ E15.1 woman kneeling facing right: medium-dark skin tone
1F9CE 1F3FE 200D 2640 200D 27A1 ; minimally-qualified # 🧎🏾➡ E15.1 woman kneeling facing right: medium-dark skin tone
1F9CE 1F3FF 200D 2640 FE0F 200D 27A1 FE0F ; fully-qualified # 🧎🏿 E15.1 woman kneeling facing right: dark skin tone
1F9CE 1F3FF 200D 2640 200D 27A1 FE0F ; minimally-qualified # 🧎🏿 E15.1 woman kneeling facing right: dark skin tone
1F9CE 1F3FF 200D 2640 FE0F 200D 27A1 ; minimally-qualified # 🧎🏿➡ E15.1 woman kneeling facing right: dark skin tone
1F9CE 1F3FF 200D 2640 200D 27A1 ; minimally-qualified # 🧎🏿➡ E15.1 woman kneeling facing right: dark skin tone
1F9CE 200D 2642 FE0F 200D 27A1 FE0F ; fully-qualified # 🧎 E15.1 man kneeling facing right
1F9CE 200D 2642 200D 27A1 FE0F ; minimally-qualified # 🧎 E15.1 man kneeling facing right
1F9CE 200D 2642 FE0F 200D 27A1 ; minimally-qualified # 🧎➡ E15.1 man kneeling facing right
1F9CE 200D 2642 200D 27A1 ; minimally-qualified # 🧎➡ E15.1 man kneeling facing right
1F9CE 1F3FB 200D 2642 FE0F 200D 27A1 FE0F ; fully-qualified # 🧎🏻 E15.1 man kneeling facing right: light skin tone
1F9CE 1F3FB 200D 2642 200D 27A1 FE0F ; minimally-qualified # 🧎🏻 E15.1 man kneeling facing right: light skin tone
1F9CE 1F3FB 200D 2642 FE0F 200D 27A1 ; minimally-qualified # 🧎🏻➡ E15.1 man kneeling facing right: light skin tone
1F9CE 1F3FB 200D 2642 200D 27A1 ; minimally-qualified # 🧎🏻➡ E15.1 man kneeling facing right: light skin tone
1F9CE 1F3FC 200D 2642 FE0F 200D 27A1 FE0F ; fully-qualified # 🧎🏼 E15.1 man kneeling facing right: medium-light skin tone
1F9CE 1F3FC 200D 2642 200D 27A1 FE0F ; minimally-qualified # 🧎🏼 E15.1 man kneeling facing right: medium-light skin tone
1F9CE 1F3FC 200D 2642 FE0F 200D 27A1 ; minimally-qualified # 🧎🏼➡ E15.1 man kneeling facing right: medium-light skin tone
1F9CE 1F3FC 200D 2642 200D 27A1 ; minimally-qualified # 🧎🏼➡ E15.1 man kneeling facing right: medium-light skin tone
1F9CE 1F3FD 200D 2642 FE0F 200D 27A1 FE0F ; fully-qualified # 🧎🏽 E15.1 man kneeling facing right: medium skin tone
1F9CE 1F3FD 200D 2642 200D 27A1 FE0F ; minimally-qualified # 🧎🏽 E15.1 man kneeling facing right: medium skin tone
1F9CE 1F3FD 200D 2642 FE0F 200D 27A1 ; minimally-qualified # 🧎🏽➡ E15.1 man kneeling facing right: medium skin tone
1F9CE 1F3FD 200D 2642 200D 27A1 ; minimally-qualified # 🧎🏽➡ E15.1 man kneeling facing right: medium skin tone
1F9CE 1F3FE 200D 2642 FE0F 200D 27A1 FE0F ; fully-qualified # 🧎🏾 E15.1 man kneeling facing right: medium-dark skin tone
1F9CE 1F3FE 200D 2642 200D 27A1 FE0F ; minimally-qualified # 🧎🏾 E15.1 man kneeling facing right: medium-dark skin tone
1F9CE 1F3FE 200D 2642 FE0F 200D 27A1 ; minimally-qualified # 🧎🏾➡ E15.1 man kneeling facing right: medium-dark skin tone
1F9CE 1F3FE 200D 2642 200D 27A1 ; minimally-qualified # 🧎🏾➡ E15.1 man kneeling facing right: medium-dark skin tone
1F9CE 1F3FF 200D 2642 FE0F 200D 27A1 FE0F ; fully-qualified # 🧎🏿 E15.1 man kneeling facing right: dark skin tone
1F9CE 1F3FF 200D 2642 200D 27A1 FE0F ; minimally-qualified # 🧎🏿 E15.1 man kneeling facing right: dark skin tone
1F9CE 1F3FF 200D 2642 FE0F 200D 27A1 ; minimally-qualified # 🧎🏿➡ E15.1 man kneeling facing right: dark skin tone
1F9CE 1F3FF 200D 2642 200D 27A1 ; minimally-qualified # 🧎🏿➡ E15.1 man kneeling facing right: dark skin tone
1F9D1 200D 1F9AF ; fully-qualified # 🧑🦯 E12.1 person with white cane 1F9D1 200D 1F9AF ; fully-qualified # 🧑🦯 E12.1 person with white cane
1F9D1 1F3FB 200D 1F9AF ; fully-qualified # 🧑🏻🦯 E12.1 person with white cane: light skin tone 1F9D1 1F3FB 200D 1F9AF ; fully-qualified # 🧑🏻🦯 E12.1 person with white cane: light skin tone
1F9D1 1F3FC 200D 1F9AF ; fully-qualified # 🧑🏼🦯 E12.1 person with white cane: medium-light skin tone 1F9D1 1F3FC 200D 1F9AF ; fully-qualified # 🧑🏼🦯 E12.1 person with white cane: medium-light skin tone
1F9D1 1F3FD 200D 1F9AF ; fully-qualified # 🧑🏽🦯 E12.1 person with white cane: medium skin tone 1F9D1 1F3FD 200D 1F9AF ; fully-qualified # 🧑🏽🦯 E12.1 person with white cane: medium skin tone
1F9D1 1F3FE 200D 1F9AF ; fully-qualified # 🧑🏾🦯 E12.1 person with white cane: medium-dark skin tone 1F9D1 1F3FE 200D 1F9AF ; fully-qualified # 🧑🏾🦯 E12.1 person with white cane: medium-dark skin tone
1F9D1 1F3FF 200D 1F9AF ; fully-qualified # 🧑🏿🦯 E12.1 person with white cane: dark skin tone 1F9D1 1F3FF 200D 1F9AF ; fully-qualified # 🧑🏿🦯 E12.1 person with white cane: dark skin tone
1F9D1 200D 1F9AF 200D 27A1 FE0F ; fully-qualified # 🧑🦯 E15.1 person with white cane facing right
1F9D1 200D 1F9AF 200D 27A1 ; minimally-qualified # 🧑🦯➡ E15.1 person with white cane facing right
1F9D1 1F3FB 200D 1F9AF 200D 27A1 FE0F ; fully-qualified # 🧑🏻🦯 E15.1 person with white cane facing right: light skin tone
1F9D1 1F3FB 200D 1F9AF 200D 27A1 ; minimally-qualified # 🧑🏻🦯➡ E15.1 person with white cane facing right: light skin tone
1F9D1 1F3FC 200D 1F9AF 200D 27A1 FE0F ; fully-qualified # 🧑🏼🦯 E15.1 person with white cane facing right: medium-light skin tone
1F9D1 1F3FC 200D 1F9AF 200D 27A1 ; minimally-qualified # 🧑🏼🦯➡ E15.1 person with white cane facing right: medium-light skin tone
1F9D1 1F3FD 200D 1F9AF 200D 27A1 FE0F ; fully-qualified # 🧑🏽🦯 E15.1 person with white cane facing right: medium skin tone
1F9D1 1F3FD 200D 1F9AF 200D 27A1 ; minimally-qualified # 🧑🏽🦯➡ E15.1 person with white cane facing right: medium skin tone
1F9D1 1F3FE 200D 1F9AF 200D 27A1 FE0F ; fully-qualified # 🧑🏾🦯 E15.1 person with white cane facing right: medium-dark skin tone
1F9D1 1F3FE 200D 1F9AF 200D 27A1 ; minimally-qualified # 🧑🏾🦯➡ E15.1 person with white cane facing right: medium-dark skin tone
1F9D1 1F3FF 200D 1F9AF 200D 27A1 FE0F ; fully-qualified # 🧑🏿🦯 E15.1 person with white cane facing right: dark skin tone
1F9D1 1F3FF 200D 1F9AF 200D 27A1 ; minimally-qualified # 🧑🏿🦯➡ E15.1 person with white cane facing right: dark skin tone
1F468 200D 1F9AF ; fully-qualified # 👨🦯 E12.0 man with white cane 1F468 200D 1F9AF ; fully-qualified # 👨🦯 E12.0 man with white cane
1F468 1F3FB 200D 1F9AF ; fully-qualified # 👨🏻🦯 E12.0 man with white cane: light skin tone 1F468 1F3FB 200D 1F9AF ; fully-qualified # 👨🏻🦯 E12.0 man with white cane: light skin tone
1F468 1F3FC 200D 1F9AF ; fully-qualified # 👨🏼🦯 E12.0 man with white cane: medium-light skin tone 1F468 1F3FC 200D 1F9AF ; fully-qualified # 👨🏼🦯 E12.0 man with white cane: medium-light skin tone
1F468 1F3FD 200D 1F9AF ; fully-qualified # 👨🏽🦯 E12.0 man with white cane: medium skin tone 1F468 1F3FD 200D 1F9AF ; fully-qualified # 👨🏽🦯 E12.0 man with white cane: medium skin tone
1F468 1F3FE 200D 1F9AF ; fully-qualified # 👨🏾🦯 E12.0 man with white cane: medium-dark skin tone 1F468 1F3FE 200D 1F9AF ; fully-qualified # 👨🏾🦯 E12.0 man with white cane: medium-dark skin tone
1F468 1F3FF 200D 1F9AF ; fully-qualified # 👨🏿🦯 E12.0 man with white cane: dark skin tone 1F468 1F3FF 200D 1F9AF ; fully-qualified # 👨🏿🦯 E12.0 man with white cane: dark skin tone
1F468 200D 1F9AF 200D 27A1 FE0F ; fully-qualified # 👨🦯 E15.1 man with white cane facing right
1F468 200D 1F9AF 200D 27A1 ; minimally-qualified # 👨🦯➡ E15.1 man with white cane facing right
1F468 1F3FB 200D 1F9AF 200D 27A1 FE0F ; fully-qualified # 👨🏻🦯 E15.1 man with white cane facing right: light skin tone
1F468 1F3FB 200D 1F9AF 200D 27A1 ; minimally-qualified # 👨🏻🦯➡ E15.1 man with white cane facing right: light skin tone
1F468 1F3FC 200D 1F9AF 200D 27A1 FE0F ; fully-qualified # 👨🏼🦯 E15.1 man with white cane facing right: medium-light skin tone
1F468 1F3FC 200D 1F9AF 200D 27A1 ; minimally-qualified # 👨🏼🦯➡ E15.1 man with white cane facing right: medium-light skin tone
1F468 1F3FD 200D 1F9AF 200D 27A1 FE0F ; fully-qualified # 👨🏽🦯 E15.1 man with white cane facing right: medium skin tone
1F468 1F3FD 200D 1F9AF 200D 27A1 ; minimally-qualified # 👨🏽🦯➡ E15.1 man with white cane facing right: medium skin tone
1F468 1F3FE 200D 1F9AF 200D 27A1 FE0F ; fully-qualified # 👨🏾🦯 E15.1 man with white cane facing right: medium-dark skin tone
1F468 1F3FE 200D 1F9AF 200D 27A1 ; minimally-qualified # 👨🏾🦯➡ E15.1 man with white cane facing right: medium-dark skin tone
1F468 1F3FF 200D 1F9AF 200D 27A1 FE0F ; fully-qualified # 👨🏿🦯 E15.1 man with white cane facing right: dark skin tone
1F468 1F3FF 200D 1F9AF 200D 27A1 ; minimally-qualified # 👨🏿🦯➡ E15.1 man with white cane facing right: dark skin tone
1F469 200D 1F9AF ; fully-qualified # 👩🦯 E12.0 woman with white cane 1F469 200D 1F9AF ; fully-qualified # 👩🦯 E12.0 woman with white cane
1F469 1F3FB 200D 1F9AF ; fully-qualified # 👩🏻🦯 E12.0 woman with white cane: light skin tone 1F469 1F3FB 200D 1F9AF ; fully-qualified # 👩🏻🦯 E12.0 woman with white cane: light skin tone
1F469 1F3FC 200D 1F9AF ; fully-qualified # 👩🏼🦯 E12.0 woman with white cane: medium-light skin tone 1F469 1F3FC 200D 1F9AF ; fully-qualified # 👩🏼🦯 E12.0 woman with white cane: medium-light skin tone
1F469 1F3FD 200D 1F9AF ; fully-qualified # 👩🏽🦯 E12.0 woman with white cane: medium skin tone 1F469 1F3FD 200D 1F9AF ; fully-qualified # 👩🏽🦯 E12.0 woman with white cane: medium skin tone
1F469 1F3FE 200D 1F9AF ; fully-qualified # 👩🏾🦯 E12.0 woman with white cane: medium-dark skin tone 1F469 1F3FE 200D 1F9AF ; fully-qualified # 👩🏾🦯 E12.0 woman with white cane: medium-dark skin tone
1F469 1F3FF 200D 1F9AF ; fully-qualified # 👩🏿🦯 E12.0 woman with white cane: dark skin tone 1F469 1F3FF 200D 1F9AF ; fully-qualified # 👩🏿🦯 E12.0 woman with white cane: dark skin tone
1F469 200D 1F9AF 200D 27A1 FE0F ; fully-qualified # 👩🦯 E15.1 woman with white cane facing right
1F469 200D 1F9AF 200D 27A1 ; minimally-qualified # 👩🦯➡ E15.1 woman with white cane facing right
1F469 1F3FB 200D 1F9AF 200D 27A1 FE0F ; fully-qualified # 👩🏻🦯 E15.1 woman with white cane facing right: light skin tone
1F469 1F3FB 200D 1F9AF 200D 27A1 ; minimally-qualified # 👩🏻🦯➡ E15.1 woman with white cane facing right: light skin tone
1F469 1F3FC 200D 1F9AF 200D 27A1 FE0F ; fully-qualified # 👩🏼🦯 E15.1 woman with white cane facing right: medium-light skin tone
1F469 1F3FC 200D 1F9AF 200D 27A1 ; minimally-qualified # 👩🏼🦯➡ E15.1 woman with white cane facing right: medium-light skin tone
1F469 1F3FD 200D 1F9AF 200D 27A1 FE0F ; fully-qualified # 👩🏽🦯 E15.1 woman with white cane facing right: medium skin tone
1F469 1F3FD 200D 1F9AF 200D 27A1 ; minimally-qualified # 👩🏽🦯➡ E15.1 woman with white cane facing right: medium skin tone
1F469 1F3FE 200D 1F9AF 200D 27A1 FE0F ; fully-qualified # 👩🏾🦯 E15.1 woman with white cane facing right: medium-dark skin tone
1F469 1F3FE 200D 1F9AF 200D 27A1 ; minimally-qualified # 👩🏾🦯➡ E15.1 woman with white cane facing right: medium-dark skin tone
1F469 1F3FF 200D 1F9AF 200D 27A1 FE0F ; fully-qualified # 👩🏿🦯 E15.1 woman with white cane facing right: dark skin tone
1F469 1F3FF 200D 1F9AF 200D 27A1 ; minimally-qualified # 👩🏿🦯➡ E15.1 woman with white cane facing right: dark skin tone
1F9D1 200D 1F9BC ; fully-qualified # 🧑🦼 E12.1 person in motorized wheelchair 1F9D1 200D 1F9BC ; fully-qualified # 🧑🦼 E12.1 person in motorized wheelchair
1F9D1 1F3FB 200D 1F9BC ; fully-qualified # 🧑🏻🦼 E12.1 person in motorized wheelchair: light skin tone 1F9D1 1F3FB 200D 1F9BC ; fully-qualified # 🧑🏻🦼 E12.1 person in motorized wheelchair: light skin tone
1F9D1 1F3FC 200D 1F9BC ; fully-qualified # 🧑🏼🦼 E12.1 person in motorized wheelchair: medium-light skin tone 1F9D1 1F3FC 200D 1F9BC ; fully-qualified # 🧑🏼🦼 E12.1 person in motorized wheelchair: medium-light skin tone
1F9D1 1F3FD 200D 1F9BC ; fully-qualified # 🧑🏽🦼 E12.1 person in motorized wheelchair: medium skin tone 1F9D1 1F3FD 200D 1F9BC ; fully-qualified # 🧑🏽🦼 E12.1 person in motorized wheelchair: medium skin tone
1F9D1 1F3FE 200D 1F9BC ; fully-qualified # 🧑🏾🦼 E12.1 person in motorized wheelchair: medium-dark skin tone 1F9D1 1F3FE 200D 1F9BC ; fully-qualified # 🧑🏾🦼 E12.1 person in motorized wheelchair: medium-dark skin tone
1F9D1 1F3FF 200D 1F9BC ; fully-qualified # 🧑🏿🦼 E12.1 person in motorized wheelchair: dark skin tone 1F9D1 1F3FF 200D 1F9BC ; fully-qualified # 🧑🏿🦼 E12.1 person in motorized wheelchair: dark skin tone
1F9D1 200D 1F9BC 200D 27A1 FE0F ; fully-qualified # 🧑🦼 E15.1 person in motorized wheelchair facing right
1F9D1 200D 1F9BC 200D 27A1 ; minimally-qualified # 🧑🦼➡ E15.1 person in motorized wheelchair facing right
1F9D1 1F3FB 200D 1F9BC 200D 27A1 FE0F ; fully-qualified # 🧑🏻🦼 E15.1 person in motorized wheelchair facing right: light skin tone
1F9D1 1F3FB 200D 1F9BC 200D 27A1 ; minimally-qualified # 🧑🏻🦼➡ E15.1 person in motorized wheelchair facing right: light skin tone
1F9D1 1F3FC 200D 1F9BC 200D 27A1 FE0F ; fully-qualified # 🧑🏼🦼 E15.1 person in motorized wheelchair facing right: medium-light skin tone
1F9D1 1F3FC 200D 1F9BC 200D 27A1 ; minimally-qualified # 🧑🏼🦼➡ E15.1 person in motorized wheelchair facing right: medium-light skin tone
1F9D1 1F3FD 200D 1F9BC 200D 27A1 FE0F ; fully-qualified # 🧑🏽🦼 E15.1 person in motorized wheelchair facing right: medium skin tone
1F9D1 1F3FD 200D 1F9BC 200D 27A1 ; minimally-qualified # 🧑🏽🦼➡ E15.1 person in motorized wheelchair facing right: medium skin tone
1F9D1 1F3FE 200D 1F9BC 200D 27A1 FE0F ; fully-qualified # 🧑🏾🦼 E15.1 person in motorized wheelchair facing right: medium-dark skin tone
1F9D1 1F3FE 200D 1F9BC 200D 27A1 ; minimally-qualified # 🧑🏾🦼➡ E15.1 person in motorized wheelchair facing right: medium-dark skin tone
1F9D1 1F3FF 200D 1F9BC 200D 27A1 FE0F ; fully-qualified # 🧑🏿🦼 E15.1 person in motorized wheelchair facing right: dark skin tone
1F9D1 1F3FF 200D 1F9BC 200D 27A1 ; minimally-qualified # 🧑🏿🦼➡ E15.1 person in motorized wheelchair facing right: dark skin tone
1F468 200D 1F9BC ; fully-qualified # 👨🦼 E12.0 man in motorized wheelchair 1F468 200D 1F9BC ; fully-qualified # 👨🦼 E12.0 man in motorized wheelchair
1F468 1F3FB 200D 1F9BC ; fully-qualified # 👨🏻🦼 E12.0 man in motorized wheelchair: light skin tone 1F468 1F3FB 200D 1F9BC ; fully-qualified # 👨🏻🦼 E12.0 man in motorized wheelchair: light skin tone
1F468 1F3FC 200D 1F9BC ; fully-qualified # 👨🏼🦼 E12.0 man in motorized wheelchair: medium-light skin tone 1F468 1F3FC 200D 1F9BC ; fully-qualified # 👨🏼🦼 E12.0 man in motorized wheelchair: medium-light skin tone
1F468 1F3FD 200D 1F9BC ; fully-qualified # 👨🏽🦼 E12.0 man in motorized wheelchair: medium skin tone 1F468 1F3FD 200D 1F9BC ; fully-qualified # 👨🏽🦼 E12.0 man in motorized wheelchair: medium skin tone
1F468 1F3FE 200D 1F9BC ; fully-qualified # 👨🏾🦼 E12.0 man in motorized wheelchair: medium-dark skin tone 1F468 1F3FE 200D 1F9BC ; fully-qualified # 👨🏾🦼 E12.0 man in motorized wheelchair: medium-dark skin tone
1F468 1F3FF 200D 1F9BC ; fully-qualified # 👨🏿🦼 E12.0 man in motorized wheelchair: dark skin tone 1F468 1F3FF 200D 1F9BC ; fully-qualified # 👨🏿🦼 E12.0 man in motorized wheelchair: dark skin tone
1F468 200D 1F9BC 200D 27A1 FE0F ; fully-qualified # 👨🦼 E15.1 man in motorized wheelchair facing right
1F468 200D 1F9BC 200D 27A1 ; minimally-qualified # 👨🦼➡ E15.1 man in motorized wheelchair facing right
1F468 1F3FB 200D 1F9BC 200D 27A1 FE0F ; fully-qualified # 👨🏻🦼 E15.1 man in motorized wheelchair facing right: light skin tone
1F468 1F3FB 200D 1F9BC 200D 27A1 ; minimally-qualified # 👨🏻🦼➡ E15.1 man in motorized wheelchair facing right: light skin tone
1F468 1F3FC 200D 1F9BC 200D 27A1 FE0F ; fully-qualified # 👨🏼🦼 E15.1 man in motorized wheelchair facing right: medium-light skin tone
1F468 1F3FC 200D 1F9BC 200D 27A1 ; minimally-qualified # 👨🏼🦼➡ E15.1 man in motorized wheelchair facing right: medium-light skin tone
1F468 1F3FD 200D 1F9BC 200D 27A1 FE0F ; fully-qualified # 👨🏽🦼 E15.1 man in motorized wheelchair facing right: medium skin tone
1F468 1F3FD 200D 1F9BC 200D 27A1 ; minimally-qualified # 👨🏽🦼➡ E15.1 man in motorized wheelchair facing right: medium skin tone
1F468 1F3FE 200D 1F9BC 200D 27A1 FE0F ; fully-qualified # 👨🏾🦼 E15.1 man in motorized wheelchair facing right: medium-dark skin tone
1F468 1F3FE 200D 1F9BC 200D 27A1 ; minimally-qualified # 👨🏾🦼➡ E15.1 man in motorized wheelchair facing right: medium-dark skin tone
1F468 1F3FF 200D 1F9BC 200D 27A1 FE0F ; fully-qualified # 👨🏿🦼 E15.1 man in motorized wheelchair facing right: dark skin tone
1F468 1F3FF 200D 1F9BC 200D 27A1 ; minimally-qualified # 👨🏿🦼➡ E15.1 man in motorized wheelchair facing right: dark skin tone
1F469 200D 1F9BC ; fully-qualified # 👩🦼 E12.0 woman in motorized wheelchair 1F469 200D 1F9BC ; fully-qualified # 👩🦼 E12.0 woman in motorized wheelchair
1F469 1F3FB 200D 1F9BC ; fully-qualified # 👩🏻🦼 E12.0 woman in motorized wheelchair: light skin tone 1F469 1F3FB 200D 1F9BC ; fully-qualified # 👩🏻🦼 E12.0 woman in motorized wheelchair: light skin tone
1F469 1F3FC 200D 1F9BC ; fully-qualified # 👩🏼🦼 E12.0 woman in motorized wheelchair: medium-light skin tone 1F469 1F3FC 200D 1F9BC ; fully-qualified # 👩🏼🦼 E12.0 woman in motorized wheelchair: medium-light skin tone
1F469 1F3FD 200D 1F9BC ; fully-qualified # 👩🏽🦼 E12.0 woman in motorized wheelchair: medium skin tone 1F469 1F3FD 200D 1F9BC ; fully-qualified # 👩🏽🦼 E12.0 woman in motorized wheelchair: medium skin tone
1F469 1F3FE 200D 1F9BC ; fully-qualified # 👩🏾🦼 E12.0 woman in motorized wheelchair: medium-dark skin tone 1F469 1F3FE 200D 1F9BC ; fully-qualified # 👩🏾🦼 E12.0 woman in motorized wheelchair: medium-dark skin tone
1F469 1F3FF 200D 1F9BC ; fully-qualified # 👩🏿🦼 E12.0 woman in motorized wheelchair: dark skin tone 1F469 1F3FF 200D 1F9BC ; fully-qualified # 👩🏿🦼 E12.0 woman in motorized wheelchair: dark skin tone
1F469 200D 1F9BC 200D 27A1 FE0F ; fully-qualified # 👩🦼 E15.1 woman in motorized wheelchair facing right
1F469 200D 1F9BC 200D 27A1 ; minimally-qualified # 👩🦼➡ E15.1 woman in motorized wheelchair facing right
1F469 1F3FB 200D 1F9BC 200D 27A1 FE0F ; fully-qualified # 👩🏻🦼 E15.1 woman in motorized wheelchair facing right: light skin tone
1F469 1F3FB 200D 1F9BC 200D 27A1 ; minimally-qualified # 👩🏻🦼➡ E15.1 woman in motorized wheelchair facing right: light skin tone
1F469 1F3FC 200D 1F9BC 200D 27A1 FE0F ; fully-qualified # 👩🏼🦼 E15.1 woman in motorized wheelchair facing right: medium-light skin tone
1F469 1F3FC 200D 1F9BC 200D 27A1 ; minimally-qualified # 👩🏼🦼➡ E15.1 woman in motorized wheelchair facing right: medium-light skin tone
1F469 1F3FD 200D 1F9BC 200D 27A1 FE0F ; fully-qualified # 👩🏽🦼 E15.1 woman in motorized wheelchair facing right: medium skin tone
1F469 1F3FD 200D 1F9BC 200D 27A1 ; minimally-qualified # 👩🏽🦼➡ E15.1 woman in motorized wheelchair facing right: medium skin tone
1F469 1F3FE 200D 1F9BC 200D 27A1 FE0F ; fully-qualified # 👩🏾🦼 E15.1 woman in motorized wheelchair facing right: medium-dark skin tone
1F469 1F3FE 200D 1F9BC 200D 27A1 ; minimally-qualified # 👩🏾🦼➡ E15.1 woman in motorized wheelchair facing right: medium-dark skin tone
1F469 1F3FF 200D 1F9BC 200D 27A1 FE0F ; fully-qualified # 👩🏿🦼 E15.1 woman in motorized wheelchair facing right: dark skin tone
1F469 1F3FF 200D 1F9BC 200D 27A1 ; minimally-qualified # 👩🏿🦼➡ E15.1 woman in motorized wheelchair facing right: dark skin tone
1F9D1 200D 1F9BD ; fully-qualified # 🧑🦽 E12.1 person in manual wheelchair 1F9D1 200D 1F9BD ; fully-qualified # 🧑🦽 E12.1 person in manual wheelchair
1F9D1 1F3FB 200D 1F9BD ; fully-qualified # 🧑🏻🦽 E12.1 person in manual wheelchair: light skin tone 1F9D1 1F3FB 200D 1F9BD ; fully-qualified # 🧑🏻🦽 E12.1 person in manual wheelchair: light skin tone
1F9D1 1F3FC 200D 1F9BD ; fully-qualified # 🧑🏼🦽 E12.1 person in manual wheelchair: medium-light skin tone 1F9D1 1F3FC 200D 1F9BD ; fully-qualified # 🧑🏼🦽 E12.1 person in manual wheelchair: medium-light skin tone
1F9D1 1F3FD 200D 1F9BD ; fully-qualified # 🧑🏽🦽 E12.1 person in manual wheelchair: medium skin tone 1F9D1 1F3FD 200D 1F9BD ; fully-qualified # 🧑🏽🦽 E12.1 person in manual wheelchair: medium skin tone
1F9D1 1F3FE 200D 1F9BD ; fully-qualified # 🧑🏾🦽 E12.1 person in manual wheelchair: medium-dark skin tone 1F9D1 1F3FE 200D 1F9BD ; fully-qualified # 🧑🏾🦽 E12.1 person in manual wheelchair: medium-dark skin tone
1F9D1 1F3FF 200D 1F9BD ; fully-qualified # 🧑🏿🦽 E12.1 person in manual wheelchair: dark skin tone 1F9D1 1F3FF 200D 1F9BD ; fully-qualified # 🧑🏿🦽 E12.1 person in manual wheelchair: dark skin tone
1F9D1 200D 1F9BD 200D 27A1 FE0F ; fully-qualified # 🧑🦽 E15.1 person in manual wheelchair facing right
1F9D1 200D 1F9BD 200D 27A1 ; minimally-qualified # 🧑🦽➡ E15.1 person in manual wheelchair facing right
1F9D1 1F3FB 200D 1F9BD 200D 27A1 FE0F ; fully-qualified # 🧑🏻🦽 E15.1 person in manual wheelchair facing right: light skin tone
1F9D1 1F3FB 200D 1F9BD 200D 27A1 ; minimally-qualified # 🧑🏻🦽➡ E15.1 person in manual wheelchair facing right: light skin tone
1F9D1 1F3FC 200D 1F9BD 200D 27A1 FE0F ; fully-qualified # 🧑🏼🦽 E15.1 person in manual wheelchair facing right: medium-light skin tone
1F9D1 1F3FC 200D 1F9BD 200D 27A1 ; minimally-qualified # 🧑🏼🦽➡ E15.1 person in manual wheelchair facing right: medium-light skin tone
1F9D1 1F3FD 200D 1F9BD 200D 27A1 FE0F ; fully-qualified # 🧑🏽🦽 E15.1 person in manual wheelchair facing right: medium skin tone
1F9D1 1F3FD 200D 1F9BD 200D 27A1 ; minimally-qualified # 🧑🏽🦽➡ E15.1 person in manual wheelchair facing right: medium skin tone
1F9D1 1F3FE 200D 1F9BD 200D 27A1 FE0F ; fully-qualified # 🧑🏾🦽 E15.1 person in manual wheelchair facing right: medium-dark skin tone
1F9D1 1F3FE 200D 1F9BD 200D 27A1 ; minimally-qualified # 🧑🏾🦽➡ E15.1 person in manual wheelchair facing right: medium-dark skin tone
1F9D1 1F3FF 200D 1F9BD 200D 27A1 FE0F ; fully-qualified # 🧑🏿🦽 E15.1 person in manual wheelchair facing right: dark skin tone
1F9D1 1F3FF 200D 1F9BD 200D 27A1 ; minimally-qualified # 🧑🏿🦽➡ E15.1 person in manual wheelchair facing right: dark skin tone
1F468 200D 1F9BD ; fully-qualified # 👨🦽 E12.0 man in manual wheelchair 1F468 200D 1F9BD ; fully-qualified # 👨🦽 E12.0 man in manual wheelchair
1F468 1F3FB 200D 1F9BD ; fully-qualified # 👨🏻🦽 E12.0 man in manual wheelchair: light skin tone 1F468 1F3FB 200D 1F9BD ; fully-qualified # 👨🏻🦽 E12.0 man in manual wheelchair: light skin tone
1F468 1F3FC 200D 1F9BD ; fully-qualified # 👨🏼🦽 E12.0 man in manual wheelchair: medium-light skin tone 1F468 1F3FC 200D 1F9BD ; fully-qualified # 👨🏼🦽 E12.0 man in manual wheelchair: medium-light skin tone
1F468 1F3FD 200D 1F9BD ; fully-qualified # 👨🏽🦽 E12.0 man in manual wheelchair: medium skin tone 1F468 1F3FD 200D 1F9BD ; fully-qualified # 👨🏽🦽 E12.0 man in manual wheelchair: medium skin tone
1F468 1F3FE 200D 1F9BD ; fully-qualified # 👨🏾🦽 E12.0 man in manual wheelchair: medium-dark skin tone 1F468 1F3FE 200D 1F9BD ; fully-qualified # 👨🏾🦽 E12.0 man in manual wheelchair: medium-dark skin tone
1F468 1F3FF 200D 1F9BD ; fully-qualified # 👨🏿🦽 E12.0 man in manual wheelchair: dark skin tone 1F468 1F3FF 200D 1F9BD ; fully-qualified # 👨🏿🦽 E12.0 man in manual wheelchair: dark skin tone
1F468 200D 1F9BD 200D 27A1 FE0F ; fully-qualified # 👨🦽 E15.1 man in manual wheelchair facing right
1F468 200D 1F9BD 200D 27A1 ; minimally-qualified # 👨🦽➡ E15.1 man in manual wheelchair facing right
1F468 1F3FB 200D 1F9BD 200D 27A1 FE0F ; fully-qualified # 👨🏻🦽 E15.1 man in manual wheelchair facing right: light skin tone
1F468 1F3FB 200D 1F9BD 200D 27A1 ; minimally-qualified # 👨🏻🦽➡ E15.1 man in manual wheelchair facing right: light skin tone
1F468 1F3FC 200D 1F9BD 200D 27A1 FE0F ; fully-qualified # 👨🏼🦽 E15.1 man in manual wheelchair facing right: medium-light skin tone
1F468 1F3FC 200D 1F9BD 200D 27A1 ; minimally-qualified # 👨🏼🦽➡ E15.1 man in manual wheelchair facing right: medium-light skin tone
1F468 1F3FD 200D 1F9BD 200D 27A1 FE0F ; fully-qualified # 👨🏽🦽 E15.1 man in manual wheelchair facing right: medium skin tone
1F468 1F3FD 200D 1F9BD 200D 27A1 ; minimally-qualified # 👨🏽🦽➡ E15.1 man in manual wheelchair facing right: medium skin tone
1F468 1F3FE 200D 1F9BD 200D 27A1 FE0F ; fully-qualified # 👨🏾🦽 E15.1 man in manual wheelchair facing right: medium-dark skin tone
1F468 1F3FE 200D 1F9BD 200D 27A1 ; minimally-qualified # 👨🏾🦽➡ E15.1 man in manual wheelchair facing right: medium-dark skin tone
1F468 1F3FF 200D 1F9BD 200D 27A1 FE0F ; fully-qualified # 👨🏿🦽 E15.1 man in manual wheelchair facing right: dark skin tone
1F468 1F3FF 200D 1F9BD 200D 27A1 ; minimally-qualified # 👨🏿🦽➡ E15.1 man in manual wheelchair facing right: dark skin tone
1F469 200D 1F9BD ; fully-qualified # 👩🦽 E12.0 woman in manual wheelchair 1F469 200D 1F9BD ; fully-qualified # 👩🦽 E12.0 woman in manual wheelchair
1F469 1F3FB 200D 1F9BD ; fully-qualified # 👩🏻🦽 E12.0 woman in manual wheelchair: light skin tone 1F469 1F3FB 200D 1F9BD ; fully-qualified # 👩🏻🦽 E12.0 woman in manual wheelchair: light skin tone
1F469 1F3FC 200D 1F9BD ; fully-qualified # 👩🏼🦽 E12.0 woman in manual wheelchair: medium-light skin tone 1F469 1F3FC 200D 1F9BD ; fully-qualified # 👩🏼🦽 E12.0 woman in manual wheelchair: medium-light skin tone
1F469 1F3FD 200D 1F9BD ; fully-qualified # 👩🏽🦽 E12.0 woman in manual wheelchair: medium skin tone 1F469 1F3FD 200D 1F9BD ; fully-qualified # 👩🏽🦽 E12.0 woman in manual wheelchair: medium skin tone
1F469 1F3FE 200D 1F9BD ; fully-qualified # 👩🏾🦽 E12.0 woman in manual wheelchair: medium-dark skin tone 1F469 1F3FE 200D 1F9BD ; fully-qualified # 👩🏾🦽 E12.0 woman in manual wheelchair: medium-dark skin tone
1F469 1F3FF 200D 1F9BD ; fully-qualified # 👩🏿🦽 E12.0 woman in manual wheelchair: dark skin tone 1F469 1F3FF 200D 1F9BD ; fully-qualified # 👩🏿🦽 E12.0 woman in manual wheelchair: dark skin tone
1F469 200D 1F9BD 200D 27A1 FE0F ; fully-qualified # 👩🦽 E15.1 woman in manual wheelchair facing right
1F469 200D 1F9BD 200D 27A1 ; minimally-qualified # 👩🦽➡ E15.1 woman in manual wheelchair facing right
1F469 1F3FB 200D 1F9BD 200D 27A1 FE0F ; fully-qualified # 👩🏻🦽 E15.1 woman in manual wheelchair facing right: light skin tone
1F469 1F3FB 200D 1F9BD 200D 27A1 ; minimally-qualified # 👩🏻🦽➡ E15.1 woman in manual wheelchair facing right: light skin tone
1F469 1F3FC 200D 1F9BD 200D 27A1 FE0F ; fully-qualified # 👩🏼🦽 E15.1 woman in manual wheelchair facing right: medium-light skin tone
1F469 1F3FC 200D 1F9BD 200D 27A1 ; minimally-qualified # 👩🏼🦽➡ E15.1 woman in manual wheelchair facing right: medium-light skin tone
1F469 1F3FD 200D 1F9BD 200D 27A1 FE0F ; fully-qualified # 👩🏽🦽 E15.1 woman in manual wheelchair facing right: medium skin tone
1F469 1F3FD 200D 1F9BD 200D 27A1 ; minimally-qualified # 👩🏽🦽➡ E15.1 woman in manual wheelchair facing right: medium skin tone
1F469 1F3FE 200D 1F9BD 200D 27A1 FE0F ; fully-qualified # 👩🏾🦽 E15.1 woman in manual wheelchair facing right: medium-dark skin tone
1F469 1F3FE 200D 1F9BD 200D 27A1 ; minimally-qualified # 👩🏾🦽➡ E15.1 woman in manual wheelchair facing right: medium-dark skin tone
1F469 1F3FF 200D 1F9BD 200D 27A1 FE0F ; fully-qualified # 👩🏿🦽 E15.1 woman in manual wheelchair facing right: dark skin tone
1F469 1F3FF 200D 1F9BD 200D 27A1 ; minimally-qualified # 👩🏿🦽➡ E15.1 woman in manual wheelchair facing right: dark skin tone
1F3C3 ; fully-qualified # 🏃 E0.6 person running 1F3C3 ; fully-qualified # 🏃 E0.6 person running
1F3C3 1F3FB ; fully-qualified # 🏃🏻 E1.0 person running: light skin tone 1F3C3 1F3FB ; fully-qualified # 🏃🏻 E1.0 person running: light skin tone
1F3C3 1F3FC ; fully-qualified # 🏃🏼 E1.0 person running: medium-light skin tone 1F3C3 1F3FC ; fully-qualified # 🏃🏼 E1.0 person running: medium-light skin tone
@ -2209,6 +2441,66 @@
1F3C3 1F3FE 200D 2640 ; minimally-qualified # 🏃🏾♀ E4.0 woman running: medium-dark skin tone 1F3C3 1F3FE 200D 2640 ; minimally-qualified # 🏃🏾♀ E4.0 woman running: medium-dark skin tone
1F3C3 1F3FF 200D 2640 FE0F ; fully-qualified # 🏃🏿 E4.0 woman running: dark skin tone 1F3C3 1F3FF 200D 2640 FE0F ; fully-qualified # 🏃🏿 E4.0 woman running: dark skin tone
1F3C3 1F3FF 200D 2640 ; minimally-qualified # 🏃🏿♀ E4.0 woman running: dark skin tone 1F3C3 1F3FF 200D 2640 ; minimally-qualified # 🏃🏿♀ E4.0 woman running: dark skin tone
1F3C3 200D 27A1 FE0F ; fully-qualified # 🏃 E15.1 person running facing right
1F3C3 200D 27A1 ; minimally-qualified # 🏃➡ E15.1 person running facing right
1F3C3 1F3FB 200D 27A1 FE0F ; fully-qualified # 🏃🏻 E15.1 person running facing right: light skin tone
1F3C3 1F3FB 200D 27A1 ; minimally-qualified # 🏃🏻➡ E15.1 person running facing right: light skin tone
1F3C3 1F3FC 200D 27A1 FE0F ; fully-qualified # 🏃🏼 E15.1 person running facing right: medium-light skin tone
1F3C3 1F3FC 200D 27A1 ; minimally-qualified # 🏃🏼➡ E15.1 person running facing right: medium-light skin tone
1F3C3 1F3FD 200D 27A1 FE0F ; fully-qualified # 🏃🏽 E15.1 person running facing right: medium skin tone
1F3C3 1F3FD 200D 27A1 ; minimally-qualified # 🏃🏽➡ E15.1 person running facing right: medium skin tone
1F3C3 1F3FE 200D 27A1 FE0F ; fully-qualified # 🏃🏾 E15.1 person running facing right: medium-dark skin tone
1F3C3 1F3FE 200D 27A1 ; minimally-qualified # 🏃🏾➡ E15.1 person running facing right: medium-dark skin tone
1F3C3 1F3FF 200D 27A1 FE0F ; fully-qualified # 🏃🏿 E15.1 person running facing right: dark skin tone
1F3C3 1F3FF 200D 27A1 ; minimally-qualified # 🏃🏿➡ E15.1 person running facing right: dark skin tone
1F3C3 200D 2640 FE0F 200D 27A1 FE0F ; fully-qualified # 🏃 E15.1 woman running facing right
1F3C3 200D 2640 200D 27A1 FE0F ; minimally-qualified # 🏃 E15.1 woman running facing right
1F3C3 200D 2640 FE0F 200D 27A1 ; minimally-qualified # 🏃➡ E15.1 woman running facing right
1F3C3 200D 2640 200D 27A1 ; minimally-qualified # 🏃➡ E15.1 woman running facing right
1F3C3 1F3FB 200D 2640 FE0F 200D 27A1 FE0F ; fully-qualified # 🏃🏻 E15.1 woman running facing right: light skin tone
1F3C3 1F3FB 200D 2640 200D 27A1 FE0F ; minimally-qualified # 🏃🏻 E15.1 woman running facing right: light skin tone
1F3C3 1F3FB 200D 2640 FE0F 200D 27A1 ; minimally-qualified # 🏃🏻➡ E15.1 woman running facing right: light skin tone
1F3C3 1F3FB 200D 2640 200D 27A1 ; minimally-qualified # 🏃🏻➡ E15.1 woman running facing right: light skin tone
1F3C3 1F3FC 200D 2640 FE0F 200D 27A1 FE0F ; fully-qualified # 🏃🏼 E15.1 woman running facing right: medium-light skin tone
1F3C3 1F3FC 200D 2640 200D 27A1 FE0F ; minimally-qualified # 🏃🏼 E15.1 woman running facing right: medium-light skin tone
1F3C3 1F3FC 200D 2640 FE0F 200D 27A1 ; minimally-qualified # 🏃🏼➡ E15.1 woman running facing right: medium-light skin tone
1F3C3 1F3FC 200D 2640 200D 27A1 ; minimally-qualified # 🏃🏼➡ E15.1 woman running facing right: medium-light skin tone
1F3C3 1F3FD 200D 2640 FE0F 200D 27A1 FE0F ; fully-qualified # 🏃🏽 E15.1 woman running facing right: medium skin tone
1F3C3 1F3FD 200D 2640 200D 27A1 FE0F ; minimally-qualified # 🏃🏽 E15.1 woman running facing right: medium skin tone
1F3C3 1F3FD 200D 2640 FE0F 200D 27A1 ; minimally-qualified # 🏃🏽➡ E15.1 woman running facing right: medium skin tone
1F3C3 1F3FD 200D 2640 200D 27A1 ; minimally-qualified # 🏃🏽➡ E15.1 woman running facing right: medium skin tone
1F3C3 1F3FE 200D 2640 FE0F 200D 27A1 FE0F ; fully-qualified # 🏃🏾 E15.1 woman running facing right: medium-dark skin tone
1F3C3 1F3FE 200D 2640 200D 27A1 FE0F ; minimally-qualified # 🏃🏾 E15.1 woman running facing right: medium-dark skin tone
1F3C3 1F3FE 200D 2640 FE0F 200D 27A1 ; minimally-qualified # 🏃🏾➡ E15.1 woman running facing right: medium-dark skin tone
1F3C3 1F3FE 200D 2640 200D 27A1 ; minimally-qualified # 🏃🏾➡ E15.1 woman running facing right: medium-dark skin tone
1F3C3 1F3FF 200D 2640 FE0F 200D 27A1 FE0F ; fully-qualified # 🏃🏿 E15.1 woman running facing right: dark skin tone
1F3C3 1F3FF 200D 2640 200D 27A1 FE0F ; minimally-qualified # 🏃🏿 E15.1 woman running facing right: dark skin tone
1F3C3 1F3FF 200D 2640 FE0F 200D 27A1 ; minimally-qualified # 🏃🏿➡ E15.1 woman running facing right: dark skin tone
1F3C3 1F3FF 200D 2640 200D 27A1 ; minimally-qualified # 🏃🏿➡ E15.1 woman running facing right: dark skin tone
1F3C3 200D 2642 FE0F 200D 27A1 FE0F ; fully-qualified # 🏃 E15.1 man running facing right
1F3C3 200D 2642 200D 27A1 FE0F ; minimally-qualified # 🏃 E15.1 man running facing right
1F3C3 200D 2642 FE0F 200D 27A1 ; minimally-qualified # 🏃➡ E15.1 man running facing right
1F3C3 200D 2642 200D 27A1 ; minimally-qualified # 🏃➡ E15.1 man running facing right
1F3C3 1F3FB 200D 2642 FE0F 200D 27A1 FE0F ; fully-qualified # 🏃🏻 E15.1 man running facing right: light skin tone
1F3C3 1F3FB 200D 2642 200D 27A1 FE0F ; minimally-qualified # 🏃🏻 E15.1 man running facing right: light skin tone
1F3C3 1F3FB 200D 2642 FE0F 200D 27A1 ; minimally-qualified # 🏃🏻➡ E15.1 man running facing right: light skin tone
1F3C3 1F3FB 200D 2642 200D 27A1 ; minimally-qualified # 🏃🏻➡ E15.1 man running facing right: light skin tone
1F3C3 1F3FC 200D 2642 FE0F 200D 27A1 FE0F ; fully-qualified # 🏃🏼 E15.1 man running facing right: medium-light skin tone
1F3C3 1F3FC 200D 2642 200D 27A1 FE0F ; minimally-qualified # 🏃🏼 E15.1 man running facing right: medium-light skin tone
1F3C3 1F3FC 200D 2642 FE0F 200D 27A1 ; minimally-qualified # 🏃🏼➡ E15.1 man running facing right: medium-light skin tone
1F3C3 1F3FC 200D 2642 200D 27A1 ; minimally-qualified # 🏃🏼➡ E15.1 man running facing right: medium-light skin tone
1F3C3 1F3FD 200D 2642 FE0F 200D 27A1 FE0F ; fully-qualified # 🏃🏽 E15.1 man running facing right: medium skin tone
1F3C3 1F3FD 200D 2642 200D 27A1 FE0F ; minimally-qualified # 🏃🏽 E15.1 man running facing right: medium skin tone
1F3C3 1F3FD 200D 2642 FE0F 200D 27A1 ; minimally-qualified # 🏃🏽➡ E15.1 man running facing right: medium skin tone
1F3C3 1F3FD 200D 2642 200D 27A1 ; minimally-qualified # 🏃🏽➡ E15.1 man running facing right: medium skin tone
1F3C3 1F3FE 200D 2642 FE0F 200D 27A1 FE0F ; fully-qualified # 🏃🏾 E15.1 man running facing right: medium-dark skin tone
1F3C3 1F3FE 200D 2642 200D 27A1 FE0F ; minimally-qualified # 🏃🏾 E15.1 man running facing right: medium-dark skin tone
1F3C3 1F3FE 200D 2642 FE0F 200D 27A1 ; minimally-qualified # 🏃🏾➡ E15.1 man running facing right: medium-dark skin tone
1F3C3 1F3FE 200D 2642 200D 27A1 ; minimally-qualified # 🏃🏾➡ E15.1 man running facing right: medium-dark skin tone
1F3C3 1F3FF 200D 2642 FE0F 200D 27A1 FE0F ; fully-qualified # 🏃🏿 E15.1 man running facing right: dark skin tone
1F3C3 1F3FF 200D 2642 200D 27A1 FE0F ; minimally-qualified # 🏃🏿 E15.1 man running facing right: dark skin tone
1F3C3 1F3FF 200D 2642 FE0F 200D 27A1 ; minimally-qualified # 🏃🏿➡ E15.1 man running facing right: dark skin tone
1F3C3 1F3FF 200D 2642 200D 27A1 ; minimally-qualified # 🏃🏿➡ E15.1 man running facing right: dark skin tone
1F483 ; fully-qualified # 💃 E0.6 woman dancing 1F483 ; fully-qualified # 💃 E0.6 woman dancing
1F483 1F3FB ; fully-qualified # 💃🏻 E1.0 woman dancing: light skin tone 1F483 1F3FB ; fully-qualified # 💃🏻 E1.0 woman dancing: light skin tone
1F483 1F3FC ; fully-qualified # 💃🏼 E1.0 woman dancing: medium-light skin tone 1F483 1F3FC ; fully-qualified # 💃🏼 E1.0 woman dancing: medium-light skin tone
@ -3244,7 +3536,6 @@
1F469 1F3FF 200D 2764 200D 1F469 1F3FE ; minimally-qualified # 👩🏿👩🏾 E13.1 couple with heart: woman, woman, dark skin tone, medium-dark skin tone 1F469 1F3FF 200D 2764 200D 1F469 1F3FE ; minimally-qualified # 👩🏿👩🏾 E13.1 couple with heart: woman, woman, dark skin tone, medium-dark skin tone
1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FF ; fully-qualified # 👩🏿👩🏿 E13.1 couple with heart: woman, woman, dark skin tone 1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FF ; fully-qualified # 👩🏿👩🏿 E13.1 couple with heart: woman, woman, dark skin tone
1F469 1F3FF 200D 2764 200D 1F469 1F3FF ; minimally-qualified # 👩🏿👩🏿 E13.1 couple with heart: woman, woman, dark skin tone 1F469 1F3FF 200D 2764 200D 1F469 1F3FF ; minimally-qualified # 👩🏿👩🏿 E13.1 couple with heart: woman, woman, dark skin tone
1F46A ; fully-qualified # 👪 E0.6 family
1F468 200D 1F469 200D 1F466 ; fully-qualified # 👨👩👦 E2.0 family: man, woman, boy 1F468 200D 1F469 200D 1F466 ; fully-qualified # 👨👩👦 E2.0 family: man, woman, boy
1F468 200D 1F469 200D 1F467 ; fully-qualified # 👨👩👧 E2.0 family: man, woman, girl 1F468 200D 1F469 200D 1F467 ; fully-qualified # 👨👩👧 E2.0 family: man, woman, girl
1F468 200D 1F469 200D 1F467 200D 1F466 ; fully-qualified # 👨👩👧👦 E2.0 family: man, woman, girl, boy 1F468 200D 1F469 200D 1F467 200D 1F466 ; fully-qualified # 👨👩👧👦 E2.0 family: man, woman, girl, boy
@ -3277,10 +3568,15 @@
1F464 ; fully-qualified # 👤 E0.6 bust in silhouette 1F464 ; fully-qualified # 👤 E0.6 bust in silhouette
1F465 ; fully-qualified # 👥 E1.0 busts in silhouette 1F465 ; fully-qualified # 👥 E1.0 busts in silhouette
1FAC2 ; fully-qualified # 🫂 E13.0 people hugging 1FAC2 ; fully-qualified # 🫂 E13.0 people hugging
1F46A ; fully-qualified # 👪 E0.6 family
1F9D1 200D 1F9D1 200D 1F9D2 ; fully-qualified # 🧑🧑🧒 E15.1 family: adult, adult, child
1F9D1 200D 1F9D1 200D 1F9D2 200D 1F9D2 ; fully-qualified # 🧑🧑🧒🧒 E15.1 family: adult, adult, child, child
1F9D1 200D 1F9D2 ; fully-qualified # 🧑🧒 E15.1 family: adult, child
1F9D1 200D 1F9D2 200D 1F9D2 ; fully-qualified # 🧑🧒🧒 E15.1 family: adult, child, child
1F463 ; fully-qualified # 👣 E0.6 footprints 1F463 ; fully-qualified # 👣 E0.6 footprints
# People & Body subtotal: 2998 # People & Body subtotal: 3290
# People & Body subtotal: 508 w/o modifiers # People & Body subtotal: 560 w/o modifiers
# group: Component # group: Component
@ -3395,6 +3691,7 @@
1FABD ; fully-qualified # 🪽 E15.0 wing 1FABD ; fully-qualified # 🪽 E15.0 wing
1F426 200D 2B1B ; fully-qualified # 🐦⬛ E15.0 black bird 1F426 200D 2B1B ; fully-qualified # 🐦⬛ E15.0 black bird
1FABF ; fully-qualified # 🪿 E15.0 goose 1FABF ; fully-qualified # 🪿 E15.0 goose
1F426 200D 1F525 ; fully-qualified # 🐦🔥 E15.1 phoenix
# subgroup: animal-amphibian # subgroup: animal-amphibian
1F438 ; fully-qualified # 🐸 E0.6 frog 1F438 ; fully-qualified # 🐸 E0.6 frog
@ -3477,8 +3774,8 @@
1FABA ; fully-qualified # 🪺 E14.0 nest with eggs 1FABA ; fully-qualified # 🪺 E14.0 nest with eggs
1F344 ; fully-qualified # 🍄 E0.6 mushroom 1F344 ; fully-qualified # 🍄 E0.6 mushroom
# Animals & Nature subtotal: 159 # Animals & Nature subtotal: 160
# Animals & Nature subtotal: 159 w/o modifiers # Animals & Nature subtotal: 160 w/o modifiers
# group: Food & Drink # group: Food & Drink
@ -3488,6 +3785,7 @@
1F349 ; fully-qualified # 🍉 E0.6 watermelon 1F349 ; fully-qualified # 🍉 E0.6 watermelon
1F34A ; fully-qualified # 🍊 E0.6 tangerine 1F34A ; fully-qualified # 🍊 E0.6 tangerine
1F34B ; fully-qualified # 🍋 E1.0 lemon 1F34B ; fully-qualified # 🍋 E1.0 lemon
1F34B 200D 1F7E9 ; fully-qualified # 🍋🟩 E15.1 lime
1F34C ; fully-qualified # 🍌 E0.6 banana 1F34C ; fully-qualified # 🍌 E0.6 banana
1F34D ; fully-qualified # 🍍 E0.6 pineapple 1F34D ; fully-qualified # 🍍 E0.6 pineapple
1F96D ; fully-qualified # 🥭 E11.0 mango 1F96D ; fully-qualified # 🥭 E11.0 mango
@ -3522,6 +3820,7 @@
1F330 ; fully-qualified # 🌰 E0.6 chestnut 1F330 ; fully-qualified # 🌰 E0.6 chestnut
1FADA ; fully-qualified # 🫚 E15.0 ginger root 1FADA ; fully-qualified # 🫚 E15.0 ginger root
1FADB ; fully-qualified # 🫛 E15.0 pea pod 1FADB ; fully-qualified # 🫛 E15.0 pea pod
1F344 200D 1F7EB ; fully-qualified # 🍄🟫 E15.1 brown mushroom
# subgroup: food-prepared # subgroup: food-prepared
1F35E ; fully-qualified # 🍞 E0.6 bread 1F35E ; fully-qualified # 🍞 E0.6 bread
@ -3633,8 +3932,8 @@
1FAD9 ; fully-qualified # 🫙 E14.0 jar 1FAD9 ; fully-qualified # 🫙 E14.0 jar
1F3FA ; fully-qualified # 🏺 E1.0 amphora 1F3FA ; fully-qualified # 🏺 E1.0 amphora
# Food & Drink subtotal: 135 # Food & Drink subtotal: 137
# Food & Drink subtotal: 135 w/o modifiers # Food & Drink subtotal: 137 w/o modifiers
# group: Travel & Places # group: Travel & Places
@ -4321,6 +4620,8 @@
2696 ; unqualified # ⚖ E1.0 balance scale 2696 ; unqualified # ⚖ E1.0 balance scale
1F9AF ; fully-qualified # 🦯 E12.0 white cane 1F9AF ; fully-qualified # 🦯 E12.0 white cane
1F517 ; fully-qualified # 🔗 E0.6 link 1F517 ; fully-qualified # 🔗 E0.6 link
26D3 FE0F 200D 1F4A5 ; fully-qualified # ⛓💥 E15.1 broken chain
26D3 200D 1F4A5 ; unqualified # ⛓💥 E15.1 broken chain
26D3 FE0F ; fully-qualified # ⛓ E0.7 chains 26D3 FE0F ; fully-qualified # ⛓ E0.7 chains
26D3 ; unqualified # ⛓ E0.7 chains 26D3 ; unqualified # ⛓ E0.7 chains
1FA9D ; fully-qualified # 🪝 E13.0 hook 1FA9D ; fully-qualified # 🪝 E13.0 hook
@ -4389,8 +4690,8 @@
1FAA7 ; fully-qualified # 🪧 E13.0 placard 1FAA7 ; fully-qualified # 🪧 E13.0 placard
1FAAA ; fully-qualified # 🪪 E14.0 identification card 1FAAA ; fully-qualified # 🪪 E14.0 identification card
# Objects subtotal: 310 # Objects subtotal: 312
# Objects subtotal: 310 w/o modifiers # Objects subtotal: 312 w/o modifiers
# group: Symbols # group: Symbols
@ -4979,7 +5280,7 @@
1F1F9 1F1F2 ; fully-qualified # 🇹🇲 E2.0 flag: Turkmenistan 1F1F9 1F1F2 ; fully-qualified # 🇹🇲 E2.0 flag: Turkmenistan
1F1F9 1F1F3 ; fully-qualified # 🇹🇳 E2.0 flag: Tunisia 1F1F9 1F1F3 ; fully-qualified # 🇹🇳 E2.0 flag: Tunisia
1F1F9 1F1F4 ; fully-qualified # 🇹🇴 E2.0 flag: Tonga 1F1F9 1F1F4 ; fully-qualified # 🇹🇴 E2.0 flag: Tonga
1F1F9 1F1F7 ; fully-qualified # 🇹🇷 E2.0 flag: Turkey 1F1F9 1F1F7 ; fully-qualified # 🇹🇷 E2.0 flag: Türkiye
1F1F9 1F1F9 ; fully-qualified # 🇹🇹 E2.0 flag: Trinidad & Tobago 1F1F9 1F1F9 ; fully-qualified # 🇹🇹 E2.0 flag: Trinidad & Tobago
1F1F9 1F1FB ; fully-qualified # 🇹🇻 E2.0 flag: Tuvalu 1F1F9 1F1FB ; fully-qualified # 🇹🇻 E2.0 flag: Tuvalu
1F1F9 1F1FC ; fully-qualified # 🇹🇼 E2.0 flag: Taiwan 1F1F9 1F1FC ; fully-qualified # 🇹🇼 E2.0 flag: Taiwan
@ -5016,9 +5317,9 @@
# Flags subtotal: 275 w/o modifiers # Flags subtotal: 275 w/o modifiers
# Status Counts # Status Counts
# fully-qualified : 3655 # fully-qualified : 3773
# minimally-qualified : 827 # minimally-qualified : 1009
# unqualified : 242 # unqualified : 243
# component : 9 # component : 9
#EOF #EOF

@ -0,0 +1,11 @@
// SPDX-FileCopyrightText: Nheko Contributors
//
// SPDX-License-Identifier: GPL-3.0-or-later
// DO NOT EDIT PROVIDER.CPP DIRECTLY! EDIT resources/provider-head.txt AND RUN scripts/codegen.sh!
#include "emoji/Provider.h"
using namespace emoji;
constexpr

@ -1,18 +0,0 @@
// SPDX-FileCopyrightText: 2021 Nheko Contributors
// SPDX-FileCopyrightText: 2022 Nheko Contributors
//
// SPDX-License-Identifier: GPL-3.0-or-later
#include "emoji/Provider.h"
using namespace emoji;
// a null terminated string_view
template<size_t N>
static consteval std::u16string_view
null_literal(const char16_t (&lit)[N])
{
return std::u16string_view(lit, N);
}

@ -20,7 +20,7 @@
1F523:symbols 1F523:symbols
1F524:abc 1F524:abc
1F60D:heart_eyes 1F60D:heart_eyes
1F927:cry_smile 1F972:cry_smile
1F608:smiling_imp 1F608:smiling_imp
1F47F:imp 1F47F:imp
1F261:rage 1F261:rage

@ -1,7 +1,8 @@
#!/bin/bash #!/bin/bash
ROOT=$(realpath "$PWD/$(dirname "$0")/..") ROOT=$(realpath "$PWD/$(dirname "$0")/..")
cd $ROOT cd $ROOT
cat resources/provider-header.txt > src/emoji/Provider.cpp cat resources/provider-head.txt > src/emoji/Provider.cpp
cat resources/extra_emoji.txt resources/emoji-test.txt > resources/complete-emoji.txt cat resources/extra_emoji.txt resources/emoji-test.txt > resources/complete-emoji.txt
scripts/emoji_codegen.py resources/complete-emoji.txt resources/shortcodes.txt >> src/emoji/Provider.cpp scripts/emoji_codegen.py impl resources/complete-emoji.txt resources/shortcodes.txt >> src/emoji/Provider.cpp
scripts/emoji_codegen.py header resources/complete-emoji.txt resources/shortcodes.txt > src/emoji/Provider.h
cd - > /dev/null cd - > /dev/null

@ -12,10 +12,34 @@ class Emoji(object):
self.shortname = shortname self.shortname = shortname
self.unicodename = unicodename self.unicodename = unicodename
def generate_provider_class(**kwargs):
entrycount = sum([len(c[1]) for c in kwargs.items()])
tmpl = Template('''\
// SPDX-FileCopyrightText: Nheko Contributors
//
// SPDX-License-Identifier: GPL-3.0-or-later
// DO NOT EDIT Provider.h DIRECTLY! EDIT IT IN scripts/emoji_codegen.py AND RUN scripts/codegen.sh!
#pragma once
#include <array>
#include "Emoji.h"
namespace emoji {
class Provider
{
public:
// all emoji for QML purposes
static const std::array<Emoji, {{ entrycount }}> emoji;
};
} // namespace emoji
''')
d = dict(entrycount=entrycount)
print(tmpl.render(d))
def generate_qml_list(**kwargs): def generate_qml_list(**kwargs):
entrycount = sum([len(c[1]) for c in kwargs.items()]) entrycount = sum([len(c[1]) for c in kwargs.items()])
tmpl = Template(''' tmpl = Template('''
constexpr const std::array<Emoji, {{ entrycount }} > emoji::Provider::emoji = { std::array<Emoji, {{ entrycount }} > emoji::Provider::emoji = {
{%- for c in kwargs.items() %} {%- for c in kwargs.items() %}
// {{ c[0].capitalize() }} // {{ c[0].capitalize() }}
{%- for e in c[1] %} {%- for e in c[1] %}
@ -26,13 +50,19 @@ constexpr const std::array<Emoji, {{ entrycount }} > emoji::Provider::emoji = {
''') ''')
d = dict(kwargs=kwargs, entrycount=entrycount) d = dict(kwargs=kwargs, entrycount=entrycount)
print(tmpl.render(d)) print(tmpl.render(d))
def usage():
print('usage: emoji_codegen.py {impl|header} /path/to/emoji-test /path/to/shortcodes.txt')
if __name__ == '__main__': if __name__ == '__main__':
if len(sys.argv) < 3: if len(sys.argv) < 4:
print('usage: emoji_codegen.py /path/to/emoji-test.txt /path/to/shortcodes.txt') usage()
sys.exit(1) sys.exit(1)
filename = sys.argv[1] mode = sys.argv[1]
shortcodefilename = sys.argv[2] if mode != 'impl' and mode != 'header':
usage()
sys.exit(1)
filename = sys.argv[2]
shortcodefilename = sys.argv[3]
people = [] people = []
nature = [] nature = []
@ -99,7 +129,7 @@ if __name__ == '__main__':
if shortname.endswith(': curly hair'): if shortname.endswith(': curly hair'):
shortname = "curly_haired_" + shortname[:-12] shortname = "curly_haired_" + shortname[:-12]
if shortname.endswith(': white hair'): if shortname.endswith(': white hair'):
shortname = "white_haried_" + shortname[:-12] shortname = "white_haired_" + shortname[:-12]
if shortname.endswith(': bald'): if shortname.endswith(': bald'):
shortname = "bald_" + shortname[:-6] shortname = "bald_" + shortname[:-6]
if shortname.endswith(': beard'): if shortname.endswith(': beard'):
@ -134,4 +164,9 @@ if __name__ == '__main__':
# Use xclip to pipe the output to clipboard. # Use xclip to pipe the output to clipboard.
# e.g ./emoji_codegen.py emoji.json | xclip -sel clip # e.g ./emoji_codegen.py emoji.json | xclip -sel clip
# alternatively - delete the var from src/emoji/Provider.cpp, and do ./codegen.sh emojis shortcodes >> ../src/emoji/Provider.cpp # alternatively - delete the var from src/emoji/Provider.cpp, and do ./codegen.sh emojis shortcodes >> ../src/emoji/Provider.cpp
generate_qml_list(people=people, nature=nature, food=food, activity=activity, travel=travel, objects=objects, symbols=symbols, flags=flags) func = None
if mode == 'impl':
func = generate_qml_list
else:
func = generate_provider_class
func(people=people, nature=nature, food=food, activity=activity, travel=travel, objects=objects, symbols=symbols, flags=flags)

@ -12,31 +12,6 @@
#include "Cache.h" #include "Cache.h"
#include "emoji/Provider.h" #include "emoji/Provider.h"
QString
emoji::categoryToName(emoji::Emoji::Category cat)
{
switch (cat) {
case emoji::Emoji::Category::People:
return QCoreApplication::translate("emoji-catagory", "People");
case emoji::Emoji::Category::Nature:
return QCoreApplication::translate("emoji-catagory", "Nature");
case emoji::Emoji::Category::Food:
return QCoreApplication::translate("emoji-catagory", "Food");
case emoji::Emoji::Category::Activity:
return QCoreApplication::translate("emoji-catagory", "Activity");
case emoji::Emoji::Category::Travel:
return QCoreApplication::translate("emoji-catagory", "Travel");
case emoji::Emoji::Category::Objects:
return QCoreApplication::translate("emoji-catagory", "Objects");
case emoji::Emoji::Category::Symbols:
return QCoreApplication::translate("emoji-catagory", "Symbols");
case emoji::Emoji::Category::Flags:
return QCoreApplication::translate("emoji-catagory", "Flags");
default:
return "";
}
}
static QString static QString
categoryToIcon(emoji::Emoji::Category cat) categoryToIcon(emoji::Emoji::Category cat)
{ {

@ -0,0 +1,33 @@
// SPDX-FileCopyrightText: Nheko Contributors
//
// SPDX-License-Identifier: GPL-3.0-or-later
#include "Emoji.h"
#include <QCoreApplication>
QString
emoji::categoryToName(emoji::Emoji::Category cat)
{
switch (cat) {
case emoji::Emoji::Category::People:
return QCoreApplication::translate("emoji-catagory", "People");
case emoji::Emoji::Category::Nature:
return QCoreApplication::translate("emoji-catagory", "Nature");
case emoji::Emoji::Category::Food:
return QCoreApplication::translate("emoji-catagory", "Food");
case emoji::Emoji::Category::Activity:
return QCoreApplication::translate("emoji-catagory", "Activity");
case emoji::Emoji::Category::Travel:
return QCoreApplication::translate("emoji-catagory", "Travel");
case emoji::Emoji::Category::Objects:
return QCoreApplication::translate("emoji-catagory", "Objects");
case emoji::Emoji::Category::Symbols:
return QCoreApplication::translate("emoji-catagory", "Symbols");
case emoji::Emoji::Category::Flags:
return QCoreApplication::translate("emoji-catagory", "Flags");
default:
return "";
}
}
#include "moc_Emoji.cpp"

@ -0,0 +1,88 @@
// SPDX-FileCopyrightText: Nheko Contributors
//
// SPDX-License-Identifier: GPL-3.0-or-later
#pragma once
#include <QObject>
namespace emoji {
Q_NAMESPACE
struct Emoji
{
Q_GADGET
public:
enum class Category
{
People,
Nature,
Food,
Activity,
Travel,
Objects,
Symbols,
Flags,
Search
};
Q_ENUM(Category)
Q_PROPERTY(QString unicode READ unicode CONSTANT)
Q_PROPERTY(QString shortName READ shortName CONSTANT)
Q_PROPERTY(QString unicodeName READ unicodeName CONSTANT)
Q_PROPERTY(emoji::Emoji::Category category MEMBER category)
public:
constexpr Emoji(std::u16string_view unicode,
std::u16string_view shortName,
std::u16string_view unicodeName,
Category cat)
: unicode_(unicode)
, shortName_(shortName)
, unicodeName_(unicodeName)
, category(cat)
{
}
constexpr Emoji()
: unicode_(u"", 0)
, shortName_(u"", 0)
, unicodeName_(u"", 0)
, category(Category::Search)
{
}
constexpr Emoji(const Emoji &) = default;
constexpr Emoji(Emoji &&) = default;
constexpr Emoji &operator=(const Emoji &) = default;
constexpr Emoji &operator=(Emoji &&) = default;
QString unicode() const
{
return QString::fromRawData(reinterpret_cast<const QChar *>(unicode_.data()),
unicode_.size());
}
QString shortName() const
{
return QString::fromRawData(reinterpret_cast<const QChar *>(shortName_.data()),
shortName_.size());
}
QString unicodeName() const
{
return QString::fromRawData(reinterpret_cast<const QChar *>(unicodeName_.data()),
unicodeName_.size());
}
private:
std::u16string_view unicode_;
std::u16string_view shortName_;
std::u16string_view unicodeName_;
public:
Category category;
};
QString
categoryToName(emoji::Emoji::Category cat);
} // namespace emoji

File diff suppressed because it is too large Load Diff

@ -2,95 +2,17 @@
// //
// SPDX-License-Identifier: GPL-3.0-or-later // SPDX-License-Identifier: GPL-3.0-or-later
#pragma once // DO NOT EDIT Provider.h DIRECTLY! EDIT IT IN scripts/emoji_codegen.py AND RUN scripts/codegen.sh!
#include <QObject> #pragma once
#include "Emoji.h"
#include <array> #include <array>
namespace emoji { namespace emoji {
Q_NAMESPACE
struct Emoji
{
Q_GADGET
public:
enum class Category
{
People,
Nature,
Food,
Activity,
Travel,
Objects,
Symbols,
Flags,
Search
};
Q_ENUM(Category)
Q_PROPERTY(QString unicode READ unicode CONSTANT)
Q_PROPERTY(QString shortName READ shortName CONSTANT)
Q_PROPERTY(QString unicodeName READ unicodeName CONSTANT)
Q_PROPERTY(emoji::Emoji::Category category MEMBER category)
public:
constexpr Emoji(std::u16string_view unicode,
std::u16string_view shortName,
std::u16string_view unicodeName,
Category cat)
: unicode_(unicode)
, shortName_(shortName)
, unicodeName_(unicodeName)
, category(cat)
{
}
constexpr Emoji()
: unicode_(u"", 0)
, shortName_(u"", 0)
, unicodeName_(u"", 0)
, category(Category::Search)
{
}
constexpr Emoji(const Emoji &) = default;
constexpr Emoji(Emoji &&) = default;
constexpr Emoji &operator=(const Emoji &) = default;
constexpr Emoji &operator=(Emoji &&) = default;
QString unicode() const
{
return QString::fromRawData(reinterpret_cast<const QChar *>(unicode_.data()),
unicode_.size());
}
QString shortName() const
{
return QString::fromRawData(reinterpret_cast<const QChar *>(shortName_.data()),
shortName_.size());
}
QString unicodeName() const
{
return QString::fromRawData(reinterpret_cast<const QChar *>(unicodeName_.data()),
unicodeName_.size());
}
private:
std::u16string_view unicode_;
std::u16string_view shortName_;
std::u16string_view unicodeName_;
public:
Category category;
};
class Provider class Provider
{ {
public: public:
// all emoji for QML purposes // all emoji for QML purposes
static const std::array<Emoji, 3681> emoji; static const std::array<Emoji, 3799> emoji;
}; };
QString
categoryToName(emoji::Emoji::Category cat);
} // namespace emoji } // namespace emoji

Loading…
Cancel
Save