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 URLFilter extends AbstractBaseFilter {
private static final String URL_PATTERN_STRING = "(\\[(url)((=(((http://)|(ftp://))?)([^\\[]*))?)\\])"
+ "((((http://)|(ftp://))?)([^\\[]*))(\\[(\\/url)\\])";
private static final String URL_APPEND_1 = "<a target=\"_blank\" href=\"";
private static final String URL_APPEND_2 = "";
private static final String URL_APPEND_3 = "\">";
private static final String URL_APPEND_4 = "</a>";
public URLFilter(Filter filter) {
super(filter);
}
@Override
protected String convert(String str) {
Pattern pattern = Pattern.compile(URL_PATTERN_STRING, 2);
Matcher matcher = pattern.matcher(str);
StringBuffer stringbuffer = new StringBuffer();
for (boolean flag = matcher.find(); flag; flag = matcher.find()) {
matcher.appendReplacement(stringbuffer, URL_APPEND_1);
if (!matcher.group(3).equals("")) {
if (matcher.group(5).equals("")) {
if (matcher.group(10) == null) {
stringbuffer.append(URL_APPEND_2 + matcher.group(9)
+ URL_APPEND_3 + matcher.group(9)
+ URL_APPEND_4);
} else {
stringbuffer.append(URL_APPEND_2 + matcher.group(9)
+ URL_APPEND_3 + matcher.group(10)
+ URL_APPEND_4);
}
continue;
}
if (matcher.group(10) == null) {
stringbuffer.append(matcher.group(5) + matcher.group(9)
+ URL_APPEND_3 + matcher.group(5)
+ matcher.group(9) + URL_APPEND_4);
} else {
stringbuffer.append(matcher.group(5) + matcher.group(9)
+ URL_APPEND_3 + matcher.group(10) + URL_APPEND_4);
}
continue;
}
if ("".equals(matcher.group(11))) {
stringbuffer.append(URL_APPEND_2 + matcher.group(10)
+ URL_APPEND_3 + matcher.group(10) + URL_APPEND_4);
} else {
stringbuffer.append(matcher.group(10) + URL_APPEND_3
+ matcher.group(10) + URL_APPEND_4);
}
}
matcher.appendTail(stringbuffer);
return stringbuffer.toString();
}
}