Class PrettyPrintWriter
- java.lang.Object
-
- com.thoughtworks.xstream.io.AbstractWriter
-
- com.thoughtworks.xstream.io.xml.AbstractXmlWriter
-
- com.thoughtworks.xstream.io.xml.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 thewriteText(com.thoughtworks.xstream.core.util.QuickWriter, String)andwriteAttributeValue(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
StreamExceptionis 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 Summary
Fields Modifier and Type Field Description private static char[]AMPprivate static char[]APOSprivate static char[]CLOSEprivate static char[]CRprotected intdepthprivate FastStackelementStackprivate static char[]GTprivate char[]lineIndenterprivate static char[]LTprivate intmodeprivate java.lang.StringnewLineprivate static char[]NULLprivate static char[]QUOTprivate booleanreadyForNewLineprivate static char[]REPLACEMENTprivate booleantagInProgressprivate booleantagIsEmptyprivate QuickWriterwriterstatic intXML_1_0XML 1.0 mode: Writes characters according XML 1.0 specification, throwsStreamExceptionfor invalid characters.static intXML_1_0_REPLACEMENTXML 1.0 mode: Writes characters according XML 1.0 specification, writes character U+FFFFD as replacement for invalid ones.static intXML_1_1XML 1.1 mode: Writes characters according XML 1.1 specification, throwsStreamExceptionfor invalid characters.static intXML_1_1_REPLACEMENTXML 1.1 mode: Writes characters according XML 1.1 specification, writes character U+FFFFD as replacement for invalid ones.static intXML_QUIRKSQuirks mode: Writes any character into data stream incl.
-
Constructor Summary
Constructors Modifier Constructor Description PrettyPrintWriter(java.io.Writer writer)PrettyPrintWriter(java.io.Writer writer, char[] lineIndenter)PrettyPrintWriter(java.io.Writer writer, char[] lineIndenter, java.lang.String newLine)Deprecated.As of 1.3PrettyPrintWriter(java.io.Writer writer, char[] lineIndenter, java.lang.String newLine, XmlFriendlyReplacer replacer)Deprecated.As of 1.3PrettyPrintWriter(java.io.Writer writer, int mode)PrettyPrintWriter(java.io.Writer writer, int mode, char[] lineIndenter)PrettyPrintWriter(java.io.Writer writer, int mode, char[] lineIndenter, NameCoder nameCoder)privatePrettyPrintWriter(java.io.Writer writer, int mode, char[] lineIndenter, NameCoder nameCoder, java.lang.String newLine)PrettyPrintWriter(java.io.Writer writer, int mode, char[] lineIndenter, XmlFriendlyReplacer replacer)Deprecated.As of 1.4 usePrettyPrintWriter(Writer, int, char[], NameCoder)insteadPrettyPrintWriter(java.io.Writer writer, int mode, NameCoder nameCoder)PrettyPrintWriter(java.io.Writer writer, int mode, XmlFriendlyReplacer replacer)Deprecated.As of 1.4 usePrettyPrintWriter(Writer, int, NameCoder)insteadPrettyPrintWriter(java.io.Writer writer, int mode, java.lang.String lineIndenter)PrettyPrintWriter(java.io.Writer writer, NameCoder nameCoder)PrettyPrintWriter(java.io.Writer writer, XmlFriendlyReplacer replacer)Deprecated.As of 1.4 usePrettyPrintWriter(Writer, NameCoder)instead.PrettyPrintWriter(java.io.Writer writer, java.lang.String lineIndenter)PrettyPrintWriter(java.io.Writer writer, java.lang.String lineIndenter, java.lang.String newLine)Deprecated.As of 1.3
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddAttribute(java.lang.String key, java.lang.String value)voidclose()Close the writer, if necessary.voidendNode()protected voidendOfLine()private voidfinishTag()voidflush()Flush the writer, if necessary.protected java.lang.StringgetNewLine()Retrieve the line terminator.voidsetValue(java.lang.String text)Write the value (text content) of the current node.voidstartNode(java.lang.String name)voidstartNode(java.lang.String name, java.lang.Class clazz)protected voidwriteAttributeValue(QuickWriter writer, java.lang.String text)protected voidwriteText(QuickWriter writer, java.lang.String text)private voidwriteText(java.lang.String text, boolean isAttribute)-
Methods inherited from class com.thoughtworks.xstream.io.xml.AbstractXmlWriter
escapeXmlName
-
Methods inherited from class com.thoughtworks.xstream.io.AbstractWriter
encodeAttribute, encodeNode, underlyingWriter
-
-
-
-
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, throwsStreamExceptionfor invalid characters.
-
XML_1_1
public static int XML_1_1
XML 1.1 mode: Writes characters according XML 1.1 specification, throwsStreamExceptionfor 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
-
writer
private final QuickWriter writer
-
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, int mode, char[] lineIndenter, XmlFriendlyReplacer replacer)Deprecated.As of 1.4 usePrettyPrintWriter(Writer, int, char[], NameCoder)instead- Since:
- 1.3
-
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, int mode, XmlFriendlyReplacer replacer)Deprecated.As of 1.4 usePrettyPrintWriter(Writer, int, NameCoder)instead- Since:
- 1.3
-
PrettyPrintWriter
public PrettyPrintWriter(java.io.Writer writer, NameCoder nameCoder)- Since:
- 1.4
-
PrettyPrintWriter
public PrettyPrintWriter(java.io.Writer writer, XmlFriendlyReplacer replacer)Deprecated.As of 1.4 usePrettyPrintWriter(Writer, NameCoder)instead.
-
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)
-
startNode
public void startNode(java.lang.String name, java.lang.Class clazz)Description copied from class:AbstractWriter- Specified by:
startNodein interfaceExtendedHierarchicalStreamWriter- Overrides:
startNodein classAbstractWriter
-
setValue
public void setValue(java.lang.String text)
Description copied from interface:HierarchicalStreamWriterWrite 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:HierarchicalStreamWriterFlush the writer, if necessary.
-
close
public void close()
Description copied from interface:HierarchicalStreamWriterClose 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
-
-