return toDecode;
}
CPStringTokenizer tokenizer = new CPStringTokenizer(toDecode);
String previousToken = null;
CStringBuilder result = new CStringBuilder();
while (tokenizer.hasMoreTokens()) {
if (result.length() > (maxEntityContentSize)) {
throw new RuntimeException("Too BIG entity content, stop processing.");
}
String token = null;
if (previousToken != null) {
token = previousToken;
previousToken = null;
} // end if
else {
token = tokenizer.nextToken();
} // end else
if ("&".equals(token)) {
String content = null;
String nextToken = null;
if (tokenizer.hasMoreTokens()) {
content = tokenizer.nextToken();
if ((content.equals("%")) || (content.equals("&"))) {
previousToken = content;
result.append(token);
if (cHandler != null) {
cHandler.characters(token.toCharArray(), 0,
token.length());
} // end if
if (dHandler != null) {
dHandler.characters(token.toCharArray(), 0,
token.length());
} // end if
continue;
} // end if
} // end if
if (tokenizer.hasMoreTokens()) {
nextToken = tokenizer.nextToken();
if ((nextToken.equals("%")) ||
(nextToken.equals("&"))) {
previousToken = nextToken;
result.append(token);
result.append(content);
if (cHandler != null) {
cHandler.characters((token + content).toCharArray(),
0, content.length() + token.length());
} // end if
if (dHandler != null) {
dHandler.characters((token + content).toCharArray(),
0, content.length() + token.length());
} // end if
continue;
} // end if
} // end if
if ((content != null) && (nextToken != null)) {
if (nextToken.equals(";")) {
if (content.startsWith("#x")) {
// hexa ref
try {
char value = ((char) Integer.parseInt(content.substring(
2), 16));
if (dtdHandler != null) {
dtdHandler.notationDecl(content,
"" + value, null);
} // end if
if ((cHandler != null) &&
cHandler instanceof DefaultHandler2) {
((DefaultHandler2) cHandler).startEntity(content);
} // end if
if (replace) {
result.append(value);
if (cHandler != null) {
cHandler.characters(new char [] {
value
}, 0, 1);
} // end if
if (dHandler != null) {
dHandler.characters(new char [] {
value
}, 0, 1);
} // end if
} // end if
else {
result.append(content);
if (cHandler != null) {
cHandler.characters(content.toCharArray(),
0, content.length());
} // end if
if (dHandler != null) {
dHandler.characters(content.toCharArray(),
0, content.length());
} // end if
} // end else
if ((cHandler != null) &&
cHandler instanceof DefaultHandler2) {
((DefaultHandler2) cHandler).endEntity(content);
} // end if
} // end try
catch (final Exception ignore) {
result.append("&");
result.append(content);
result.append(";");
if (cHandler != null) {
cHandler.characters(content.toCharArray(),
0, content.length());
} // end if
if (dHandler != null) {
dHandler.characters(content.toCharArray(),
0, content.length());
} // end if
} // end catch
} // end if
else if (content.startsWith("#")) {
// numeric ref
try {
char value = ((char) Integer.parseInt(content.substring(
1)));
if (dtdHandler != null) {
dtdHandler.notationDecl(content,
"" + value, null);
} // end if
if ((cHandler != null) &&
cHandler instanceof DefaultHandler2) {
((DefaultHandler2) cHandler).startEntity(content);
} // end if
if (replace) {
result.append(value);
if (cHandler != null) {
cHandler.characters(new char [] {
value
}, 0, 1);
} // end if
if (dHandler != null) {
dHandler.characters(new char [] {
value
}, 0, 1);
} // end if
} // end if
else {
result.append(content);
if (cHandler != null) {
cHandler.characters(content.toCharArray(),
0, content.length());
} // end if
if (dHandler != null) {
dHandler.characters(content.toCharArray(),
0, content.length());
} // end if
} // end else
if ((cHandler != null) &&
cHandler instanceof DefaultHandler2) {
((DefaultHandler2) cHandler).endEntity(content);
} // end if
} // end try
catch (final Exception ignore) {
result.append("&");
result.append(content);
result.append(";");
if (cHandler != null) {
cHandler.characters(content.toCharArray(),
0, content.length());
} // end if
if (dHandler != null) {
dHandler.characters(content.toCharArray(),
0, content.length());
} // end if
} // end catch
} // end else if
else {
if (resolveInternalEntities &&
internalEntities.containsKey(
content)) {
CEntity value = (CEntity) internalEntities.get(content);
if (dtdHandler != null) {
dtdHandler.notationDecl(content,
value.getValue(), null);
} // end if
if ((cHandler != null) &&
cHandler instanceof DefaultHandler2) {
((DefaultHandler2) cHandler).startEntity(content);
} // end if
if (replace) {
if ((value.getValue() == null) &&
(value.getDOMValue() != null)) {
result.append(value.getDOMValue().toString());
SaxIt(value.getDOMValue(), cHandler, dHandler,
dtdHandler);
} // end if
else {
result.append(value.getValue());
if (cHandler != null) {
cHandler.characters(value.getValue()
.toCharArray(),
0,
value.getValue().length());
} // end if
if (dHandler != null) {
dHandler.characters(value.getValue()
.toCharArray(),
0,
value.getValue().length());
} // end if
} // end else
} // end if
else {
result.append(content);
if (cHandler != null) {
cHandler.characters(content.toCharArray(),
0, content.length());
} // end if
if (dHandler != null) {
dHandler.characters(content.toCharArray(),
0, content.length());
} // end if
} // end else
if ((cHandler != null) &&
cHandler instanceof DefaultHandler2) {
((DefaultHandler2) cHandler).endEntity(content);
} // end if
} // end if
else {
CEntity value = (CEntity) entityMap.get(content);
if ((value == null) ||
(!resolveInternalEntities &&
internalEntities.containsKey(
content))) {
if (dtdHandler != null) {
dtdHandler.notationDecl(content,
"&" + content + ";", null);
} // end if
if ((cHandler != null) &&
cHandler instanceof DefaultHandler2) {
((DefaultHandler2) cHandler).startEntity(content);
} // end if
result.append("&");
result.append(content);
result.append(";");
if (cHandler != null) {
cHandler.characters(("&" +
content + ";").toCharArray(),
0, content.length() + 2);
} // end if
if (dHandler != null) {
dHandler.characters(("&" +
content + ";").toCharArray(),
0, content.length() + 2);
} // end if
if ((cHandler != null) &&
cHandler instanceof DefaultHandler2) {
((DefaultHandler2) cHandler).endEntity(content);
} // end if
} // end if
else {
if (dtdHandler != null) {
dtdHandler.notationDecl(content,
value.getValue(), null);
} // end if
if ((cHandler != null) &&
cHandler instanceof DefaultHandler2) {
((DefaultHandler2) cHandler).startEntity(content);
} // end if
if (replace) {
if ((value.getValue() == null) &&
(value.getDOMValue() != null)) {
result.append(value.getDOMValue().toString());
SaxIt(value.getDOMValue(), cHandler,
dHandler, dtdHandler);
} // end if
else if (value.getValue() != null) {
result.append(value.getValue());
if (cHandler != null) {
cHandler.characters(value.getValue()
.toCharArray(),
0,
value.getValue()
.length());
} // end if
if (dHandler != null) {
dHandler.characters(value.getValue()
.toCharArray(),
0,
value.getValue()
.length());
} // end if
} // end else
} // end if
else {
result.append(content);
if (cHandler != null) {
cHandler.characters(content.toCharArray(),
0, content.length());
} // end if
if (dHandler != null) {
dHandler.characters(content.toCharArray(),
0, content.length());
} // end if
} // end else
if ((cHandler != null) &&
cHandler instanceof DefaultHandler2) {
((DefaultHandler2) cHandler).endEntity(content);
} // end if
} // end else
} // end else
} // end else
} // end if
else {
result.append(token);
result.append(content);
result.append(nextToken);
if (cHandler != null) {
cHandler.characters((token + content +
nextToken).toCharArray(), 0,
token.length() + content.length() +
nextToken.length());
} // end if
if (dHandler != null) {
dHandler.characters((token + content +
nextToken).toCharArray(), 0,
token.length() + content.length() +
nextToken.length());
} // end if
} // end else
} // end if
else if (content != null) {
result.append(token);
result.append(content);
if (cHandler != null) {
cHandler.characters((token + content).toCharArray(),
0, token.length() + content.length());
} // end if
if (dHandler != null) {
dHandler.characters((token + content).toCharArray(),
0, token.length() + content.length());
} // end if
} // end else if
else {
result.append(token);
if (cHandler != null) {
cHandler.characters(token.toCharArray(), 0,
token.length());
} // end if
if (dHandler != null) {
dHandler.characters(token.toCharArray(), 0,
token.length());
} // end if
} // end else
} // end if
else if ("%".equals(token)) {
String content = null;
String nextToken = null;
if (tokenizer.hasMoreTokens()) {
content = tokenizer.nextToken();
if ((content.equals("%")) || (content.equals("&"))) {
previousToken = content;
result.append(token);
if (cHandler != null) {
cHandler.characters(token.toCharArray(), 0,
token.length());
} // end if
if (dHandler != null) {
dHandler.characters(token.toCharArray(), 0,
token.length());
} // end if
continue;
} // end if
} // end if
if (tokenizer.hasMoreTokens()) {
nextToken = tokenizer.nextToken();
if ((nextToken.equals("%")) ||
(nextToken.equals("&"))) {
previousToken = nextToken;
result.append(token);
result.append(content);
if (cHandler != null) {
cHandler.characters((token + content).toCharArray(),
0, token.length() + content.length());
} // end if
if (dHandler != null) {
dHandler.characters((token + content).toCharArray(),
0, token.length() + content.length());
} // end if
continue;
} // end if
} // end if
if ((content != null) && (nextToken != null)) {
if (nextToken.equals(";")) {
if (resolveInternalEntities &&
internalEntities.containsKey(content)) {
CEntity value = (CEntity) internalEntities.get(content);
if (replace) {
if ((value.getValue() == null) &&
(value.getDOMValue() != null)) {
result.append(value.getDOMValue().toString());
SaxIt(value.getDOMValue(), cHandler, dHandler,
dtdHandler);
} // end if
else {
result.append(value.getValue());
if (cHandler != null) {
cHandler.characters(value.getValue()
.toCharArray(),
0, value.getValue().length());
} // end if
if (dHandler != null) {
dHandler.characters(value.getValue()
.toCharArray(),
0, value.getValue().length());
} // end if
} // end else
} // end if
else {
result.append(content);
if (cHandler != null) {
cHandler.characters(content.toCharArray(),
0, content.length());
} // end if
if (dHandler != null) {
dHandler.characters(content.toCharArray(),
0, content.length());
} // end if
} // end else
} // end if
else {
CEntity value = (CEntity) entityMap.get(content);
if ((value == null) ||
(!resolveInternalEntities &&
internalEntities.containsKey(
content))) {
result.append("%");
result.append(content);
result.append(";");
if (cHandler != null) {
cHandler.characters(("%" + content +
";").toCharArray(), 0,
content.length() + 2);
} // end if
if (dHandler != null) {
dHandler.characters(("%" + content +
";").toCharArray(), 0,
content.length() + 2);
} // end if
} // end if
else {
if (replace) {
if ((value.getValue() == null) &&
(value.getDOMValue() != null)) {
result.append(value.getDOMValue().toString());
SaxIt(value.getDOMValue(), cHandler, dHandler,
dtdHandler);
} // end if
else {
result.append(value.getValue());
if (cHandler != null) {
cHandler.characters(value.getValue()
.toCharArray(),
0,
value.getValue().length());
} // end if
if (dHandler != null) {
dHandler.characters(value.getValue()
.toCharArray(),
0,
value.getValue().length());
} // end if
} // end else
} // end if
else {
result.append(content);
if (cHandler != null) {
cHandler.characters(content.toCharArray(),
0, content.length());
} // end if
if (dHandler != null) {
dHandler.characters(content.toCharArray(),
0, content.length());
} // end if
} // end else
} // end else
} // end else
} // end if
else {
result.append(token);
result.append(content);
result.append(nextToken);
if (cHandler != null) {
cHandler.characters((token + content +
nextToken).toCharArray(), 0,
token.length() + content.length() +
nextToken.length());
} // end if
if (dHandler != null) {
dHandler.characters((token + content +
nextToken).toCharArray(), 0,
token.length() + content.length() +
nextToken.length());
} // end if
} // end else
} // end if
else if (content != null) {
result.append(token);
result.append(content);
if (cHandler != null) {
cHandler.characters((token + content).toCharArray(),
0, token.length() + content.length());
} // end if
if (dHandler != null) {
dHandler.characters((token + content).toCharArray(),
0, token.length() + content.length());
} // end if
} // end else if
else {
result.append(token);
if (cHandler != null) {
cHandler.characters(token.toCharArray(), 0,
token.length());
} // end if
if (dHandler != null) {
dHandler.characters(token.toCharArray(), 0,
token.length());
} // end if
} // end else
} // end else if
else {
result.append(token);
if (cHandler != null) {
cHandler.characters(token.toCharArray(), 0,
token.length());
} // end if
if (dHandler != null) {
dHandler.characters(token.toCharArray(), 0,
token.length());
} // end if
} // end else
} // end while
if (previousToken != null) {
result.append(previousToken);
if (cHandler != null) {
cHandler.characters(previousToken.toCharArray(), 0,
previousToken.length());
} // end if
if (dHandler != null) {
dHandler.characters(previousToken.toCharArray(), 0,
previousToken.length());
} // end if
} // end if
return result.toString();
}
catch (SAXException e) {
return toDecode;
}
} // end replaceEntities()