in xstream/src/java/com/thoughtworks/xstream/io/xml/PrettyPrintWriter.java [235:330]
private void writeText(final String text, final boolean isAttribute) {
final int length = text.length();
for (int i = 0; i < length; i++) {
final char c = text.charAt(i);
switch (c) {
case '\0':
if (mode == XML_QUIRKS) {
writer.write(NULL);
} else if (mode == XML_1_0_REPLACEMENT || mode == XML_1_1_REPLACEMENT) {
writer.write(REPLACEMENT);
} else {
throw new StreamException("Invalid character 0x0 in XML stream");
}
break;
case '&':
writer.write(AMP);
break;
case '<':
writer.write(LT);
break;
case '>':
writer.write(GT);
break;
case '"':
writer.write(QUOT);
break;
case '\'':
writer.write(APOS);
break;
case '\r':
writer.write(CR);
break;
case '\t':
case '\n':
if (!isAttribute) {
writer.write(c);
break;
}
//$FALL-THROUGH$
default:
if (Character.isDefined(c) && !Character.isISOControl(c)) {
boolean replaced = false;
if (mode != XML_QUIRKS) {
if (c > '\ud7ff' && c < '\ue000') {
if (mode == XML_1_0_REPLACEMENT || mode == XML_1_1_REPLACEMENT) {
writer.write(REPLACEMENT);
replaced = true;
} else {
throw new StreamException("Invalid character 0x"
+ Integer.toHexString(c)
+ " in XML stream");
}
}
}
if (!replaced) {
writer.write(c);
}
} else {
boolean replaced = false;
if (mode == XML_1_0 || mode == XML_1_0_REPLACEMENT) {
if (c < 9
|| c == '\u000b'
|| c == '\u000c'
|| c == '\u000e'
|| c >= '\u000f' && c <= '\u001f') {
if (mode == XML_1_0_REPLACEMENT) {
writer.write(REPLACEMENT);
replaced = true;
} else {
throw new StreamException("Invalid character 0x"
+ Integer.toHexString(c)
+ " in XML 1.0 stream");
}
}
}
if (mode != XML_QUIRKS) {
if (c == '\ufffe' || c == '\uffff') {
if (mode == XML_1_0_REPLACEMENT || mode == XML_1_1_REPLACEMENT) {
writer.write(REPLACEMENT);
replaced = true;
} else {
throw new StreamException("Invalid character 0x"
+ Integer.toHexString(c)
+ " in XML stream");
}
}
}
if (!replaced) {
writer.write("&#x");
writer.write(Integer.toHexString(c));
writer.write(';');
}
}
}
}
}