diff --git a/resources/provider-header.txt b/resources/provider-header.txt
new file mode 100644
index 00000000..c947eec4
--- /dev/null
+++ b/resources/provider-header.txt
@@ -0,0 +1,10 @@
+// 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;
+
+
diff --git a/scripts/codegen.sh b/scripts/codegen.sh
new file mode 100644
index 00000000..5efda523
--- /dev/null
+++ b/scripts/codegen.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+ROOT=$(realpath "$PWD/$(dirname "$0")/..")
+cd $ROOT
+cat resources/provider-header.txt > src/emoji/Provider.cpp
+
+scripts/emoji_codegen.py resources/emoji-test.txt resources/shortcodes.txt >> src/emoji/Provider.cpp
diff --git a/scripts/emoji_codegen.py b/scripts/emoji_codegen.py
index 37ad3cec..5da3fb26 100755
--- a/scripts/emoji_codegen.py
+++ b/scripts/emoji_codegen.py
@@ -78,26 +78,26 @@ if __name__ == '__main__':
char, name = re.match(r'^(\S+) E\d+\.\d+ (.*)$', charAndName).groups()
- # drop "face" part
-
+ #TODO: Handle skintone modifiers in a sane way
if name in shortcodeDict:
- name = shortcodeDict[name]
+ # TODO: this duplicates emoji
+ categories[current_category].append(Emoji(code, shortcodeDict[name]))
+
+ if name.endswith(' face'):
+ name = name[:-5]
+ elif name.endswith(' button'):
+ name = name[:-7]
else:
- if name.endswith(' face'):
- name = name[:-5]
- elif name.endswith(' button'):
- name = name[:-7]
- else:
- matchobj = re.match(r'^flag: (.*)$', name)
- if matchobj:
- country, = matchobj.groups()
- name = country + " flag"
- name = name.replace(" ", "_")
- name = name.replace("“", "")
- name = name.replace("”", "")
- name = name.replace(":", "")
- name = name.lower()
- name = unidecode(name)
+ matchobj = re.match(r'^flag: (.*)$', name)
+ if matchobj:
+ country, = matchobj.groups()
+ name = country + " flag"
+ name = name.replace(" ", "_")
+ name = name.replace("“", "")
+ name = name.replace("”", "")
+ name = name.replace(":", "")
+ name = name.lower()
+ name = unidecode(name)
categories[current_category].append(Emoji(code, name))
# Use xclip to pipe the output to clipboard.
diff --git a/src/emoji/Provider.cpp b/src/emoji/Provider.cpp
index 89f6c60f..17ed2997 100644
--- a/src/emoji/Provider.cpp
+++ b/src/emoji/Provider.cpp
@@ -14,6 +14,9 @@ const QVector<Emoji> emoji::Provider::emoji = {
QStringLiteral(u"grinning_face_with_big_eyes"),
emoji::Emoji::Category::People},
Emoji{QStringLiteral(u"\U0001F604"), QStringLiteral(u"smile"), emoji::Emoji::Category::People},
+ Emoji{QStringLiteral(u"\U0001F604"),
+ QStringLiteral(u"grinning_face_with_smiling_eyes"),
+ emoji::Emoji::Category::People},
Emoji{QStringLiteral(u"\U0001F601"),
QStringLiteral(u"beaming_face_with_smiling_eyes"),
emoji::Emoji::Category::People},
@@ -23,7 +26,13 @@ const QVector<Emoji> emoji::Provider::emoji = {
Emoji{QStringLiteral(u"\U0001F605"),
QStringLiteral(u"sweat_smile"),
emoji::Emoji::Category::People},
+ Emoji{QStringLiteral(u"\U0001F605"),
+ QStringLiteral(u"grinning_face_with_sweat"),
+ emoji::Emoji::Category::People},
Emoji{QStringLiteral(u"\U0001F923"), QStringLiteral(u"rofl"), emoji::Emoji::Category::People},
+ Emoji{QStringLiteral(u"\U0001F923"),
+ QStringLiteral(u"rolling_on_the_floor_laughing"),
+ emoji::Emoji::Category::People},
Emoji{QStringLiteral(u"\U0001F602"),
QStringLiteral(u"face_with_tears_of_joy"),
emoji::Emoji::Category::People},
@@ -213,7 +222,13 @@ const QVector<Emoji> emoji::Provider::emoji = {
emoji::Emoji::Category::People},
Emoji{QStringLiteral(u"\U0001F622"), QStringLiteral(u"crying"), emoji::Emoji::Category::People},
Emoji{QStringLiteral(u"\U0001F62D"), QStringLiteral(u"sob"), emoji::Emoji::Category::People},
+ Emoji{QStringLiteral(u"\U0001F62D"),
+ QStringLiteral(u"loudly_crying"),
+ emoji::Emoji::Category::People},
Emoji{QStringLiteral(u"\U0001F631"), QStringLiteral(u"scream"), emoji::Emoji::Category::People},
+ Emoji{QStringLiteral(u"\U0001F631"),
+ QStringLiteral(u"face_screaming_in_fear"),
+ emoji::Emoji::Category::People},
Emoji{QStringLiteral(u"\U0001F616"),
QStringLiteral(u"confounded"),
emoji::Emoji::Category::People},
@@ -224,6 +239,9 @@ const QVector<Emoji> emoji::Provider::emoji = {
QStringLiteral(u"disappointed"),
emoji::Emoji::Category::People},
Emoji{QStringLiteral(u"\U0001F613"), QStringLiteral(u"sweat"), emoji::Emoji::Category::People},
+ Emoji{QStringLiteral(u"\U0001F613"),
+ QStringLiteral(u"downcast_face_with_sweat"),
+ emoji::Emoji::Category::People},
Emoji{QStringLiteral(u"\U0001F629"), QStringLiteral(u"weary"), emoji::Emoji::Category::People},
Emoji{QStringLiteral(u"\U0001F62B"), QStringLiteral(u"tired"), emoji::Emoji::Category::People},
Emoji{QStringLiteral(u"\U0001F971"), QStringLiteral(u"yawning"), emoji::Emoji::Category::People},
|