package what.whatandroid.comments;
import android.text.SpannableStringBuilder;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Run through some user html comment text and substitute the smiley images
* with corresponding emoji so Android will show its build in smileys
*/
public class SmileyProcessor {
/**
* A map of all supported site emoticons to the equivalent (or sort of equivalent) emojis
* Note: The HTML side of this parsing should be removed once we can get the BB formatted
* text for all site content
*/
private static final Map<String, Pattern> emojisHtml;
/**
* Emoji bb codes used by the site, not that all characters are lowercase since
* the text is converted to lower case to simplify parsing
*/
private static final Map<String, String> emojisBB;
/**
* Scan through the passed what html user post and replace references to the site
* smilies with corresponding emoticons for emoji to pick up
*/
public static String smileyToEmoji(String s){
for (Map.Entry<String, Pattern> emoji : emojisHtml.entrySet()){
Matcher m = emoji.getValue().matcher(s);
s = m.replaceAll(emoji.getKey());
}
return s;
}
/**
* Find site bb formatted smilies in the text and convert them to emoji characters in the text
* and the spannable string
*
* @param ssb spannable string to convert emojis in
*/
public static void bbSmileytoEmoji(SpannableStringBuilder ssb){
//Take care of emoticons that have others as their prefix, ie. :ohnoes:, :ohno:, :omg:
//:ohno: is a prefix of :ohnoes: and :o is a prefix of all 3
String[] conflicts = {":ohnoes:", ":ohno:", ":omg:"};
for (String emoticon : conflicts){
String emoji = emojisBB.get(emoticon);
for (int i = WhatBBParser.indexOf(ssb, emoticon); i != -1; i = WhatBBParser.indexOf(ssb, emoticon, i)){
ssb.replace(i, i + emoticon.length(), emoji);
}
}
for (Map.Entry<String, String> e : emojisBB.entrySet()){
for (int i = WhatBBParser.indexOf(ssb, e.getKey()); i != -1; i = WhatBBParser.indexOf(ssb, e.getKey(), i)){
ssb.replace(i, i + e.getKey().length(), e.getValue());
}
}
}
static{
emojisHtml = new HashMap<String, Pattern>();
emojisHtml.put("😡", Pattern.compile("(<img [^>]*src=\"[^\"]+smileys/(angry|paddle).gif\"[^>]*>)"));
emojisHtml.put("😄", Pattern.compile("(<img [^>]*src=\"[^\"]+smileys/biggrin.gif\"[^>]*>)"));
emojisHtml.put("😐", Pattern.compile("(<img [^>]*src=\"[^\"]+smileys/blank.gif\"[^>]*>)"));
emojisHtml.put("😳", Pattern.compile("(<img [^>]*src=\"[^\"]+smileys/blush.gif\"[^>]*>)"));
emojisHtml.put("😎", Pattern.compile("(<img [^>]*src=\"[^\"]+smileys/cool.gif\"[^>]*>)"));
emojisHtml.put("😢", Pattern.compile("(<img [^>]*src=\"[^\"]+smileys/(crying|sad|sorry).gif\"[^>]*>)"));
emojisHtml.put("😙", Pattern.compile("(<img [^>]*src=\"[^\"]+smileys/eyesright.gif\"[^>]*>)"));
emojisHtml.put("😏", Pattern.compile("(<img [^>]*src=\"[^\"]+smileys/creepy.gif\"[^>]*>)"));
emojisHtml.put("😞", Pattern.compile("(<img [^>]*src=\"[^\"]+smileys/(frown|no).gif\"[^>]*>)"));
emojisHtml.put("❤", Pattern.compile("(<img [^>]*src=\"[^\"]+smileys/heart.gif\"[^>]*>)"));
emojisHtml.put("😔", Pattern.compile("(<img [^>]*src=\"[^\"]+smileys/hmm.gif\"[^>]*>)"));
emojisHtml.put("❤ What.CD", Pattern.compile("(<img [^>]*src=\"[^\"]+smileys/ilu.gif\"[^>]*>)"));
emojisHtml.put("😆", Pattern.compile("(<img [^>]*src=\"[^\"]+smileys/laughing.gif\"[^>]*>)"));
emojisHtml.put("❤ FLAC", Pattern.compile("(<img [^>]*src=\"[^\"]+smileys/loveflac.gif\"[^>]*>)"));
emojisHtml.put("😷", Pattern.compile("(<img [^>]*src=\"[^\"]+smileys/ninja.gif\"[^>]*>)"));
emojisHtml.put("😁", Pattern.compile("(<img [^>]*src=\"[^\"]+smileys/nod.gif\"[^>]*>)"));
emojisHtml.put("😨", Pattern.compile("(<img [^>]*src=\"[^\"]+smileys/ohnoes.gif\"[^>]*>)"));
emojisHtml.put("😲", Pattern.compile("(<img [^>]*src=\"[^\"]+smileys/(omg|ohshit|wtf).gif\"[^>]*>)"));
emojisHtml.put("😒", Pattern.compile("(<img [^>]*src=\"[^\"]+smileys/shifty.gif\"[^>]*>)"));
emojisHtml.put("😣", Pattern.compile("(<img [^>]*src=\"[^\"]+smileys/sick.gif\"[^>]*>)"));
emojisHtml.put("😊", Pattern.compile("(<img [^>]*src=\"[^\"]+smileys/smile.gif\"[^>]*>)"));
emojisHtml.put("😄 Thanks!", Pattern.compile("(<img [^>]*src=\"[^\"]+smileys/thanks.gif\"[^>]*>)"));
emojisHtml.put("😋", Pattern.compile("(<img [^>]*src=\"[^\"]+smileys/tongue.gif\"[^>]*>)"));
emojisHtml.put("👋", Pattern.compile("(<img [^>]*src=\"[^\"]+smileys/wave.gif\"[^>]*>)"));
emojisHtml.put("😉", Pattern.compile("(<img [^>]*src=\"[^\"]+smileys/wink.gif\"[^>]*>)"));
emojisHtml.put("😓", Pattern.compile("(<img [^>]*src=\"[^\"]+smileys/worried.gif\"[^>]*>)"));
emojisHtml.put("😍", Pattern.compile("(<img [^>]*src=\"[^\"]+smileys/wub.gif\"[^>]*>)"));
emojisBB = new HashMap<String, String>();
emojisBB.put(":angry:", "\uD83D\uDE21");
emojisBB.put(":paddle:", "\uD83D\uDE21");
emojisBB.put(":D", "\uD83D\uDE04");
emojisBB.put(":-D", "\uD83D\uDE04");
emojisBB.put(":|", "\uD83D\uDE10");
emojisBB.put(":-|", "\uD83D\uDE10");
emojisBB.put(":blush:", "\uD83D\uDE33");
emojisBB.put(":cool:", "\uD83D\uDE0E");
emojisBB.put(":'(", "\uD83D\uDE22");
emojisBB.put(":sorry:", "\uD83D\uDE22");
emojisBB.put(">.>", "\uD83D\uDE19");
emojisBB.put(":creepy:", "\uD83D\uDE0F");
emojisBB.put(":frown:", "\uD83D\uDE20");
emojisBB.put("<3", "\u2764\uFE0F");
emojisBB.put(":unsure:", "\uD83D\uDE1F");
emojisBB.put(":no:", "\uD83D\uDE1F");
emojisBB.put(":whatlove:", "\u2764\uFE0F What.CD");
emojisBB.put(":lol:", "\uD83D\uDE06");
emojisBB.put(":loveflac:", "\u2764\uFE0F FLAC");
emojisBB.put(":flaclove:", "\u2764\uFE0F FLAC");
emojisBB.put(":ninja:", "\uD83D\uDE37");
emojisBB.put(":nod:", "\uD83D\uDE0A");
emojisBB.put(":ohno:", "\uD83D\uDE27");
emojisBB.put(":ohnoes:", "\uD83D\uDE27");
emojisBB.put(":omg:", "\uD83D\uDE32");
emojisBB.put(":o", "\uD83D\uDE32");
emojisBB.put(":O", "\uD83D\uDE32");
emojisBB.put(":wtf:", "\uD83D\uDE32");
emojisBB.put(":(", "\uD83D\uDE1E");
emojisBB.put(":-(", "\uD83D\uDE1E");
emojisBB.put(":shifty:", "\uD83D\uDE12");
emojisBB.put(":sick:", "\uD83D\uDE30");
emojisBB.put(":)", "\uD83D\uDE00");
emojisBB.put(":-)", "\uD83D\uDE00");
emojisBB.put(":thanks:", "\uD83D\uDE04 Thanks!");
emojisBB.put(":P", "\uD83D\uDE1B");
emojisBB.put(":-P", "\uD83D\uDE1B");
emojisBB.put(":-p", "\uD83D\uDE1B");
emojisBB.put(":wave:", "\uD83D\uDC4B");
emojisBB.put(":wink:", "\uD83D\uDE09");
emojisBB.put(":worried:", "\uD83D\uDE2F");
emojisBB.put(":wub:", "\uD83D\uDE0D");
}
}