16 #if !defined(FORMATTERTOXML_UNICODE_HEADER_GUARD_1357924680)
17 #define FORMATTERTOXML_UNICODE_HEADER_GUARD_1357924680
29 #include "xercesc/sax/AttributeList.hpp"
43 XALAN_CPP_NAMESPACE_BEGIN
63 eDefaultIndentAmount = 0
83 MemoryManager& theManager,
90 size_type indent = eDefaultIndentAmount) :
99 m_stringBuffer(theManager),
100 m_writer(writer, theManager),
103 m_indentHandler(m_writer , indent)
123 ThisType* theResult = theGuard.
get();
125 new (theResult) ThisType(
148 return m_writer.getWriter();
156 m_indentHandler.setStartNewLine(
true);
158 m_indentHandler.indent();
165 const XMLCh*
const name,
166 AttributeList& attrs)
172 m_indentHandler.setPreserve(
false);
174 m_indentHandler.indent();
176 m_indentHandler.setStartNewLine(
true);
182 const unsigned int nAttrs = attrs.getLength();
184 for (
unsigned int i = 0; i < nAttrs ; i++)
186 processAttribute(attrs.getName(i), attrs.getValue(i));
192 m_indentHandler.increaseIndent();
194 m_indentHandler.setPrevText(
false);
200 m_indentHandler.decreaseIndent();
204 if (hasChildNodes ==
true)
206 m_indentHandler.indent();
215 if(m_spaceBeforeClose ==
true)
225 if (hasChildNodes ==
true)
227 m_indentHandler.pop_preserve();
230 m_indentHandler.setPrevText(
false);
235 const XMLCh*
const chars,
236 const unsigned int length)
240 m_indentHandler.setPreserve(
true);
242 m_writer.write(chars, length);
251 m_indentHandler.indent();
265 m_indentHandler.indent();
278 m_indentHandler.setStartNewLine(
true);
284 return m_constants.s_encodingString;
292 m_writer.flushBuffer();
300 m_constants.s_xmlHeaderStartString,
301 m_constants.s_xmlHeaderStartStringLength);
303 if (
length(m_version) != 0)
305 m_writer.write(m_version);
310 m_constants.s_defaultVersionString,
311 m_constants.s_defaultVersionStringLength);
316 m_constants.s_xmlHeaderEncodingString,
317 m_constants.s_xmlHeaderEncodingStringLength);
319 m_writer.write(m_encoding);
321 if (
length(m_standalone) != 0)
324 m_constants.s_xmlHeaderStandaloneString,
325 m_constants.s_xmlHeaderStandaloneStringLength);
327 m_writer.write(m_standalone);
331 m_constants.s_xmlHeaderEndString,
332 m_constants.s_xmlHeaderEndStringLength);
336 m_indentHandler.outputLineSep();
346 m_constants.s_doctypeHeaderStartString,
347 m_constants.s_doctypeHeaderStartStringLength);
349 m_writer.write(name);
351 if(
length(m_doctypePublic) != 0)
355 m_constants.s_doctypeHeaderPublicString,
356 m_constants.s_doctypeHeaderPublicStringLength);
358 writeName(m_doctypePublic.c_str());
368 m_constants.s_doctypeHeaderSystemString,
369 m_constants.s_doctypeHeaderSystemStringLength);
372 writeName(m_doctypeSystem.c_str());
388 m_indentHandler.indent();
403 writeNormalizedData(data, len);
425 m_indentHandler.setPreserve(
true);
428 unsigned int firstIndex = 0;
432 const XalanDOMChar ch = chars[i];
434 if(m_charPredicate.range(ch) ==
true)
436 safeWriteContent(chars + firstIndex, i - firstIndex);
438 i = writeNormalizedCharBig(chars, i, length);
444 else if(m_charPredicate.content(ch) ==
false)
450 safeWriteContent(chars + firstIndex, i - firstIndex);
452 writeDefaultEscape(ch);
460 safeWriteContent(chars + firstIndex, i - firstIndex);
462 m_indentHandler.setPrevText(
true);
475 m_indentHandler.setPreserve(
true);
477 m_indentHandler.indent();
480 m_constants.s_cdataOpenString,
481 m_constants.s_cdataOpenStringLength);
483 bool outsideCDATA =
false;
485 writeCDATAChars(chars, length, outsideCDATA);
487 if (outsideCDATA ==
false)
490 m_constants.s_cdataCloseString,
491 m_constants.s_cdataCloseStringLength);
501 m_writer.outputNewline();
510 assert(m_charPredicate.content(ch) ==
true);
512 if(!writeDefaultEntity(ch))
520 if(m_charPredicate.isForbidden(ch) ==
true)
529 writeNumericCharacterReference(ch);
541 assert(m_charPredicate.attribute(ch) ==
true);
543 if(writeDefaultAttributeEntity(ch) ==
false)
545 if(m_charPredicate.isForbidden(ch) ==
true)
554 writeNumericCharacterReference(ch);
570 m_constants.s_lessThanEntityString,
571 m_constants.s_lessThanEntityStringLength);
576 m_constants.s_greaterThanEntityString,
577 m_constants.s_greaterThanEntityStringLength);
582 m_constants.s_ampersandEntityString,
583 m_constants.s_ampersandEntityStringLength);
600 if (writeDefaultEntity(ch) ==
true)
607 m_constants.s_quoteEntityString,
608 m_constants.s_quoteEntityStringLength);
629 m_indentHandler.setPrevText(
false);
631 m_indentHandler.push_preserve();
644 const XalanDOMChar chars[],
654 if(m_charPredicate.isCharRefForbidden(ch))
663 start = m_writer.write( chars, start, length);
677 clear(m_stringBuffer);
684 const XalanDOMChar chars[],
688 assert( start < length);
690 const XalanDOMChar ch = chars[start];
692 assert(m_charPredicate.range(ch) ==
true);
694 if (XMLVersion == XML_VERSION_1_1 &&
697 writeNumericCharacterReference(ch);
701 start = m_writer.write(chars, start, length);
715 const XalanDOMChar chars[],
728 const XalanDOMChar theChar = chars[i];
735 if (outsideCDATA ==
true)
738 m_constants.s_cdataCloseString,
739 m_constants.s_cdataCloseStringLength);
746 m_constants.s_cdataCloseString,
747 m_constants.s_cdataCloseStringLength);
750 m_constants.s_cdataOpenString,
751 m_constants.s_cdataOpenStringLength);
755 outsideCDATA =
false;
765 else if(m_charPredicate.isCharRefForbidden(theChar))
774 i = m_writer.writeCDATAChar(chars, i, length, outsideCDATA);
781 if(outsideCDATA ==
true)
784 m_constants.s_cdataOpenString,
785 m_constants.s_cdataOpenStringLength);
798 const XalanDOMChar* theString,
801 assert(theString != 0);
806 while(i < theStringLength)
808 const XalanDOMChar ch = theString[i];
810 if(m_charPredicate.range(ch) ==
true)
812 safeWriteContent(theString + firstIndex, i - firstIndex);
814 i = writeNormalizedCharBig(theString, i, theStringLength);
820 else if (m_charPredicate.attribute(ch) ==
false)
826 safeWriteContent(theString + firstIndex, i - firstIndex);
828 writeDefaultAttributeEscape(ch);
836 safeWriteContent(theString + firstIndex, i - firstIndex);
848 const XalanDOMChar* name,
849 const XalanDOMChar* value)
855 writeAttrString(value,
length(value));
866 const XalanDOMChar* theData,
871 const XalanDOMChar theChar = theData[i];
873 i = writeNormalizedChar(theChar, theData, i, theLength);
879 const XalanDOMChar* theChars,
884 m_writer.write(value_type(theChars[i]));
889 writeName(
const XalanDOMChar* theChars)
891 assert( theChars != 0);
893 m_writer.writeNameChar(theChars,
length(theChars));
911 UnicodeWriter m_writer;
913 ConstantsType m_constants;
915 CharPredicate m_charPredicate;
917 IndentHandler m_indentHandler;
922 XALAN_CPP_NAMESPACE_END
926 #endif // FORMATTERTOXML_UNICODE_HEADER_GUARD_1357924680
Definition: XalanUnicode.hpp:44
bool operator==(const XalanVector< Type > &theLHS, const XalanVector< Type > &theRHS)
Definition: XalanVector.hpp:1111
Definition: XalanUnicode.hpp:56
size_type length() const
Definition: XalanDOMString.hpp:209
Definition: XalanUnicode.hpp:50
XALAN_CPP_NAMESPACE_BEGIN typedef XERCES_CPP_NAMESPACE_QUALIFIER MemoryManager MemoryManagerType
Definition: XalanMemoryManagement.hpp:39
bool childNodesWereAdded()
Determine if an element ever had any children added.
Definition: XalanXMLSerializerBase.hpp:638
Definition: Writer.hpp:42
Definition: XalanUnicode.hpp:48
Definition: XalanUnicode.hpp:69
Definition: XalanUnicode.hpp:41
virtual void outputNewline()=0
bool getNeedToOutputDoctypeDecl() const
Determine if it a DOCTYPE declaration needs to be written.
Definition: XalanXMLSerializerBase.hpp:612
bool outsideDocumentElement() const
Definition: XalanXMLSerializerBase.hpp:627
void openElementForChildren()
Open an element for possibile children.
Definition: XalanXMLSerializerBase.hpp:621
void clear(XalanDOMString &theString)
Remove all elements from target string.
Definition: DOMStringHelper.hpp:2291
static void throwInvalidXMLCharacterException(unsigned int ch, const XalanDOMString &theXMLversion, MemoryManager &theManager)
Throw an exception when an invalid character for the specific XML version is encountered.
void generateDoctypeDecl(const XalanDOMChar *name)
Definition: XalanXMLSerializerBase.hpp:653
Definition: XalanUnicode.hpp:93
Definition: XalanUnicode.hpp:95
Definition: XalanUnicode.hpp:87
MemoryManagerType & getMemoryManager()
Definition: XalanXMLSerializerBase.hpp:100
XalanXMLSerializerBase serves as a base class for XML serializers based on FormatterListener events...
Definition: XalanXMLSerializerBase.hpp:56
#define XALAN_XMLSUPPORT_EXPORT
Definition: XMLSupportDefinitions.hpp:33
Definition: XalanUnicode.hpp:89
XALAN_CPP_NAMESPACE_BEGIN typedef size_t size_type
Definition: XalanMap.hpp:44
Type * get() const
Definition: XalanMemMgrAutoPtr.hpp:164
Definition: XalanMemMgrAutoPtr.hpp:46
Definition: XalanUnicode.hpp:172
bool markParentForChildren()
Mark the parent element as having a child.
Definition: XalanXMLSerializerBase.hpp:591
Definition: XalanUnicode.hpp:91
Definition: XalanDOMString.hpp:42
Definition: XalanUnicode.hpp:46
XalanDOMString::size_type length(const XalanDOMString &theString)
Get the length of a XalanDOMString.
Definition: DOMStringHelper.hpp:277
bool isXMLWhitespace(XalanDOMChar theChar)
Determines whether character represents white space.
Definition: DOMStringHelper.hpp:1208
virtual void flushBuffer()=0
Definition: XalanUnicode.hpp:73
UnsignedLongToDOMString(unsigned long theValue, XalanDOMString &theResult)
Converts an unsigned long value and appends the result to a XalanDOMString.
unsigned int size_type
Definition: XalanDOMString.hpp:53
Definition: XalanUnicode.hpp:130