Merge pull request #417 from emdete/unicode_emoticons
improve regex, implement pattern cache
This commit is contained in:
commit
50f90d37b8
|
@ -544,24 +544,40 @@ public class UIHelper {
|
||||||
return getContactPicture(account.getJid(), size, context, false);
|
return getContactPicture(account.getJid(), size, context, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private final static class EmoticonPattern {
|
||||||
|
Pattern pattern;
|
||||||
|
String replacement;
|
||||||
|
EmoticonPattern(String ascii, int unicode) {
|
||||||
|
this.pattern = Pattern.compile("(?<=(^|\\s))" + ascii + "(?=(\\s|$))");
|
||||||
|
this.replacement = new String(new int[]{unicode, }, 0, 1);
|
||||||
|
}
|
||||||
|
String replaceAll(String body) {
|
||||||
|
return pattern.matcher(body).replaceAll(replacement);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final EmoticonPattern[] patterns = new EmoticonPattern[] {
|
||||||
|
new EmoticonPattern(":-?D", 0x1f600),
|
||||||
|
new EmoticonPattern("\\^\\^", 0x1f601),
|
||||||
|
new EmoticonPattern(":'D", 0x1f602),
|
||||||
|
new EmoticonPattern("\\]-?D", 0x1f608),
|
||||||
|
new EmoticonPattern(";-?\\)", 0x1f609),
|
||||||
|
new EmoticonPattern(":-?\\)", 0x1f60a),
|
||||||
|
new EmoticonPattern("[B8]-?\\)", 0x1f60e),
|
||||||
|
new EmoticonPattern(":-?\\|", 0x1f610),
|
||||||
|
new EmoticonPattern(":-?[/\\\\]", 0x1f615),
|
||||||
|
new EmoticonPattern(":-?\\*", 0x1f617),
|
||||||
|
new EmoticonPattern(":-?[Ppb]", 0x1f61b),
|
||||||
|
new EmoticonPattern(":-?\\(", 0x1f61e),
|
||||||
|
new EmoticonPattern(":-?[0Oo]", 0x1f62e),
|
||||||
|
new EmoticonPattern("\\\\o/", 0x1F631),
|
||||||
|
};
|
||||||
|
|
||||||
public static String transformAsciiEmoticons(String body) {
|
public static String transformAsciiEmoticons(String body) {
|
||||||
if (body != null) {
|
if (body != null) {
|
||||||
for (String[] r: new String[][]{ // see https://de.wikipedia.org/wiki/Unicodeblock_Smileys
|
for (EmoticonPattern p: patterns) {
|
||||||
{":-?\\)", " 😀 ", },
|
body = p.replaceAll(body);
|
||||||
{";-?\\)", " 😉 ", },
|
|
||||||
{":-?D", " 😃 ", },
|
|
||||||
{":-?[Ppb]", " 😋 ", },
|
|
||||||
{"8-?\\)", " 😎 ", },
|
|
||||||
{":-?\\|", " 😐 ", },
|
|
||||||
{":-?[/\\\\]", " 😕 ", },
|
|
||||||
{":-?\\*", " 😗 ", },
|
|
||||||
{":-?[0Oo]", " 😮 ", },
|
|
||||||
{":-?\\(", " 😞 ", },
|
|
||||||
{"\\^\\^", " 😁 ", },
|
|
||||||
}) {
|
|
||||||
String p = r[0];
|
|
||||||
p = "(^" + p + "$|^" + p + "\\s+|\\s+" + p + "\\s+|\\s+" + p + "$)";
|
|
||||||
body = body.replaceAll(p, r[1]);
|
|
||||||
}
|
}
|
||||||
body = body.trim();
|
body = body.trim();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue