Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,711 changes: 938 additions & 773 deletions EMOJIS.md

Large diffs are not rendered by default.

11 changes: 11 additions & 0 deletions src/main/java/com/vdurmont/emoji/Emoji.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ public class Emoji {
private final List<String> aliases;
private final List<String> tags;
private final String unicode;
private final String unicodeWithoutVariationSelectors;
private final String htmlDec;
private final String htmlHex;

Expand Down Expand Up @@ -44,6 +45,7 @@ protected Emoji(
int count = 0;
try {
this.unicode = new String(bytes, "UTF-8");
this.unicodeWithoutVariationSelectors = this.unicode.replaceAll("\ufe0f", "");
int stringLength = getUnicode().length();
String[] pointCodes = new String[stringLength];
String[] pointCodesHex = new String[stringLength];
Expand Down Expand Up @@ -144,6 +146,15 @@ public String getUnicode(Fitzpatrick fitzpatrick) {
return this.getUnicode() + fitzpatrick.unicode;
}

/**
* Returns the normalized unicode representation of the emoji
*
* @return the normalized unicode representation
*/
public String getUnicodeWithoutVariationSelectors() {
return this.unicodeWithoutVariationSelectors;
}

/**
* Returns the HTML decimal representation of the emoji
*
Expand Down
11 changes: 10 additions & 1 deletion src/main/java/com/vdurmont/emoji/EmojiParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ public static String parseToAliases(
String input,
final FitzpatrickAction fitzpatrickAction
) {
input = input.replaceAll("\ufe0f", "");
EmojiTransformer emojiTransformer = new EmojiTransformer() {
public String transform(UnicodeCandidate unicodeCandidate) {
switch (fitzpatrickAction) {
Expand Down Expand Up @@ -87,6 +88,7 @@ public String transform(UnicodeCandidate unicodeCandidate) {
* @return the string with replaced character
*/
public static String replaceAllEmojis(String str, final String replacementString) {
str = str.replaceAll("\ufe0f", "");
EmojiParser.EmojiTransformer emojiTransformer = new EmojiParser.EmojiTransformer() {
public String transform(EmojiParser.UnicodeCandidate unicodeCandidate) {
return replacementString;
Expand All @@ -111,6 +113,7 @@ public String transform(EmojiParser.UnicodeCandidate unicodeCandidate) {
* their unicode.
*/
public static String parseToUnicode(String input) {
input = input.replaceAll("\ufe0f", "");
StringBuilder sb = new StringBuilder(input.length());

for (int last = 0; last < input.length(); last++) {
Expand Down Expand Up @@ -229,6 +232,7 @@ public static String parseToHtmlDecimal(
String input,
final FitzpatrickAction fitzpatrickAction
) {
input = input.replaceAll("\ufe0f", "");
EmojiTransformer emojiTransformer = new EmojiTransformer() {
public String transform(UnicodeCandidate unicodeCandidate) {
switch (fitzpatrickAction) {
Expand Down Expand Up @@ -284,6 +288,7 @@ public static String parseToHtmlHexadecimal(
String input,
final FitzpatrickAction fitzpatrickAction
) {
input = input.replaceAll("\ufe0f", "");
EmojiTransformer emojiTransformer = new EmojiTransformer() {
public String transform(UnicodeCandidate unicodeCandidate) {
switch (fitzpatrickAction) {
Expand All @@ -309,6 +314,7 @@ public String transform(UnicodeCandidate unicodeCandidate) {
* @return the string without any emoji
*/
public static String removeAllEmojis(String str) {
str = str.replaceAll("\ufe0f", "");
EmojiTransformer emojiTransformer = new EmojiTransformer() {
public String transform(UnicodeCandidate unicodeCandidate) {
return "";
Expand All @@ -331,6 +337,7 @@ public static String removeEmojis(
String str,
final Collection<Emoji> emojisToRemove
) {
str = str.replaceAll("\ufe0f", "");
EmojiTransformer emojiTransformer = new EmojiTransformer() {
public String transform(UnicodeCandidate unicodeCandidate) {
if (!emojisToRemove.contains(unicodeCandidate.getEmoji())) {
Expand All @@ -356,6 +363,7 @@ public static String removeAllEmojisExcept(
String str,
final Collection<Emoji> emojisToKeep
) {
str = str.replaceAll("\ufe0f", "");
EmojiTransformer emojiTransformer = new EmojiTransformer() {
public String transform(UnicodeCandidate unicodeCandidate) {
if (emojisToKeep.contains(unicodeCandidate.getEmoji())) {
Expand Down Expand Up @@ -383,6 +391,7 @@ public static String parseFromUnicode(
String input,
EmojiTransformer transformer
) {
input = input.replaceAll("\ufe0f", "");
int prev = 0;
StringBuilder sb = new StringBuilder(input.length());
List<UnicodeCandidate> replacements = getUnicodeCandidates(input);
Expand Down Expand Up @@ -526,7 +535,7 @@ public int getEmojiStartIndex() {
}

public int getEmojiEndIndex() {
return startIndex + emoji.getUnicode().length();
return startIndex + emoji.getUnicodeWithoutVariationSelectors().length();
}

public int getFitzpatrickEndIndex() {
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/vdurmont/emoji/EmojiTrie.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public EmojiTrie(Collection<Emoji> emojis) {
int maxDepth = 0;
for (Emoji emoji : emojis) {
Node tree = root;
char[] chars = emoji.getUnicode().toCharArray();
char[] chars = emoji.getUnicodeWithoutVariationSelectors().toCharArray();
maxDepth = Math.max(maxDepth, chars.length);
for (char c: chars) {
if (!tree.hasChild(c)) {
Expand Down
Loading