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.BasicFilter;
import cn.newgxu.bbs.common.filter.Filter;
import cn.newgxu.bbs.common.filter.FilterUtil;
/**
*
* @author polly
* @since 4.0.0
* @version $Revision 1.1$
*/
public class FontFilter extends AbstractBaseFilter {
public FontFilter(Filter filter) {
super(filter);
}
private static final String FONT_PATTERN_STRING = "\\[size=([1-4])\\](.*?)(\\[\\/size\\])|"
+ "\\[face=(.*)\\](.*?)(\\[\\/face\\])|"
+ "\\[align=(.*)\\](.*?)(\\[\\/align\\])|"
+ "\\[em([0-9]*)\\]|\\[face([0-9]*)\\]|\\[B\\](.*?)(\\[\\/B\\])|"
+ "\\[I\\](.*?)(\\[\\/I\\])|\\[U\\](.*?)(\\[\\/U\\])|"
+ "\\[center\\](.*?)(\\[\\/center\\])|"
+ "\\[glow=(.+),(.+),(.+)\\]([^\\[]+)\\[/glow\\]|"
+ "\\[SHADOW=(.+),(.+),(.+)\\]([^\\[]+)\\[/SHADOW\\]";
private static final String FONT_APPEND_1 = "<font size=";
private static final String FONT_APPEND_2 = ">";
private static final String FONT_APPEND_3 = "</font>";
private static final String FONT_APPEND_4 = "<font face=";
private static final String FONT_APPEND_5 = "<div align=";
private static final String FONT_APPEND_6 = "<img src=\"/images/newTopic/em";
private static final String FONT_APPEND_7 = "<img src=\"/images/face/face";
private static final String FONT_APPEND_8 = ".gif\" />";
private static final String FONT_APPEDN_9 = "</div>";
private static final String FONT_APPEND_10 = "<b>";
private static final String FONT_APPEND_11 = "</b>";
private static final String FONT_APPEND_12 = "<i>";
private static final String FONT_APPEND_13 = "</i>";
private static final String FONT_APPEND_14 = "<u>";
private static final String FONT_APPEND_15 = "</u>";
private static final String FONT_APPEND_16 = "<center>";
private static final String FONT_APPEND_17 = "</center>";
private static final String FONT_APPEND_18 = "<TABLE style=\"FILTER: glow(color=";
private static final String FONT_APPEND_19 = ", strength=";
private static final String FONT_APPEND_20 = ")\" width=";
private static final String FONT_APPEND_21 = "><TBODY><TR><TD>";
private static final String FONT_APPEND_22 = "</TD></TR></TBODY></TABLE>";
private static final String FONT_APPEND_23 = "<DIV style=\"FILTER: shadow(color=";
private static final String FONT_APPEND_24 = ", strength=";
private static final String FONT_APPEND_25 = "); WIDTH: ";
private static final String FONT_APPEND_26 = "px\">";
private static final String FONT_APPEND_27 = "</DIV>";
/*-------------------------------------------*/
// private static final String COLOR_PATTERN_STRING = "\\[color=(#?[a-z0-9]*)\\](.+?)\\[\\/color\\]";
//
// private static final String COLOR_APPEND_1 = "<font color=\"";
//
// private static final String COLOR_APPEND_2 = "\">";
//
// private static final String COLOR_APPEND_3 = "</font>";
public String convert(String input) {
try {
return fontConverter(input);
} catch (Exception e) {
return input;
}
}
private String fontConverter(String input) throws Exception {
Pattern pattern = Pattern.compile(FONT_PATTERN_STRING, 2);
Matcher matcher = pattern.matcher(input);
StringBuffer stringbuffer = new StringBuffer();
for (boolean flag = matcher.find(); flag; flag = matcher.find()) {
if (matcher.group(1) != null) {
matcher.appendReplacement(stringbuffer, FONT_APPEND_1
+ fontConverter(matcher.group(1)) + FONT_APPEND_2
+ matcher.group(2) + FONT_APPEND_3);
continue;
}
else if (matcher.group(4) != null) {
matcher.appendReplacement(stringbuffer, FONT_APPEND_4
+ fontConverter(matcher.group(4)) + FONT_APPEND_2
+ matcher.group(5) + FONT_APPEND_3);
continue;
}
else if (matcher.group(7) != null) {
matcher.appendReplacement(stringbuffer, FONT_APPEND_5
+ fontConverter(matcher.group(7)) + FONT_APPEND_2
+ matcher.group(8) + FONT_APPEDN_9);
continue;
}
else if (matcher.group(10) != null) {
matcher.appendReplacement(stringbuffer, FONT_APPEND_6
+ fontConverter(matcher.group(10)) + FONT_APPEND_8);
}
else if (matcher.group(11) != null) {
matcher.appendReplacement(stringbuffer, FONT_APPEND_7
+ fontConverter(matcher.group(11)) + FONT_APPEND_8);
}
else if (matcher.group(12) != null) {
matcher.appendReplacement(stringbuffer, FONT_APPEND_10
+ fontConverter(matcher.group(12)) + FONT_APPEND_11);
}
else if (matcher.group(14) != null) {
matcher.appendReplacement(stringbuffer, FONT_APPEND_12
+ fontConverter(matcher.group(14)) + FONT_APPEND_13);
}
else if (matcher.group(16) != null) {
matcher.appendReplacement(stringbuffer, FONT_APPEND_14
+ fontConverter(matcher.group(16)) + FONT_APPEND_15);
}
else if (matcher.group(18) != null) {
matcher.appendReplacement(stringbuffer, FONT_APPEND_16
+ fontConverter(matcher.group(18)) + FONT_APPEND_17);
}
else if (matcher.group(23) != null) {
matcher.appendReplacement(stringbuffer, FONT_APPEND_18
+ matcher.group(21) + FONT_APPEND_19
+ matcher.group(22) + FONT_APPEND_20
+ matcher.group(20) + FONT_APPEND_21
+ matcher.group(23) + FONT_APPEND_22);
}
else if (matcher.group(27) != null) {
matcher.appendReplacement(stringbuffer, FONT_APPEND_23
+ matcher.group(25) + FONT_APPEND_24
+ matcher.group(26) + FONT_APPEND_25
+ matcher.group(24) + FONT_APPEND_26
+ matcher.group(27) + FONT_APPEND_27);
}
}
matcher.appendTail(stringbuffer);
return stringbuffer.toString();
}
public static void main(String[] args) {
System.out
.println(new FontFilter(new BasicFilter())
.convert("原文是[color=#B3B34D][face=新宋体][size=2]不会吧,~~~~~~这样么,我也来试试[/size][/face][/color]"));
System.out
.println(FilterUtil
.replyContent("原文是[color=#B3B34D][face=新宋体][size=2]不会吧,~~~~~~这样么,我也来试试[/size][/face][/color]"));
}
}