MarkerFilter.java
上传用户:yuyunping
上传日期:2013-03-21
资源大小:1844k
文件大小:4k
源码类别:

Java书籍

开发平台:

Java

  1. package net.acai.filter;
  2. import java.util.*;
  3. public class MarkerFilter {
  4.     private boolean  filteringSubject;
  5.     private boolean  filteringBody;
  6. private HashMap colors;
  7. private String[] colorList;
  8. private String defaultColor;
  9.    /**
  10.     * Creates a new filter not associated with a message. This is
  11.     * generally only useful for defining a template filter that other
  12.     * filters will be cloned from.
  13.     */
  14.     public MarkerFilter() {
  15.         filteringSubject = false;
  16.         filteringBody = true;
  17.         colors = new HashMap(12);
  18.         colors.put("yellow", "#ffffaa");
  19.         colors.put("orange", "#ffaa88");
  20.         colors.put("purple", "#ffaaff");
  21.         colors.put("cyan", "#aaffff");
  22.         colors.put("red", "#ff8888");
  23.         colors.put("green", "#88ffaa");
  24.         colors.put("blue", "#88aaff");
  25.         colors.put("gray", "#cccccc");
  26. colorList = (String[])colors.values().toArray(new String[colors.size()]);
  27.         defaultColor = "#ffffaa";
  28.     }
  29.     /**
  30.      * This method takes a string which may contain [img path] or [img=path] tags
  31.      * and replaces them with working image links. It does this
  32.      * by adding the html tag <img src="path">.
  33.      * <p>
  34.      * It also replaces a list of predefined strings with image links.
  35.      * These can for instance show smiley's instead of the :), :-( ascii.
  36.      *
  37.      * @param input the text to be converted.
  38.      * @return the input string with the URLs replaced with links.
  39.      */
  40.     public String hiliteText(String input) {
  41.         // Check if the string is null or zero length
  42.         //  -- if so, return what was sent in.
  43.         if (input == null || input.length() == 0 ) {
  44.             return input;
  45.         }
  46. // Build the response in a buffer
  47.         StringBuffer buf = new StringBuffer(input.length() + 100);
  48.         char[] chars = input.toCharArray();
  49.         String color = null;
  50.         
  51.         int index = -1, i = 0;
  52.         int n, m;
  53.         int patStart, patEnd;
  54.         int colStart;
  55.         int oldend = 0;
  56.         int len = input.length();
  57.         char cur;
  58. // handle the [img] pattern and the predefined strings replacements
  59.         while (++index < len) {
  60.          cur = chars[i = index];
  61.          if (index + 6 < len &&
  62.          cur == '[' && chars[++i] == 'm' && chars[++i] == 'a' && chars[++i] == 'r' &&chars[++i] == 'k') {
  63. // strip spaces
  64. while (++i < len && (chars[i] == ' ' || chars[i] == '='))
  65. ;
  66. if (i < len) {
  67. // find the end of the tag
  68. colStart = i--;
  69. while (++i < len && chars[i] != ']')
  70. ;
  71. if (colStart < i) {
  72. String arg = new String(chars, colStart, i-colStart);
  73. color = (String)colors.get(arg);
  74. if (color == null && "random".equals(arg)) {
  75. color = colorList[(int)(Math.random() * colorList.length)];
  76. }
  77. }
  78. if (color == null)
  79. color = defaultColor;
  80. if (++i < len) {
  81. patStart = patEnd = i;
  82.         while (++patEnd < len) {
  83.          if (patEnd + 6 < len &&
  84.          chars[i = patEnd] == '[' && chars[++i] == '/' && chars[++i] == 'm' && chars[++i] == 'a' &&
  85.          chars[++i] == 'r' && chars[++i] == 'k' && chars[++i] == ']') {
  86.          break;
  87.          }
  88.         }
  89.         buf.append(chars, oldend, index-oldend);
  90.         buf.append("<B style="background-color:").append(color).append("">");
  91.         buf.append(chars, patStart, patEnd-patStart);
  92.         buf.append("</B>");
  93. oldend = (patEnd > i) ? patEnd : i + 1;
  94. }
  95. }
  96.         index = i;
  97.          }
  98.         }
  99.         if (oldend < len) {
  100.         buf.append(chars, oldend, len-oldend);
  101.         }
  102.         return buf.toString();
  103.     }
  104. public static void main(String args[]){
  105. try{
  106. MarkerFilter filter=new MarkerFilter();
  107. String test="[mark red]asdf[/mark]";
  108. }
  109. catch(Exception e){
  110. e.printStackTrace();
  111. }
  112. }
  113. }