new StringBuffer(s.substring(0, i));
switch (c) {
case '<': b.append("<"); break;
case '>': b.append(">"); break;
case '&': b.append("&"); break;
default: throw new BugException();
}
i++;
int next = i;
while (i < ln) {
c = s.charAt(i);
if (c == '<'
|| (c == '>' && i > 1
&& s.charAt(i - 1) == ']'
&& s.charAt(i - 2) == ']')
|| c == '&') {
b.append(s.substring(next, i));
switch (c) {
case '<': b.append("<"); break;
case '>': b.append(">"); break;
case '&': b.append("&"); break;
default: throw new BugException();
}
next = i + 1;
}
i++;
}