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();
508 writeDefaultEscape(XalanDOMChar ch)
510 assert(m_charPredicate.content(ch) ==
true);
512 if(!writeDefaultEntity(ch))
520 if(m_charPredicate.isForbidden(ch) ==
true)
529 writeNumericCharacterReference(ch);
539 writeDefaultAttributeEscape(XalanDOMChar ch)
541 assert(m_charPredicate.attribute(ch) ==
true);
543 if(writeDefaultAttributeEntity(ch) ==
false)
545 if(m_charPredicate.isForbidden(ch) ==
true)
554 writeNumericCharacterReference(ch);
565 writeDefaultEntity(XalanDOMChar 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);
598 writeDefaultAttributeEntity(XalanDOMChar ch)
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);
671 writeNumericCharacterReference(
unsigned long theNumber)
677 clear(m_stringBuffer);
683 writeNormalizedCharBig(
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