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 New Issue
	
	 Daniel Gultsch
						Daniel Gultsch