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); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	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(); | ||||
| 		} | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Daniel Gultsch
						Daniel Gultsch