package cn.newgxu.bbs.common.filter.ubb; import java.util.regex.Matcher; import java.util.regex.Pattern; import cn.newgxu.bbs.common.filter.AbstractBaseFilter; import cn.newgxu.bbs.common.filter.Filter; /** * * @author polly * @since 4.0.0 * @version $Revision 1.1$ */ public class DirFilter extends AbstractBaseFilter { private static final String DIR_PATTERN_STRING = "\\[dir=(.+?),(.+?)\\](.+?)\\[\\/dir\\]"; private static final String DIR_APPEND_1 = "<br><OBJECT codeBase=http://" + "download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=" + "7,0,2,0 height=\""; private static final String DIR_APPEND_2 = "\" width=\""; private static final String DIR_APPEND_3 = "\" classid=clsid:166B1BCA-3F9C" + "-11CF-8075-444553540000><PARAM NAME=\"src\" VALUE=\""; private static final String DIR_APPEND_4 = "\"><embed src=\""; private static final String DIR_APPEND_5 = "\" pluginspage=http://" + "www.macromedia.com/shockwave/download/ width=\""; private static final String DIR_APPEND_6 = "\" height=\""; private static final String DIR_APPEND_7 = "\"></embed></OBJECT><br>"; public DirFilter(Filter filter) { super(filter); } public String convert(String input) { try { return dirConverter(input); } catch (Exception e) { return input; } } private String dirConverter(String input) throws Exception { Pattern pattern = Pattern.compile(DIR_PATTERN_STRING, 2); Matcher matcher = pattern.matcher(input); StringBuffer stringbuffer = new StringBuffer(); for (boolean flag = matcher.find(); flag; flag = matcher.find()) { matcher.appendReplacement(stringbuffer, DIR_APPEND_1 + matcher.group(2) + DIR_APPEND_2 + matcher.group(1) + DIR_APPEND_3 + matcher.group(3) + DIR_APPEND_4 + matcher.group(3) + DIR_APPEND_5 + matcher.group(1) + DIR_APPEND_6 + matcher.group(2) + DIR_APPEND_7); } matcher.appendTail(stringbuffer); return stringbuffer.toString(); } }