aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Gultsch <daniel@gultsch.de>2014-09-04 10:16:28 +0200
committerDaniel Gultsch <daniel@gultsch.de>2014-09-04 10:16:28 +0200
commit50f90d37b8a873a523da9bfcafdd3984451f9549 (patch)
tree817f0030df7c8676c80aaf93a2376c0a7c79f3a6
parent6b9219c5f4b81172edafae31b705fec3ef56b3f6 (diff)
parent0a2c73f2469fe359162b5c973f86ea2e409272ac (diff)
Merge pull request #417 from emdete/unicode_emoticons
improve regex, implement pattern cache
-rw-r--r--src/eu/siacs/conversations/utils/UIHelper.java48
1 files changed, 32 insertions, 16 deletions
diff --git a/src/eu/siacs/conversations/utils/UIHelper.java b/src/eu/siacs/conversations/utils/UIHelper.java
index 41724596..896bdb7d 100644
--- a/src/eu/siacs/conversations/utils/UIHelper.java
+++ b/src/eu/siacs/conversations/utils/UIHelper.java
@@ -544,24 +544,40 @@ public class UIHelper {
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) {
if (body != null) {
- for (String[] r: new String[][]{ // see https://de.wikipedia.org/wiki/Unicodeblock_Smileys
- {":-?\\)", " 😀 ", },
- {";-?\\)", " 😉 ", },
- {":-?D", " 😃 ", },
- {":-?[Ppb]", " 😋 ", },
- {"8-?\\)", " 😎 ", },
- {":-?\\|", " 😐 ", },
- {":-?[/\\\\]", " 😕 ", },
- {":-?\\*", " 😗 ", },
- {":-?[0Oo]", " 😮 ", },
- {":-?\\(", " 😞 ", },
- {"\\^\\^", " 😁 ", },
- }) {
- String p = r[0];
- p = "(^" + p + "$|^" + p + "\\s+|\\s+" + p + "\\s+|\\s+" + p + "$)";
- body = body.replaceAll(p, r[1]);
+ for (EmoticonPattern p: patterns) {
+ body = p.replaceAll(body);
}
body = body.trim();
}