}
return WikipediaFilter.TokenIgnore;
}
fCurrentPosition++;
try {
CloseTagToken token = (CloseTagToken) WikipediaFilter.CLOSE_TAGS.get(closeTagString);
if (token == null) {
return WikipediaFilter.TokenNotFound;
}
if (!fTokenStack.isEmpty()) {
Object topToken = fTokenStack.peek();
if (topToken instanceof OpenTagToken && ((OpenTagToken) topToken).getTagName() == token.getTagName()) {
fTokenStack.pop();
copyWhite(fWhiteStart, fWhiteStartPosition, 3 + closeTagString.length());
if (STOP_TAGS_SET.contains(closeTagString)) {
reduceTokenStack();
}
fResultBuffer.append(token.getCloseTag());
return WikipediaFilter.TokenIgnore;
}
}
copyWhite(fWhiteStart, fWhiteStartPosition, 0);
if (STOP_TAGS_SET.contains(closeTagString)) {
reduceTokenStack();
}
return WikipediaFilter.TokenIgnore;
} catch (NoSuchElementException e) {
return WikipediaFilter.TokenNotFound;
}
} else {
// start tag
String tokenString;
int tagNameStart = fCurrentPosition;
int tokenLength = 0;
while (StringUtil.isLetter(charAt(fCurrentPosition))) {
fCurrentPosition++;
tokenLength++;
}
try {
tokenString = StringUtil.str(fSource, tagNameStart, fCurrentPosition - tagNameStart);
OpenTagToken token = (OpenTagToken) WikipediaFilter.OPEN_TAGS.get(tokenString);
if (token == null) {
return WikipediaFilter.TokenNotFound;
}
copyWhite(fWhiteStart, fWhiteStartPosition, (fCurrentPosition - tagNameStart) + 1);
if (STOP_TAGS_SET.contains(tokenString)) {
reduceTokenStack();
}
if (token instanceof SpecialTagToken) {
// for <br> <br/> <br /> <hr> <hr/>
while (StringUtil.isWhitespace(charAt(fCurrentPosition))) {
fCurrentPosition++;
}
if (charAt(fCurrentPosition) == '/') {
fCurrentPosition++;
}
if (charAt(fCurrentPosition) == '>') {
fCurrentPosition++;
fWhiteStartPosition = fCurrentPosition;
// insert the special tag :
fResultBuffer.append(token.getOpenTag());
return WikipediaFilter.TokenIgnore;
}
} else if (token instanceof OpenTagToken) {
fTokenStack.push(token);
// use these buffer because of possible exceptions
StringBuffer buffer = new StringBuffer();
fCurrentPosition = token.scanHTMLAttributes(buffer, fSource, fCurrentPosition);
fResultBuffer.append("<");
fResultBuffer.append(token.getTagName());
fResultBuffer.append(buffer);
fResultBuffer.append(">");
return WikipediaFilter.TokenIgnore;
}