in sources/java-incremental-compilation/jvm-inc-builder/src/com/intellij/tools/build/bazel/org/jdom/output/XMLOutputter.java [1155:1242]
public String escapeElementEntities(String str) {
/*
* Whether output escaping is enabled for the being processed
* Element - default is <code>true</code>
*/
boolean escapeOutput = true;
if (!escapeOutput) return str;
StringBuilder buffer;
int ch, pos;
String entity;
EscapeStrategy strategy = currentFormat.escapeStrategy;
buffer = null;
for (int i = 0; i < str.length(); i++) {
ch = str.charAt(i);
pos = i;
switch (ch) {
case '<':
entity = "<";
break;
case '>':
entity = ">";
break;
case '&':
entity = "&";
break;
case '\r':
entity = "
";
break;
case '\n':
entity = currentFormat.getLineSeparator();
break;
default:
if (strategy.shouldEscape((char)ch)) {
//make sure what we are escaping is not the
//beginning of a multi-byte character.
if (Verifier.isHighSurrogate((char)ch)) {
//this is a the high of a surrogate pair
i++;
if (i < str.length()) {
char low = str.charAt(i);
if (!Verifier.isLowSurrogate(low)) {
throw new IllegalDataException("Could not decode surrogate pair 0x" +
Integer.toHexString(ch) + " / 0x" + Integer.toHexString(low));
}
ch = Verifier.decodeSurrogatePair((char)ch, low);
}
else {
throw new IllegalDataException("Surrogate pair 0x" +
Integer.toHexString(ch) + " truncated");
}
}
entity = "&#x" + Integer.toHexString(ch) + ";";
}
else {
entity = null;
}
break;
}
if (buffer == null) {
if (entity != null) {
// An entity occurred, so we'll have to use StringBuffer
// (allocate room for it plus a few more entities).
buffer = new StringBuilder(str.length() + 20);
// Copy previous skipped characters and fall through
// to pickup current character
buffer.append(str, 0, pos);
buffer.append(entity);
}
}
else {
if (entity == null) {
buffer.append((char)ch);
}
else {
buffer.append(entity);
}
}
}
// If there were any entities, return the escaped characters
// that we put in the StringBuffer. Otherwise, just return
// the unmodified input string.
return (buffer == null) ? str : buffer.toString();
}