--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/xdmprotocols/XdmXmlParser/inc/XmlFormatter.h Tue Feb 02 01:05:17 2010 +0200
@@ -0,0 +1,212 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: CXmlFormatter
+*
+*/
+
+
+
+
+#ifndef __XMLFORMATTER__
+#define __XMLFORMATTER__
+
+// INCLUDES
+#include <e32base.h>
+#include "XmlParserNodePath.h"
+#include "XmlNodePathInterface.h"
+
+//Konsts
+_LIT8( KXmldocumentStart, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" );
+
+//Forwar declarations
+class CXdmDocument;
+class CXdmXmlParser;
+class CXdmDocumentNode;
+class MXdmNodeInterface;
+class CXmlParserNodePath;
+
+// CLASS DECLARATION
+NONSHARABLE_CLASS( CXmlFormatter ) : public CBase,
+ public MXmlNodePathInterface
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Symbian OS Constructor
+ * @return CXmlFormatter* New XML formatter
+ */
+ static CXmlFormatter* NewL( CXdmXmlParser& aParserMain );
+
+ /**
+ * Format a document
+ * @param TBool Indicates whether parameter is a whole document
+ * @param CXdmDocument* The target document
+ * @param CXdmDocumentNode* The target element
+ * @return HBufC8* The document in textual form
+ */
+ HBufC8* FormatLC( TBool aIsWholeDocument,
+ const CXdmDocument* aDocument,
+ const CXdmDocumentNode* aRootNode );
+
+ /**
+ * Format a document
+ * @param TDesC8& An XML fragment to append
+ * @param CXdmDocument* The target document
+ * @param CXdmDocumentNode* The target element
+ * @return HBufC8* The document in textual form
+ */
+ HBufC8* FormatLC( const TDesC8& aXmlFragment,
+ const CXdmDocument* aDocument,
+ const CXdmDocumentNode* aTargetNode );
+
+ /**
+ * Destructor
+ */
+ virtual ~CXmlFormatter();
+
+ private: //From MXmlParserNodePathInterface
+
+ /**
+ * Return the target attribute
+ * @return CXdmNodeAttribute* target attribute
+ */
+ CXdmNodeAttribute* TargetAttribute() const;
+
+ private:
+
+ /**
+ * C++ constructor
+ * @return CXmlFormatter
+ */
+ CXmlFormatter( CXdmXmlParser& aParserMain );
+
+ /**
+ * Symbian OS second-phase constructor
+ * @return void
+ */
+ void ConstructL();
+
+ /**
+ * Read data from the format buffer into a contiguous segment
+ * @return HBufC8* An XML document in textual form
+ */
+ HBufC8* BufferToStringLC();
+
+ /**
+ * Check the next element in a document
+ * @param CXdmDocumentNode& An XML element
+ * @return void
+ */
+ void CheckSubsetPath( const CXdmDocumentNode& aNode );
+
+ /**
+ * Reset the internal format buffer
+ * @return void
+ */
+ void ResetFormatBuffer();
+
+ /**
+ * Find the (local) name of an element
+ * @param TDesC8& The whole element string
+ * @return TPtrC8 Name part of the element string
+ */
+ TPtrC8 FindElementName( const TDesC8& aElementString );
+
+ /**
+ * Format namespace declarations
+ * @param CXdmDocumentNode& An XML element
+ * @return MXdmNamespaceContainer& Namespace container
+ */
+ void FormatNamespaceDeclarationsL( const CXdmDocumentNode& aRootNode,
+ const MXdmNamespaceContainer& aContainer );
+
+ /**
+ * Format the parameter element and its descendants
+ * @param CXdmDocumentNode The element to format
+ * @return void
+ */
+ void FormatElementsL( CXdmDocumentNode* aCurrentNode );
+
+ /**
+ * Format a leaf element
+ * @param CXdmDocumentNode The element to format
+ * @return void
+ */
+ void FormatLeafElementL( CXdmDocumentNode* aCurrentNode );
+
+ /**
+ * Format the start of the parameter element
+ * @param TDesC8& Element prefix
+ * @param TDesC8& Element URI
+ * @return void
+ */
+ void FormatElementStartL( const TDesC8& aPrefix,
+ const TDesC8& aElementData );
+
+ /**
+ * Format the end of the parameter element
+ * @param TDesC8& Element prefix
+ * @param TDesC8& Element URI
+ * @return void
+ */
+ void FormatElementEndL( const TDesC8& aPrefix,
+ const TDesC8& aElementData );
+
+ /**
+ * Format an empty element
+ * @param CXdmDocumentNode The element to format
+ * @return void
+ */
+ void FormatEmptyElementL( CXdmDocumentNode* aEmptyNode );
+
+
+ /**
+ * Append a namespace mapping
+ * @param TDesC8& Element URI
+ * @param TDesC8& Element prefix
+ * @return void
+ */
+ void AppendNamespaceL( const TDesC8& aUri, const TDesC8& aPrefix );
+
+ /**
+ * Append XML fragment into the format buffer
+ * @return void
+ */
+ void AppendXmlFragmentL();
+
+ /**
+ * Return the prefix of the parameter element
+ * @param MXdmNodeInterface& An XML element
+ * @return TPtrC8 Prefix
+ */
+ TPtrC8 Prefix( const MXdmNodeInterface& aInterface );
+
+ private: //Data
+
+ TInt iFormBufferPos;
+ TBool iTargetFound;
+ TBool iIsAppended;
+ CBufSeg* iFormatBuffer;
+ TPtrC8 iDocumentFragment;
+ CXdmXmlParser& iParserMain;
+ CXdmNodeAttribute* iTargetAttribute;
+ CXmlParserNodePath* iNodePath;
+ TXdmElementType iElementType;
+
+ };
+
+#endif //__XMLPARSERNODEPATH__
+
+
+// End of File