📄 emoticon.java
字号:
/** * $RCSfile: Emoticon.java,v $ * $Revision: 1.2 $ * $Date: 2002/04/01 17:50:13 $ * * Copyright (C) 1999-2002 CoolServlets, Inc. All rights reserved. * * This software is the proprietary information of CoolServlets, Inc. * Use is subject to license terms. */package com.jivesoftware.forum.filter;import com.jivesoftware.forum.*;/** * A ForumMessageFilter that converts ASCII emoticons into image equivalents. * This filter should only be run after any HTML stripping filters.<p> * * The filter must be configured with information about where the image files * are located. A table containing all the supported emoticons with their * ASCII representations and image file names is as follows:<p> * * <table border=1> * <tr><td><b>Emotion</b></td><td><b>ASCII</b></td><td><b>Image</b></td></tr> * * <tr><td>Happy</td><td>:) or :-)</td><td>happy.gif</td></tr> * <tr><td>Sad</td><td>:( or :-(</td><td>sad.gif</td></tr> * <tr><td>Grin</td><td>:D</td><td>grin.gif</td></tr> * <tr><td>Love</td><td>:x</td><td>love.gif</td></tr> * <tr><td>Mischief</td><td>;\</td><td>mischief.gif</td></tr> * <tr><td>Cool</td><td>B-)</td><td>cool.gif</td></tr> * <tr><td>Devil</td><td>]:)</td><td>devil.gif</td></tr> * <tr><td>Silly</td><td>:p</td><td>silly.gif</td></tr> * <tr><td>Angry</td><td>X-(</td><td>angry.gif</td></tr> * <tr><td>Laugh</td><td>:^O</td><td>laugh.gif</td></tr> * <tr><td>Wink</td><td>;) or ;-)</td><td>wink.gif</td></tr> * <tr><td>Blush</td><td>:8}</td><td>blush.gif</td></tr> * <tr><td>Cry</td><td>:_|</td><td>cry.gif</td></tr> * <tr><td>Confused</td><td>?:|</td><td>consused.gif</td></tr> * <tr><td>Shocked</td><td>:O</td><td>shocked.gif</td></tr> * <tr><td>Plain</td><td>:|</td><td>plain.gif</td></tr> * </table> * * Note: special thanks to August Harrison for implementing an earlier version * of this filter. */public class Emoticon extends ForumMessageFilter { private static String imageHappy = "happy.gif"; private static String imageSad = "sad.gif"; private static String imageGrin = "grin.gif"; private static String imageLove = "love.gif"; private static String imageMischief = "mischief.gif"; private static String imageCool = "cool.gif"; private static String imageDevil = "devil.gif"; private static String imageSilly = "silly.gif"; private static String imageAngry = "angry.gif"; private static String imageLaugh = "laugh.gif"; private static String imageWink = "wink.gif"; private static String imageBlush = "blush.gif"; private static String imageCry = "cry.gif"; private static String imageConfused = "confused.gif"; private static String imageShocked = "shocked.gif"; private static String imagePlain = "plain.gif"; private String imageURL ="images/emoticons"; private boolean filteringSubject = false; private boolean filteringBody = true; /** * Clones a new filter that will have the same properties and that * will wrap around the specified message. * * @param message the ForumMessage to wrap the new filter around. */ public ForumMessageFilter clone(ForumMessage message){ Emoticon filter = new Emoticon(); // Set all properties on the new filter. filter.message = message; filter.imageURL = imageURL; filter.filteringSubject = filteringSubject; filter.filteringBody = filteringBody; return filter; } //FROM FORUMMESSAGEFILTER// public boolean isCacheable() { return true; } //FROM THE FORUMMESSAGE INTERFACE// /** * <b>Overloaded</b> to return the subject of the message with ASCII emoticons * translated to images. * * @return the subject of the message with emoticon tokens replaced by images. */ public String getSubject() { if (filteringSubject) { return convertEmoticons(message.getSubject()); } else { return message.getSubject(); } } /** * <b>Overloaded</b> to return the body of the message with ASCII emoticons * translated to images. * * @return the body of the message with emoticon tokens replaced by images. */ public String getBody() { if (filteringBody) { return convertEmoticons(message.getBody()); } else { return message.getBody(); } } //FILTER PROPERTIES// /** * Returns the base URL for emoticon images. This can be specified as * an absolute or relative path. * * @return the base URL for smiley images. */ public String getImageURL() { return imageURL; } /** * Sets the base URL for emoticon images. This can be specified as * an absolute or relative path. * * @param imageURL the base URL for emoticon images. */ public void setImageURL(String imageURL) { if (imageURL != null && imageURL.length() > 0) { if (imageURL.charAt(imageURL.length()-1) == '/') { imageURL = imageURL.substring(0, imageURL.length()-1); } } this.imageURL = imageURL; } /** * Returns true if filtering on the subject is enabled. * * @return true if filtering on the subject is enabled. */ public boolean isFilteringSubject() { return filteringSubject; } /** * Enables or disables filtering on the subject. * * @param filteringSubject toggle value for filtering on subject. */ public void setFilteringSubject(boolean filteringSubject) { this.filteringSubject = filteringSubject; } /** * Returns true if filtering on the body is enabled. * * @return true if filtering on the body is enabled. */ public boolean isFilteringBody() { return filteringBody; } /** * Enables or disables filtering on the body. * * @param filteringBody toggle value for filtering on body. */ public void setFilteringBody(boolean filteringBody) { this.filteringBody = filteringBody; } /** * Returns an HTML image tag using the base image URL and image name. */ private String buildURL( String imageName ) { String tag = "<img border=\"0\" src=\""+imageURL+"/"+imageName+"\">"; return tag; } /** * Converts any ASCII emoticons into image equivalents. * * @param input the text to be converted. * @return the input string with the ASCII emoticons replaced with the image * tags. */ private String convertEmoticons(String input) { // Check if the string is null or zero length or if filter is not enabled //or imageURL has not been set if so, return what was sent in. if( input == null || input.length() == 0) { return input; } // Placeholders for the built img tags String imgHappy = null; String imgSad = null; String imgGrin = null; String imgLove = null; String imgMischief = null; String imgCool = null; String imgDevil = null; String imgSilly = null; String imgAngry = null; String imgLaugh = null; String imgWink = null; String imgBlush = null; String imgCry = null; String imgConfused = null; String imgShocked = null; String imgPlain = null; // Build the response in a buffer StringBuffer buf = new StringBuffer(input.length() + 100); char[] chars = input.toCharArray(); int len = input.length(); int len1 = len - 1; int len2 = len - 2; int index = -1, i = 0; int oldend = 0; String imgTag; // Replace each of the emoticons, expanded search for performance while (++index < len1) { // no tag found yet... imgTag = null; switch (chars[i = index]) { default: break; case ']': // "]:)" if (i < len2 && chars[++i] == ':' && chars[++i] == ')') imgTag = imgDevil == null ? imgDevil = buildURL(imageDevil) : imgDevil; break; case ':': switch (chars[++i]) { default: break; case ')': // ":)" imgTag = imgHappy == null ? imgHappy = buildURL(imageHappy) : imgHappy; break; case '-': // ":-)" if (i < len1 && chars[++i] == ')') imgTag = imgHappy == null ? imgHappy = buildURL(imageHappy) : imgHappy; // ":-(" else if (chars[i] == '(') imgTag = imgSad == null ? imgSad = buildURL(imageSad) : imgSad; break; case '(': // ":(" imgTag = imgSad == null ? imgSad = buildURL(imageSad) : imgSad; break; case 'D': // ":D" imgTag = imgGrin == null ? imgGrin = buildURL(imageGrin) : imgGrin; break; case 'x': // ":x" imgTag = imgLove == null ? imgLove = buildURL(imageLove) : imgLove; break; case 'p': // ":p" imgTag = imgSilly == null ? imgSilly = buildURL(imageSilly) : imgSilly; break; case '^': // ":^O" if (i < len1 && chars[++i] == 'O') imgTag = imgLaugh == null ? imgLaugh = buildURL(imageLaugh) : imgLaugh; break; case '8': // ":8}" if (i < len1 && chars[++i] == '}') imgTag = imgBlush == null ? imgBlush = buildURL(imageBlush) : imgBlush; break; case '_': // ":_|" if (i < len1 && chars[++i] == '|') imgTag = imgCry == null ? imgCry = buildURL(imageCry) : imgCry; break; case 'O': // ":O" imgTag = imgShocked == null ? imgShocked = buildURL(imageShocked) : imgShocked; break; case '|': // ":|" imgTag = imgPlain == null ? imgPlain = buildURL(imagePlain) : imgPlain; break; } break; case ';': switch (chars[++i]) { default: break; case ')': // ";)" imgTag = imgWink == null ? imgWink = buildURL(imageWink) : imgWink; break; case '-': // ";-)" if (i < len1 && chars[++i] == ')') imgTag = imgWink == null ? imgWink = buildURL(imageWink) : imgWink; break; case '\\': // ";\\" imgTag = imgMischief == null ? imgMischief = buildURL(imageMischief) : imgMischief; break; } break; case 'B': // "B-)" if (i < len2 && chars[++i] == '-' && chars[++i] == ')') imgTag = imgCool == null ? imgCool = buildURL(imageCool) : imgCool; break; case 'X': // "X-(" if (i < len2 && chars[++i] == '-' && chars[++i] == '(') imgTag = imgAngry == null ? imgAngry = buildURL(imageAngry) : imgAngry; break; case '?': // "?:|" if (i < len2 && chars[++i] == ':' && chars[++i] == '|') imgTag = imgConfused == null ? imgConfused = buildURL(imageConfused) : imgConfused; break; } // if we found one, replace if (imgTag != null) { buf.append(chars, oldend, index-oldend); buf.append(imgTag); oldend = i + 1; index = i; } } if (oldend < len) { buf.append(chars, oldend, len-oldend); } return buf.toString(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -