Class PrettyPrintWriter

  • All Implemented Interfaces:
    ExtendedHierarchicalStreamWriter, HierarchicalStreamWriter, XmlFriendlyWriter
    Direct Known Subclasses:
    CompactWriter

    public class PrettyPrintWriter
    extends AbstractXmlWriter
    A simple writer that outputs XML in a pretty-printed indented stream.

    By default, the chars
    & < > " ' \r
    are escaped and replaced with a suitable XML entity. To alter this behavior, override the writeText(com.thoughtworks.xstream.core.util.QuickWriter, String) and writeAttributeValue(com.thoughtworks.xstream.core.util.QuickWriter, String) methods.

    The XML specification requires XML parsers to drop CR characters completely. This implementation will therefore use only a LF for line endings, never the platform encoding. You can overwrite the getNewLine() method for a different behavior.

    Note: Depending on the XML version some characters cannot be written. Especially a 0 character is never valid in XML, neither directly nor as entity nor within CDATA. However, this writer works by default in a quirks mode, where it will write any character at least as character entity (even a null character). You may switch into XML_1_1 mode (which supports most characters) or XML_1_0 that does only support a very limited number of control characters. See XML specification for version 1.0 or 1.1. If a character is not supported, a StreamException is thrown. Select a proper parser implementation that respects the version in the XML header (the Xpp3 and MX parsers will also read character entities of normally invalid characters). You may also switch to XML_1_0_REPLACEMENT or XML_1_1_REPLACEMENT mode, which will replace the invalid characters with a U+FFFD replacement character.

    • Field Detail

      • XML_QUIRKS

        public static int XML_QUIRKS
        Quirks mode: Writes any character into data stream incl. U+0000.
      • XML_1_0

        public static int XML_1_0
        XML 1.0 mode: Writes characters according XML 1.0 specification, throws StreamException for invalid characters.
      • XML_1_1

        public static int XML_1_1
        XML 1.1 mode: Writes characters according XML 1.1 specification, throws StreamException for invalid characters.
      • XML_1_0_REPLACEMENT

        public static int XML_1_0_REPLACEMENT
        XML 1.0 mode: Writes characters according XML 1.0 specification, writes character U+FFFFD as replacement for invalid ones.
        Since:
        1.4.21
      • XML_1_1_REPLACEMENT

        public static int XML_1_1_REPLACEMENT
        XML 1.1 mode: Writes characters according XML 1.1 specification, writes character U+FFFFD as replacement for invalid ones.
        Since:
        1.4.21
      • elementStack

        private final FastStack elementStack
      • lineIndenter

        private final char[] lineIndenter
      • mode

        private final int mode
      • tagInProgress

        private boolean tagInProgress
      • depth

        protected int depth
      • readyForNewLine

        private boolean readyForNewLine
      • tagIsEmpty

        private boolean tagIsEmpty
      • newLine

        private java.lang.String newLine
      • NULL

        private static final char[] NULL
      • AMP

        private static final char[] AMP
      • LT

        private static final char[] LT
      • GT

        private static final char[] GT
      • CR

        private static final char[] CR
      • QUOT

        private static final char[] QUOT
      • APOS

        private static final char[] APOS
      • CLOSE

        private static final char[] CLOSE
      • REPLACEMENT

        private static final char[] REPLACEMENT
    • Constructor Detail

      • PrettyPrintWriter

        private PrettyPrintWriter​(java.io.Writer writer,
                                  int mode,
                                  char[] lineIndenter,
                                  NameCoder nameCoder,
                                  java.lang.String newLine)
      • PrettyPrintWriter

        public PrettyPrintWriter​(java.io.Writer writer,
                                 char[] lineIndenter,
                                 java.lang.String newLine,
                                 XmlFriendlyReplacer replacer)
        Deprecated.
        As of 1.3
        Since:
        1.2
      • PrettyPrintWriter

        public PrettyPrintWriter​(java.io.Writer writer,
                                 int mode,
                                 char[] lineIndenter,
                                 NameCoder nameCoder)
        Since:
        1.4
      • PrettyPrintWriter

        public PrettyPrintWriter​(java.io.Writer writer,
                                 char[] lineIndenter,
                                 java.lang.String newLine)
        Deprecated.
        As of 1.3
      • PrettyPrintWriter

        public PrettyPrintWriter​(java.io.Writer writer,
                                 int mode,
                                 char[] lineIndenter)
        Since:
        1.3
      • PrettyPrintWriter

        public PrettyPrintWriter​(java.io.Writer writer,
                                 char[] lineIndenter)
      • PrettyPrintWriter

        public PrettyPrintWriter​(java.io.Writer writer,
                                 java.lang.String lineIndenter,
                                 java.lang.String newLine)
        Deprecated.
        As of 1.3
      • PrettyPrintWriter

        public PrettyPrintWriter​(java.io.Writer writer,
                                 int mode,
                                 java.lang.String lineIndenter)
        Since:
        1.3
      • PrettyPrintWriter

        public PrettyPrintWriter​(java.io.Writer writer,
                                 java.lang.String lineIndenter)
      • PrettyPrintWriter

        public PrettyPrintWriter​(java.io.Writer writer,
                                 int mode,
                                 NameCoder nameCoder)
        Since:
        1.4
      • PrettyPrintWriter

        public PrettyPrintWriter​(java.io.Writer writer,
                                 NameCoder nameCoder)
        Since:
        1.4
      • PrettyPrintWriter

        public PrettyPrintWriter​(java.io.Writer writer,
                                 int mode)
        Since:
        1.3
      • PrettyPrintWriter

        public PrettyPrintWriter​(java.io.Writer writer)
    • Method Detail

      • startNode

        public void startNode​(java.lang.String name)
      • setValue

        public void setValue​(java.lang.String text)
        Description copied from interface: HierarchicalStreamWriter
        Write the value (text content) of the current node.
      • addAttribute

        public void addAttribute​(java.lang.String key,
                                 java.lang.String value)
      • writeAttributeValue

        protected void writeAttributeValue​(QuickWriter writer,
                                           java.lang.String text)
      • writeText

        protected void writeText​(QuickWriter writer,
                                 java.lang.String text)
      • writeText

        private void writeText​(java.lang.String text,
                               boolean isAttribute)
      • endNode

        public void endNode()
      • finishTag

        private void finishTag()
      • endOfLine

        protected void endOfLine()
      • flush

        public void flush()
        Description copied from interface: HierarchicalStreamWriter
        Flush the writer, if necessary.
      • close

        public void close()
        Description copied from interface: HierarchicalStreamWriter
        Close the writer, if necessary.
      • getNewLine

        protected java.lang.String getNewLine()
        Retrieve the line terminator. This method returns always a line feed, since according the XML specification any parser must ignore a carriage return. Overload this method, if you need different behavior.
        Returns:
        the line terminator
        Since:
        1.3