| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| #if !defined(FORMATTERTOXML_HEADER_GUARD_1357924680) |
| #define FORMATTERTOXML_HEADER_GUARD_1357924680 |
| |
| |
| |
| |
| // Base include file. Must be first. |
| #include <xalanc/XMLSupport/XMLSupportDefinitions.hpp> |
| |
| |
| |
| #include <xalanc/Include/XalanVector.hpp> |
| |
| |
| |
| #include <xalanc/XalanDOM/XalanDOMString.hpp> |
| |
| |
| |
| #include <xalanc/PlatformSupport/DOMStringHelper.hpp> |
| #include <xalanc/PlatformSupport/XalanUnicode.hpp> |
| |
| |
| |
| // Base class header file. |
| #include <xalanc/PlatformSupport/FormatterListener.hpp> |
| |
| |
| |
| namespace XALAN_CPP_NAMESPACE { |
| |
| |
| |
| class Writer; |
| class XalanOutputStream; |
| |
| |
| |
| /** |
| * FormatterToXML formats SAX-style events into XML. |
| */ |
| class XALAN_XMLSUPPORT_EXPORT FormatterToXML : public FormatterListener |
| { |
| public: |
| |
| enum eDummy |
| { |
| eDefaultIndentAmount = 0 |
| }; |
| |
| /** |
| * Constructor for customized encoding and doctype. |
| * |
| * @param writer character output stream to use |
| * @param version version of the output method |
| * @param doIndent true if output is to be indented |
| * @param indent number of spaces to indent at each nesting level |
| * @param encoding character encoding in use by <VAR>writer</VAR> |
| * @param mediaType media type (MIME content type) of the data |
| * @param doctypeSystem system identifier to be used in the document |
| * type declaration |
| * @param doctypePublic public identifier to be used in the document |
| * type declaration |
| * @param xmlDecl true if the XSLT processor should output an XML |
| * declaration |
| * @param standalone true if the XSLT processor should output a |
| * standalone document declaration |
| * |
| * @param format should be used only by derived classes. |
| * @param fBufferData If true, data will be buffered in the formatter |
| */ |
| FormatterToXML( |
| Writer& writer, |
| const XalanDOMString& version = XalanDOMString(XalanMemMgrs::getDummyMemMgr()), |
| bool doIndent = false, |
| int indent = eDefaultIndentAmount, |
| const XalanDOMString& encoding = XalanDOMString(XalanMemMgrs::getDummyMemMgr()), |
| const XalanDOMString& mediaType = XalanDOMString(XalanMemMgrs::getDummyMemMgr()), |
| const XalanDOMString& doctypeSystem = XalanDOMString(XalanMemMgrs::getDummyMemMgr()), |
| const XalanDOMString& doctypePublic = XalanDOMString(XalanMemMgrs::getDummyMemMgr()), |
| bool xmlDecl = true, |
| const XalanDOMString& standalone = XalanDOMString(XalanMemMgrs::getDummyMemMgr()), |
| eFormat format = OUTPUT_METHOD_XML, |
| bool fBufferData = true, |
| MemoryManager& theManager XALAN_DEFAULT_MEMMGR); |
| |
| static FormatterToXML* |
| create( |
| MemoryManager& theManager, |
| Writer& writer, |
| const XalanDOMString& version = XalanDOMString(XalanMemMgrs::getDummyMemMgr()), |
| bool doIndent = false, |
| int indent = eDefaultIndentAmount, |
| const XalanDOMString& encoding = XalanDOMString(XalanMemMgrs::getDummyMemMgr()), |
| const XalanDOMString& mediaType = XalanDOMString(XalanMemMgrs::getDummyMemMgr()), |
| const XalanDOMString& doctypeSystem = XalanDOMString(XalanMemMgrs::getDummyMemMgr()), |
| const XalanDOMString& doctypePublic = XalanDOMString(XalanMemMgrs::getDummyMemMgr()), |
| bool xmlDecl = true, |
| const XalanDOMString& standalone = XalanDOMString(XalanMemMgrs::getDummyMemMgr()), |
| eFormat format = OUTPUT_METHOD_XML, |
| bool fBufferData = true); |
| |
| virtual |
| ~FormatterToXML(); |
| |
| MemoryManager& |
| getMemoryManager() |
| { |
| return m_stringBuffer.getMemoryManager(); |
| } |
| |
| // These methods are inherited from FormatterListener ... |
| |
| virtual void |
| setDocumentLocator(const Locator* const locator); |
| |
| virtual void |
| startDocument(); |
| |
| virtual void |
| endDocument(); |
| |
| virtual void |
| startElement( |
| const XMLCh* const name, |
| AttributeListType& attrs); |
| |
| virtual void |
| endElement(const XMLCh* const name); |
| |
| virtual void |
| characters( |
| const XMLCh* const chars, |
| const size_type length); |
| |
| virtual void |
| charactersRaw( |
| const XMLCh* const chars, |
| const size_type length); |
| |
| virtual void |
| entityReference(const XMLCh* const name); |
| |
| virtual void |
| ignorableWhitespace( |
| const XMLCh* const chars, |
| const size_type length); |
| |
| virtual void |
| processingInstruction( |
| const XMLCh* const target, |
| const XMLCh* const data); |
| |
| |
| virtual void |
| resetDocument(); |
| |
| virtual void |
| comment(const XMLCh* const data); |
| |
| virtual void |
| cdata( |
| const XMLCh* const ch, |
| const size_type length); |
| |
| virtual Writer* |
| getWriter() const; |
| |
| virtual const XalanDOMString& |
| getDoctypeSystem() const; |
| |
| virtual const XalanDOMString& |
| getDoctypePublic() const; |
| |
| virtual const XalanDOMString& |
| getEncoding() const; |
| |
| virtual const XalanDOMString& |
| getMediaType() const; |
| |
| virtual int |
| getIndent() const; |
| |
| const XalanDOMString& |
| getVersion() const |
| { |
| return m_version; |
| } |
| |
| const XalanDOMString& |
| getStandalone() const |
| { |
| return m_standalone; |
| } |
| |
| bool |
| getShouldWriteXMLHeader() const |
| { |
| return m_shouldWriteXMLHeader; |
| } |
| |
| void |
| setShouldWriteXMLHeader(bool b) |
| { |
| m_shouldWriteXMLHeader = b; |
| } |
| |
| bool |
| getStripCData() const |
| { |
| return m_stripCData; |
| } |
| |
| void |
| setStripCData(bool b) |
| { |
| m_stripCData = b; |
| } |
| |
| bool |
| getEscapeCData() const |
| { |
| return m_escapeCData; |
| } |
| |
| void |
| setEscapeCData(bool b) |
| { |
| m_escapeCData = b; |
| } |
| |
| bool |
| getDoIndent() const |
| { |
| return m_doIndent; |
| } |
| |
| void |
| setDoIndent(bool value) |
| { |
| m_doIndent = value; |
| } |
| |
| void |
| setIndent(int value) |
| { |
| m_indent = value; |
| } |
| |
| |
| typedef XalanVector<bool> BoolStackType; |
| typedef XalanVector<XalanDOMChar> DOMCharBufferType; |
| typedef XalanVector<char> ByteBufferType; |
| |
| |
| protected: |
| |
| /** |
| * The writer where the XML will be written. |
| */ |
| Writer* const m_writer; |
| |
| /** |
| * The stream where the XML will be written. |
| */ |
| XalanOutputStream* const m_stream; |
| |
| /** |
| * Output a line break. |
| */ |
| void |
| outputLineSep(); |
| |
| typedef void (FormatterToXML::*AccumCharFunctionType)(XalanDOMChar); |
| |
| typedef void (FormatterToXML::*AccumStringFunctionType)(const XalanDOMChar*); |
| |
| typedef void (FormatterToXML::*AccumDOMStringFunctionType)(const XalanDOMString&); |
| |
| typedef void (FormatterToXML::*AccumArrayFunctionType)( |
| const XalanDOMChar[], |
| size_type, |
| size_type); |
| |
| typedef void (FormatterToXML::*FlushFunctionType)(); |
| |
| /** |
| * Append a wide character to the buffer. |
| * |
| * Characters that are not representable |
| * in the encoding are not written as |
| * entities. |
| * |
| * @ch the character to append. |
| */ |
| void |
| accumName(XalanDOMChar ch) |
| { |
| assert(m_accumNameCharFunction != 0); |
| |
| (this->*m_accumNameCharFunction)(ch); |
| } |
| |
| /** |
| * Append a wide character to the buffer. |
| * |
| * @ch the character to append. |
| */ |
| void |
| accumContent(XalanDOMChar ch) |
| { |
| assert(m_accumContentCharFunction != 0); |
| |
| (this->*m_accumContentCharFunction)(ch); |
| } |
| |
| /** |
| * Append a null-terminated array of wide characters to |
| * the buffer. |
| * |
| * Characters that are not representable |
| * in the encoding are not written as |
| * entities. |
| * |
| * @chars the array to append |
| */ |
| void |
| accumName(const XalanDOMChar* chars) |
| { |
| assert(m_accumNameStringFunction != 0); |
| |
| (this->*m_accumNameStringFunction)(chars); |
| } |
| |
| /** |
| * Append a null-terminated array of wide characters to |
| * the buffer. |
| * |
| * @chars the array to append |
| */ |
| void |
| accumContent(const XalanDOMChar* chars) |
| { |
| assert(m_accumContentStringFunction != 0); |
| |
| (this->*m_accumContentStringFunction)(chars); |
| } |
| |
| /** |
| * Append an array of wide character to the buffer. |
| * |
| * Characters that are not representable |
| * in the encoding are not written as |
| * entities. |
| * |
| * @chars the array to append |
| * @start the offset into the array to start from |
| * @length the number of characters to append |
| */ |
| void |
| accumName( |
| const XalanDOMChar chars[], |
| size_type start, |
| size_type length) |
| { |
| assert(m_accumNameArrayFunction != 0); |
| |
| (this->*m_accumNameArrayFunction)(chars, start, length); |
| } |
| |
| /** |
| * Append an array of wide character to the buffer. |
| * |
| * @chars the array to append |
| * @start the offset into the array to start from |
| * @length the number of characters to append |
| */ |
| void |
| accumContent( |
| const XalanDOMChar chars[], |
| size_type start, |
| size_type length) |
| { |
| assert(m_accumContentArrayFunction != 0); |
| |
| (this->*m_accumContentArrayFunction)(chars, start, length); |
| } |
| |
| /** |
| * Append a string to the buffer. |
| * |
| * Characters that are not representable |
| * in the encoding are not written as |
| * entities. |
| * |
| * @param str the string to append |
| */ |
| void |
| accumName(const XalanDOMString& str) |
| { |
| assert(m_accumNameDOMStringFunction != 0); |
| |
| (this->*m_accumNameDOMStringFunction)(str); |
| } |
| |
| /** |
| * Append a string to the buffer. |
| * |
| * @param str the string to append |
| */ |
| void |
| accumContent(const XalanDOMString& str) |
| { |
| assert(m_accumContentDOMStringFunction != 0); |
| |
| (this->*m_accumContentDOMStringFunction)(str); |
| } |
| |
| /** |
| * Escape and accum a character. |
| */ |
| size_type |
| accumDefaultEscape( |
| XalanDOMChar ch, |
| size_type i, |
| const XalanDOMChar chars[], |
| size_type len, |
| bool escLF); |
| |
| /** |
| * Handle one of the default entities, return false if it |
| * is not a default entity. |
| */ |
| virtual bool |
| accumDefaultEntity( |
| XalanDOMChar ch, |
| bool escLF); |
| |
| /** |
| * Set the attribute characters what will require special mapping. |
| */ |
| void |
| initAttrCharsMap(); |
| |
| /** |
| * Set the output characters what will require special mapping. |
| */ |
| void |
| initCharsMap(); |
| |
| /** |
| * Flush the char buffer. |
| */ |
| void |
| flushChars(); |
| |
| /** |
| * Flush the byte buffer. |
| */ |
| void |
| flushBytes(); |
| |
| void |
| flushWriter(); |
| |
| void |
| openElementForChildren(); |
| |
| bool |
| childNodesWereAdded(); |
| |
| bool |
| shouldIndent() const |
| { |
| return m_doIndent && (!m_ispreserve && !m_isprevtext); |
| } |
| |
| /** |
| * Check to see if a parent's ">" has been written, and, if |
| * it has not, write it. |
| */ |
| void |
| writeParentTagEnd(); |
| |
| /** |
| * Prints a newline character and <var>n</var> spaces. |
| * @param n Number of spaces to print. |
| */ |
| void |
| indent(int n); |
| |
| /** |
| * Write normalized characters to the writer. |
| * @param ch the string to write. |
| * @param start the start offset into the string. |
| * @param length the length of the string. |
| * @param isCData true if writing CDATA. |
| */ |
| virtual void |
| writeNormalizedChars( |
| const XalanDOMChar ch[], |
| size_type start, |
| size_type length, |
| bool isCData); |
| |
| /** |
| * Write a number into the buffer as an entity |
| * reference. |
| * @param theNumber the number to write. |
| */ |
| void |
| writeNumberedEntityReference(XalanUnicodeChar theNumber); |
| |
| /** |
| * Write an attribute string. |
| * |
| * @param theString The string to write. |
| * @param theStringLength The length of the string. |
| */ |
| virtual void |
| writeAttrString( |
| const XalanDOMChar* theString, |
| size_type theStringLength); |
| |
| /** |
| * Write the data for a comment |
| * @param data The comment's data. |
| */ |
| virtual void |
| accumCommentData(const XalanDOMChar* data); |
| |
| /** |
| * Throw an exception when an invalid |
| * surrogate is encountered. |
| * @param ch The first character in the surrogate |
| * @param theManager The MemoryManager instance to use |
| */ |
| static void |
| throwInvalidUTF16SurrogateException( |
| XalanDOMChar ch, |
| MemoryManager& theManager); |
| |
| /** |
| * Throw an exception when an invalid |
| * surrogate is encountered. |
| * @param ch The first character in the surrogate |
| * @param next The next character in the surrogate |
| * @param theManager The MemoryManager instance to use |
| */ |
| static void |
| throwInvalidUTF16SurrogateException( |
| XalanDOMChar ch, |
| XalanDOMChar next, |
| MemoryManager& theManager); |
| |
| |
| /** |
| * Throw an exception when an invalid |
| * XML character is encountered. |
| * @param ch The first character in the surrogate |
| * @param next The next character in the surrogate |
| */ |
| static void |
| throwInvalidCharacterException( |
| XalanUnicodeChar ch, |
| MemoryManager& theManager); |
| |
| static bool |
| isUTF16Surrogate(XalanDOMChar ch) |
| { |
| return (ch & 0xFC00) == 0xD800 ? true : false; |
| } |
| |
| enum eDummyTwo { SPECIALSSIZE = 256}; |
| |
| /** |
| * The maximum character size before we have to resort |
| * to escaping. |
| */ |
| XalanDOMChar m_maxCharacter; |
| |
| XalanDOMChar m_attrCharsMap[SPECIALSSIZE]; |
| |
| XalanDOMChar m_charsMap[SPECIALSSIZE]; |
| |
| /** |
| * If true, XML header should be written to output. |
| */ |
| bool m_shouldWriteXMLHeader; |
| |
| /** |
| * State flag to tell if preservation of whitespace |
| * is important. |
| */ |
| bool m_ispreserve; |
| |
| /** |
| * Flag to tell if indenting (pretty-printing) is on. |
| */ |
| bool m_doIndent; |
| |
| /** |
| * Flag to signal that a newline should be added. |
| */ |
| bool m_startNewLine; |
| |
| /** |
| * Flag to tell that we need to add the doctype decl, |
| * which we can't do until the first element is |
| * encountered. |
| */ |
| bool m_needToOutputDocTypeDecl; |
| |
| /** |
| * State flag that tells if the previous node processed |
| * was text, so we can tell if we should preserve whitespace. |
| */ |
| bool m_isprevtext; |
| |
| /** |
| * If true, cdata sections are simply stripped of their |
| * CDATA brackets, without escaping. |
| */ |
| bool m_stripCData; |
| |
| /** |
| * Tell if the next text should be raw. |
| */ |
| bool m_nextIsRaw; |
| |
| /** |
| * Tells if we're in CData section. |
| */ |
| bool m_inCData; |
| |
| /** |
| * Flag to quickly tell if the encoding is capable of full |
| * Unicode support. |
| */ |
| bool m_encodingIsUTF; |
| |
| /** |
| * The System ID for the doc type. |
| */ |
| const XalanDOMString m_doctypeSystem; |
| |
| /** |
| * The public ID for the doc type. |
| */ |
| const XalanDOMString m_doctypePublic; |
| |
| /** |
| * The character encoding. |
| */ |
| XalanDOMString m_encoding; |
| |
| /** |
| * Flag to keep track of the indent amount. |
| */ |
| int m_currentIndent; |
| |
| /** |
| * Amount to indent. |
| */ |
| int m_indent; |
| |
| /** |
| * Stack to keep track of whether or not we need to |
| * preserve whitespace. |
| */ |
| BoolStackType m_preserves; |
| |
| // A text buffer. We use it mostly for converting |
| // to string values. See uses of UnsignedLongToString() |
| // and UnsignedLongToHexString(). |
| XalanDOMString m_stringBuffer; |
| |
| private: |
| |
| // These are not implemented. |
| FormatterToXML(const FormatterToXML&); |
| |
| FormatterToXML& |
| operator=(const FormatterToXML&); |
| |
| bool |
| operator==(const FormatterToXML&) const; |
| |
| /** |
| * Append a wide character to the buffer. |
| * Characters that are not representable |
| * in the encoding are not written as |
| * entities. |
| * |
| * @ch the character to append. |
| */ |
| void |
| accumNameAsByte(XalanDOMChar ch); |
| |
| /** |
| * Append a wide character to the buffer. |
| * Characters that are not representable |
| * in the encoding are not written as |
| * entities. |
| * |
| * @ch the character to append. |
| */ |
| void |
| accumNameAsByteDirect(XalanDOMChar ch); |
| |
| /** |
| * Append a wide character to the buffer. |
| * Characters that are not representable |
| * in the encoding are written as entities. |
| * |
| * @ch the character to append. |
| */ |
| void |
| accumContentAsByte(XalanDOMChar ch); |
| |
| /** |
| * Append a wide character to the output. |
| * Characters that are not representable |
| * in the encoding are written as entities. |
| * |
| * @ch the character to append. |
| */ |
| void |
| accumContentAsByteDirect(XalanDOMChar ch); |
| |
| /** |
| * Append a wide character to the buffer. |
| * Characters that are not representable |
| * in the encoding are not written as |
| * entities. |
| * |
| * @ch the character to append. |
| */ |
| void |
| accumNameAsChar(XalanDOMChar ch); |
| |
| /** |
| * Append a wide character to the buffer. |
| * Characters that are not representable |
| * in the encoding are not written as |
| * entities. |
| * |
| * @ch the character to append. |
| */ |
| void |
| accumNameAsCharDirect(XalanDOMChar ch); |
| |
| /** |
| * Append a wide character to the buffer. |
| * |
| * @ch the character to append. |
| */ |
| void |
| accumContentAsChar(XalanDOMChar ch); |
| |
| /** |
| * Append a wide character to the stream without buffering. |
| * |
| * @ch the character to append. |
| */ |
| void |
| accumContentAsCharDirect(XalanDOMChar ch); |
| |
| /** |
| * Append a wide character to the buffer. |
| * All characters are representable, |
| * so no checks or escapes are needed. |
| * |
| * @ch the character to append. |
| */ |
| void |
| accumCharUTF(XalanDOMChar ch); |
| |
| /** |
| * Append a wide character to the output. |
| * All characters are representable, |
| * so no checks or escapes are needed. |
| * |
| * @ch the character to append. |
| */ |
| void |
| accumCharUTFDirect(XalanDOMChar ch); |
| |
| /** |
| * Append a string to the buffer. |
| * Characters that are not representable |
| * in the encoding are not written as |
| * entities. |
| * |
| * @chars the string to append. |
| */ |
| void |
| accumNameString(const XalanDOMChar* chars); |
| |
| /** |
| * Append a wide character to the buffer. |
| * All characters are representable, |
| * so no checks or escapes are needed. |
| * |
| * @chars the string to append. |
| */ |
| void |
| accumStringUTF(const XalanDOMChar* chars); |
| |
| /** |
| * Append a wide character to the output. |
| * All characters are representable, |
| * so no checks or escapes are needed. |
| * |
| * @chars the string to append. |
| */ |
| void |
| accumStringUTFDirect(const XalanDOMChar* chars); |
| |
| /** |
| * Append a string to the buffer. |
| * Characters that are not representable |
| * in the encoding are written as entities. |
| * |
| * @chars the string to append. |
| */ |
| void |
| accumContentString(const XalanDOMChar* chars); |
| |
| /** |
| * Append an array of wide character to the buffer. |
| * Characters that are not representable in the |
| * encoding are not written as entities. |
| * |
| * @chars the array to append |
| * @start the offset into the array to start from |
| * @length the number of characters to append |
| */ |
| void |
| accumNameArray( |
| const XalanDOMChar chars[], |
| size_type start, |
| size_type length); |
| |
| /** |
| * Append an array of wide character to the buffer. |
| * Characters that are not representable in the |
| * encoding are written as entities. |
| * |
| * @chars the array to append |
| * @start the offset into the array to start from |
| * @length the number of characters to append |
| */ |
| void |
| accumContentArray( |
| const XalanDOMChar chars[], |
| size_type start, |
| size_type length); |
| |
| /** |
| * Append an array of wide character to the buffer. |
| * All characters are representable, |
| * so no checks or escapes are needed. |
| * |
| * @chars the array to append |
| * @start the offset into the array to start from |
| * @length the number of characters to append |
| */ |
| void |
| accumArrayUTF( |
| const XalanDOMChar chars[], |
| size_type start, |
| size_type length); |
| |
| /** |
| * Append an array of wide character to the output. |
| * All characters are representable, |
| * so no checks or escapes are needed. |
| * |
| * @chars the array to append |
| * @start the offset into the array to start from |
| * @length the number of characters to append |
| */ |
| void |
| accumArrayUTFDirect( |
| const XalanDOMChar chars[], |
| size_type start, |
| size_type length); |
| |
| /** |
| * Append a string to the buffer. |
| * Characters that are not representable in the |
| * encoding are not written as entities. |
| * |
| * @str the string to append |
| */ |
| void |
| accumNameDOMString(const XalanDOMString& str); |
| |
| /** |
| * Append a string to the buffer. |
| * Characters that are not representable in the |
| * encoding are written as entities. |
| * |
| * @str the string to append |
| */ |
| void |
| accumContentDOMString(const XalanDOMString& str); |
| |
| /** |
| * Append a string to the buffer. |
| * All characters are representable, |
| * so no checks or escapes are needed. |
| * |
| * @str the string to append |
| */ |
| void |
| accumDOMStringUTF(const XalanDOMString& str); |
| |
| /** |
| * Append a string to the output. |
| * All characters are representable, |
| * so no checks or escapes are needed. |
| * |
| * @str the string to append |
| */ |
| void |
| accumDOMStringUTFDirect(const XalanDOMString& str); |
| |
| /** |
| * Output the doc type declaration. |
| * |
| * @param name the name of the doctype. |
| */ |
| void |
| outputDocTypeDecl(const XalanDOMChar* name); |
| |
| /** |
| * Process an attribute. |
| * @param name The name of the attribute. |
| * @param value The value of the attribute. |
| */ |
| void |
| processAttribute( |
| const XalanDOMChar* name, |
| const XalanDOMChar* value); |
| |
| /** |
| * Prints <var>n</var> spaces. |
| * @param n Number of spaces to print. |
| */ |
| void |
| printSpace(int n); |
| |
| /** |
| * Normalize the data in a PI, to replace any |
| * "?>" pairs with "? >" |
| * @param theData the data to normalize. |
| */ |
| void |
| accumNormalizedPIData( |
| const XalanDOMChar* theData, |
| size_type theLength); |
| |
| |
| // Data members... |
| /** |
| * True if an encoding is only has only values from 0 - 255 |
| */ |
| bool m_bytesEqualChars; |
| |
| bool m_shouldFlush; |
| |
| /** |
| * Add space before '/>' for XHTML. |
| */ |
| bool m_spaceBeforeClose; |
| |
| /** |
| * If true, characters in cdata sections are |
| * escaped, instead of being writted out as |
| * cdata sections. |
| */ |
| bool m_escapeCData; |
| |
| /** |
| * Tells the XML version, for writing out to the XML decl. |
| */ |
| const XalanDOMString m_version; |
| |
| /** |
| * Text for standalone part of header. |
| */ |
| const XalanDOMString m_standalone; |
| |
| /** |
| * The media type. Not used right now. |
| */ |
| const XalanDOMString m_mediaType; |
| |
| /** |
| * These are characters that will be escaped in the output. |
| */ |
| const XalanDOMString m_attrSpecialChars; |
| |
| //typedef XalanDOMString::size_type size_type; |
| |
| /** |
| * The string "<!DOCTYPE ". |
| */ |
| static const XalanDOMChar s_doctypeHeaderStartString[]; |
| |
| static const size_type s_doctypeHeaderStartStringLength; |
| |
| /** |
| * The string " PUBLIC \"". |
| */ |
| static const XalanDOMChar s_doctypeHeaderPublicString[]; |
| |
| static const size_type s_doctypeHeaderPublicStringLength; |
| |
| /** |
| * The string " SYSTEM \"". |
| */ |
| static const XalanDOMChar s_doctypeHeaderSystemString[]; |
| |
| static const size_type s_doctypeHeaderSystemStringLength; |
| |
| /** |
| * The string "<?xml version=\"". |
| */ |
| static const XalanDOMChar s_xmlHeaderStartString[]; |
| |
| static const size_type s_xmlHeaderStartStringLength; |
| |
| /** |
| * The string "\" encoding=\"". |
| */ |
| static const XalanDOMChar s_xmlHeaderEncodingString[]; |
| |
| static const size_type s_xmlHeaderEncodingStringLength; |
| |
| /** |
| * The string "\" standalone=\"". |
| */ |
| static const XalanDOMChar s_xmlHeaderStandaloneString[]; |
| |
| static const size_type s_xmlHeaderStandaloneStringLength; |
| |
| /** |
| * The string "\"?>". |
| */ |
| static const XalanDOMChar s_xmlHeaderEndString[]; |
| |
| static const size_type s_xmlHeaderEndStringLength; |
| |
| /** |
| * The string "1.0". |
| */ |
| static const XalanDOMChar s_defaultVersionString[]; |
| |
| static const size_type s_defaultVersionStringLength; |
| |
| /** |
| * The string "-//W3C//DTD XHTML". |
| */ |
| static const XalanDOMChar s_xhtmlDocTypeString[]; |
| |
| static const size_type s_xhtmlDocTypeStringLength; |
| |
| /** |
| * The string "]]>". |
| */ |
| static const XalanDOMChar s_dtdCDATACloseString[]; |
| |
| static const size_type s_dtdCDATACloseStringLength; |
| |
| DOMCharBufferType m_charBuf; |
| |
| XalanDOMString::size_type m_pos; |
| |
| ByteBufferType m_byteBuf; |
| |
| static const XalanDOMString::size_type s_maxBufferSize; |
| |
| /** |
| * A stack of Boolean objects that tell if the given element |
| * has children. |
| */ |
| BoolStackType m_elemStack; |
| |
| /** |
| * A pointer to a member function that will do accumulating |
| * for names. |
| */ |
| AccumCharFunctionType m_accumNameCharFunction; |
| |
| /** |
| * A pointer to a member function that will do accumulating |
| * for names. |
| */ |
| AccumStringFunctionType m_accumNameStringFunction; |
| |
| /** |
| * A pointer to a member function that will do accumulating |
| * for names. |
| */ |
| AccumDOMStringFunctionType m_accumNameDOMStringFunction; |
| |
| /** |
| * A pointer to a member function that will do accumulating |
| * for names. |
| */ |
| AccumArrayFunctionType m_accumNameArrayFunction; |
| |
| /** |
| * A pointer to a member function that will do accumulating |
| * for content. |
| */ |
| AccumCharFunctionType m_accumContentCharFunction; |
| |
| /** |
| * A pointer to a member function that will do accumulating |
| * for content. |
| */ |
| AccumStringFunctionType m_accumContentStringFunction; |
| |
| /** |
| * A pointer to a member function that will do accumulating |
| * for content. |
| */ |
| AccumDOMStringFunctionType m_accumContentDOMStringFunction; |
| |
| /** |
| * A pointer to a member function that will do accumulating |
| * for names. |
| */ |
| AccumArrayFunctionType m_accumContentArrayFunction; |
| |
| /** |
| * A pointer to the member function that will flush the buffer. |
| */ |
| FlushFunctionType m_flushFunction; |
| |
| /** |
| * The string of characters that represents the newline |
| */ |
| const XalanDOMChar* m_newlineString; |
| |
| /** |
| * The length of the the string of characters that represents the newline |
| */ |
| XalanDOMString::size_type m_newlineStringLength; |
| |
| bool m_isXML1_1; |
| }; |
| |
| |
| |
| } |
| |
| |
| |
| #endif // FORMATTERTOXML_HEADER_GUARD_1357924680 |