private void writeText()

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(';');
                    }
                }
            }
        }
    }