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 ddy * @since 4.0.0 * @version $Revision 1.1$ */ public class SizeFilter extends AbstractBaseFilter { private static final String SIZE_PATTERN_STRING = "\\[size=([1-5])\\](.*?)(\\[\\/size\\])"; private static final String SIZE_APPEND_1 = "<font size="; private static final String SIZE_APPEND_2 = ">"; private static final String SIZE_APPEND_3 = "</font>"; // 2010-06-28修改5号字体显示问题,如果是5号字体就添加<span块控制 private static final String SPAN_LINE_HEIGHT_BEFORE = "<span style=\"line-height:100%;\">"; private static final String SPAN_LINE_HEIGHT_AFTER = "</span>"; public SizeFilter(Filter filter) { super(filter); } public String convert(String input) { try { return sizeConverter(input); } catch (Exception e) { return input; } } private String sizeConverter(String input) throws Exception { Pattern pattern = Pattern.compile(SIZE_PATTERN_STRING, 2); Matcher matcher = pattern.matcher(input); StringBuffer sb = new StringBuffer(); for (boolean flag = matcher.find(); flag; flag = matcher.find()) { matcher .appendReplacement(sb, "" + SIZE_APPEND_1 + matcher.group(1) + SIZE_APPEND_2 + sizeChoiceLine(matcher.group(1)) + matcher.group(2) + SPAN_LINE_HEIGHT_AFTER + SIZE_APPEND_3); } matcher.appendTail(sb); return sb.toString(); } private String sizeChoiceLine(String s) { int i = Integer.parseInt(s); String str = ""; switch (i) { case 5: str = SPAN_LINE_HEIGHT_BEFORE; break; default: break; } return str; } }