Skip to content

Commit

Permalink
Update twemoji and improve smiley detection
Browse files Browse the repository at this point in the history
Now the smileys have a simple rule and they must be
- preceded by nothing or a space
- followed by nothing or a space, a dot, a comma or an end of line

That avoids false positives.

Also added optimizations to the lookup.
  • Loading branch information
zapek committed Aug 31, 2023
1 parent 4cf1832 commit 26eba5d
Show file tree
Hide file tree
Showing 357 changed files with 70 additions and 31 deletions.
4 changes: 2 additions & 2 deletions docs/smiley.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ The following smileys are automatically converted to emojis:
| Smiley | Alternative | Emoji |
|--------|-------------|-------|
| :-) | :) | 🙂 |
| :o) | | 🤡 |
| :-D | :D | 😃 |
| :-DD | :DD | 😄 |
| :-( | :( | 🙁 |
| :-O | | 😮 |
| :-* | | 😘 |
Expand All @@ -20,7 +20,7 @@ The following smileys are automatically converted to emojis:
| >:-) | >:) | 😈 |
| B-) | | 😎 |
| <3 | | 💖 |
| O_o | o_O | 😳 |
| :o) | | 🤡 |

## Aliases

Expand Down
97 changes: 68 additions & 29 deletions ui/src/main/java/io/xeres/ui/support/util/SmileyUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,34 +31,73 @@
*/
public final class SmileyUtils
{
private static final String /* 🙂 */ SLIGHTLY_SMILING_FACE = Character.toString(0x1F642);
private static final String /* 😃 */ GRINNING_FACE_WITH_BIG_EYES = Character.toString(0x1F603);
private static final String /* 😄 */ GRINNING_FACE_WITH_SMILING_EYES = Character.toString(0x1F604);
private static final String /* 😅 */ GRINNING_FACE_WITH_SWEAT = Character.toString(0x1F605);
private static final String /* 😂 */ FACE_WITH_TEARS_OF_JOY = Character.toString(0x1F602);
private static final String /* 😠 */ ANGRY_FACE = Character.toString(0x1F620);
private static final String /* 😶 */ FACE_WITHOUT_MOUTH = Character.toString(0x1F636);
private static final String /* 😵 */ FACE_WITH_CROSSED_OUT_EYES = Character.toString(0x1F635);
private static final String /* 😳 */ FLUSHED_FACE = Character.toString(0x1F633);
private static final String /* 🙁 */ SLIGHTLY_FROWNING_FACE = Character.toString(0x1F641);
private static final String /* 😮 */ FACE_WITH_OPEN_MOUTH = Character.toString(0x1F62E);
private static final String /* 😘 */ FACE_BLOWING_A_KISS = Character.toString(0x1F618);
private static final String /* 😉 */ WINKING_FACE = Character.toString(0x1F609);
private static final String /* 😥 */ SAD_BUT_RELIEVED_FACE = Character.toString(0x1F625);
private static final String /* 😛 */ FACE_WITH_TONGUE = Character.toString(0x1F61B);
private static final String /* 😕 */ CONFUSED_FACE = Character.toString(0x1F615);
private static final String /* 😇 */ SMILING_FACE_WITH_HALO = Character.toString(0x1F607);
private static final String /* 😈 */ SMILING_FACE_WITH_HORNS = Character.toString(0x1F608);
private static final String /* 😎 */ SMILING_FACE_WITH_SUNGLASSES = Character.toString(0x1F60E);
private static final String /* 💖 */ SPARKLING_HEART = Character.toString(0x1F496);
private static final String /* 🤡 */ CLOWN_FACE = Character.toString(0x1F921);

private static final Map<String, String> smileys = Map.ofEntries(
entry(":-)", "\uD83D\uDE42"),
entry(":)", "\uD83D\uDE42"),
entry(":o)", "\uD83E\uDD21"), // not working on linux
entry(":-D", "\uD83D\uDE03"),
entry(":D", "\uD83D\uDE03"),
entry(":-(", "\uD83D\uDE41"),
entry(":(", "\uD83D\uDE41"),
entry(":-O", "\uD83D\uDE2E"),
entry(":-*", "\uD83D\uDE18"),
entry(";-)", "\uD83D\uDE09"),
entry(";)", "\uD83D\uDE09"),
entry(";-(", "\uD83D\uDE25"),
entry(";(", "\uD83D\uDE25"),
entry(":-P", "\uD83D\uDE1B"),
entry(":P", "\uD83D\uDE1B"),
entry(":p", "\uD83D\uDE1B"),
entry(":-/", "\uD83D\uDE15"),
entry(":/", "\uD83D\uDE15"),
entry("O:-)", "\uD83D\uDE07"),
entry("O:)", "\uD83D\uDE07"),
entry(">:-)", "\uD83D\uDE08"),
entry(">:)", "\uD83D\uDE08"),
entry("B-)", "\uD83D\uDE0E"),
entry("B)", "\uD83D\uDE0E"),
entry("<3", "\uD83D\uDC96"),
entry("O_o", "\uD83D\uDE33"),
entry("o_O", "\uD83D\uDE33")
entry(":-)", SLIGHTLY_SMILING_FACE),
entry(":)", SLIGHTLY_SMILING_FACE),
entry(":-D", GRINNING_FACE_WITH_BIG_EYES),
entry(":D", GRINNING_FACE_WITH_BIG_EYES),
entry(":-DD", GRINNING_FACE_WITH_SMILING_EYES),
entry(":DD", GRINNING_FACE_WITH_SMILING_EYES),
entry("':)", GRINNING_FACE_WITH_SWEAT),
entry("':-)", GRINNING_FACE_WITH_SWEAT),
entry("':D", GRINNING_FACE_WITH_SWEAT),
entry("':-D", GRINNING_FACE_WITH_SWEAT),
entry(":')", FACE_WITH_TEARS_OF_JOY),
entry(":'-)", FACE_WITH_TEARS_OF_JOY),
entry(":-(", SLIGHTLY_FROWNING_FACE),
entry(":(", SLIGHTLY_FROWNING_FACE),
entry(":-O", FACE_WITH_OPEN_MOUTH),
entry(":O", FACE_WITH_OPEN_MOUTH),
entry(":-*", FACE_BLOWING_A_KISS),
entry(":*", FACE_BLOWING_A_KISS),
entry(";-)", WINKING_FACE),
entry(";)", WINKING_FACE),
entry(";-(", SAD_BUT_RELIEVED_FACE),
entry(";(", SAD_BUT_RELIEVED_FACE),
entry(":-P", FACE_WITH_TONGUE),
entry(":P", FACE_WITH_TONGUE),
entry(":p", FACE_WITH_TONGUE),
entry(":-/", CONFUSED_FACE),
entry(":/", CONFUSED_FACE),
entry("O:-)", SMILING_FACE_WITH_HALO),
entry("O:)", SMILING_FACE_WITH_HALO),
entry(">:-)", SMILING_FACE_WITH_HORNS),
entry(">:)", SMILING_FACE_WITH_HORNS),
entry("B-)", SMILING_FACE_WITH_SUNGLASSES),
entry("B)", SMILING_FACE_WITH_SUNGLASSES),
entry(":@", ANGRY_FACE),
entry(":-X", FACE_WITHOUT_MOUTH),
entry(":-x", FACE_WITHOUT_MOUTH),
entry(":X", FACE_WITHOUT_MOUTH),
entry(":x", FACE_WITHOUT_MOUTH),
entry("%-)", FACE_WITH_CROSSED_OUT_EYES),
entry("%)", FACE_WITH_CROSSED_OUT_EYES),
entry(":-$", FLUSHED_FACE),
entry(":$", FLUSHED_FACE),
entry("<3", SPARKLING_HEART),
entry(":o)", CLOWN_FACE)
);

private SmileyUtils()
Expand All @@ -67,7 +106,7 @@ private SmileyUtils()
}

/**
* A smiley is detected on the following conditions:
* A smiley is detected if the following 2 conditions are met:
* <ul>
* <li>preceded by nothing or a space</li>
* <li>followed by nothing or a space, a dot, a comma or an end of line</li>
Expand All @@ -78,7 +117,7 @@ private SmileyUtils()
*/
public static String smileysToUnicode(String s)
{
if (s.length() >= 2)
if (s.length() >= 2 && (s.contains(":") || s.contains(";") || s.contains("B") || s.contains("%") || s.contains("<"))) // optimizations
{
for (var e : smileys.entrySet())
{
Expand Down
Binary file modified ui/src/main/resources/image/emojis/1f1e7-1f1ea.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified ui/src/main/resources/image/emojis/1f1ee-1f1f3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified ui/src/main/resources/image/emojis/1f1f5-1f1f9.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified ui/src/main/resources/image/emojis/1f1f9-1f1ed.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified ui/src/main/resources/image/emojis/1f3af.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified ui/src/main/resources/image/emojis/1f3f3-fe0f-200d-1f308.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified ui/src/main/resources/image/emojis/1f489.png
Binary file modified ui/src/main/resources/image/emojis/1f48f.png
Binary file modified ui/src/main/resources/image/emojis/1f491.png
Binary file modified ui/src/main/resources/image/emojis/1f50b.png
Binary file modified ui/src/main/resources/image/emojis/1f606.png
Binary file modified ui/src/main/resources/image/emojis/1f616.png
Binary file modified ui/src/main/resources/image/emojis/1f61d.png
Binary file added ui/src/main/resources/image/emojis/1f6dd.png
Binary file added ui/src/main/resources/image/emojis/1f6de.png
Binary file added ui/src/main/resources/image/emojis/1f6df.png
Binary file added ui/src/main/resources/image/emojis/1f7f0.png
Binary file modified ui/src/main/resources/image/emojis/1f91d.png
Binary file modified ui/src/main/resources/image/emojis/1f923.png
Binary file modified ui/src/main/resources/image/emojis/1f927.png
Binary file modified ui/src/main/resources/image/emojis/1f92e.png
Binary file added ui/src/main/resources/image/emojis/1f979.png
Binary file modified ui/src/main/resources/image/emojis/1f98a.png
Binary file modified ui/src/main/resources/image/emojis/1f996.png
Binary file modified ui/src/main/resources/image/emojis/1f997.png
Binary file added ui/src/main/resources/image/emojis/1f9cc.png
Binary file added ui/src/main/resources/image/emojis/1fa7b.png
Binary file added ui/src/main/resources/image/emojis/1fa7c.png
Binary file added ui/src/main/resources/image/emojis/1faa9.png
Binary file added ui/src/main/resources/image/emojis/1faaa.png
Binary file added ui/src/main/resources/image/emojis/1faab.png
Binary file added ui/src/main/resources/image/emojis/1faac.png
Binary file added ui/src/main/resources/image/emojis/1fab7.png
Binary file added ui/src/main/resources/image/emojis/1fab8.png
Binary file added ui/src/main/resources/image/emojis/1fab9.png
Binary file added ui/src/main/resources/image/emojis/1faba.png
Binary file added ui/src/main/resources/image/emojis/1fac3-1f3fb.png
Binary file added ui/src/main/resources/image/emojis/1fac3-1f3fc.png
Binary file added ui/src/main/resources/image/emojis/1fac3-1f3fd.png
Binary file added ui/src/main/resources/image/emojis/1fac3-1f3fe.png
Binary file added ui/src/main/resources/image/emojis/1fac3-1f3ff.png
Binary file added ui/src/main/resources/image/emojis/1fac3.png
Binary file added ui/src/main/resources/image/emojis/1fac4-1f3fb.png
Binary file added ui/src/main/resources/image/emojis/1fac4-1f3fc.png
Binary file added ui/src/main/resources/image/emojis/1fac4-1f3fd.png
Binary file added ui/src/main/resources/image/emojis/1fac4-1f3fe.png
Binary file added ui/src/main/resources/image/emojis/1fac4-1f3ff.png
Binary file added ui/src/main/resources/image/emojis/1fac4.png
Binary file added ui/src/main/resources/image/emojis/1fac5-1f3fb.png
Binary file added ui/src/main/resources/image/emojis/1fac5-1f3fc.png
Binary file added ui/src/main/resources/image/emojis/1fac5-1f3fd.png
Binary file added ui/src/main/resources/image/emojis/1fac5-1f3fe.png
Binary file added ui/src/main/resources/image/emojis/1fac5-1f3ff.png
Binary file added ui/src/main/resources/image/emojis/1fac5.png
Binary file added ui/src/main/resources/image/emojis/1fad7.png
Binary file added ui/src/main/resources/image/emojis/1fad8.png
Binary file added ui/src/main/resources/image/emojis/1fad9.png
Binary file added ui/src/main/resources/image/emojis/1fae0.png
Binary file added ui/src/main/resources/image/emojis/1fae1.png
Binary file added ui/src/main/resources/image/emojis/1fae2.png
Binary file added ui/src/main/resources/image/emojis/1fae3.png
Binary file added ui/src/main/resources/image/emojis/1fae4.png
Binary file added ui/src/main/resources/image/emojis/1fae5.png
Binary file added ui/src/main/resources/image/emojis/1fae6.png
Binary file added ui/src/main/resources/image/emojis/1fae7.png
Binary file added ui/src/main/resources/image/emojis/1faf0-1f3fb.png
Binary file added ui/src/main/resources/image/emojis/1faf0-1f3fc.png
Binary file added ui/src/main/resources/image/emojis/1faf0-1f3fd.png
Binary file added ui/src/main/resources/image/emojis/1faf0-1f3fe.png
Binary file added ui/src/main/resources/image/emojis/1faf0-1f3ff.png
Binary file added ui/src/main/resources/image/emojis/1faf0.png
Loading

0 comments on commit 26eba5d

Please sign in to comment.