presadap12/Parser2/SrcXmlSerializer/CPEngXmlSerializer.h
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presadap12/Parser2/SrcXmlSerializer/CPEngXmlSerializer.h	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,209 @@
+/*
+* Copyright (c) 2004 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:  XML Serializer implementation.
+*
+*/
+
+#ifndef __CPENGXMLSERIALIZER_H__
+#define __CPENGXMLSERIALIZER_H__
+
+//  INCLUDES
+#include <e32base.h>
+#include <e32std.h>
+#include <badesca.h>
+
+#include "MPEngXmlSerializer.h"
+#include "TPEngWriter.h"
+
+
+
+//MODULE DATA STRUCTURES
+/**
+ * Enumeration defining different
+ * serializer states.
+ */
+enum TPEngSerializerState
+    {
+    EPEngInRoot =  0,  ///< Initial state. No start tag or element open (ready to accept start tags or content).
+    EPEngInStartTag,   ///< Start tag's start written (ready to accept XML attributes).
+    EPEngInElement,    ///< Start tag closed, in element (ready to accept content).
+    };
+
+
+/**
+ * Container for serializer state specific data.
+ *
+ * Data holded by this structure is
+ * used when rolling back the serializer
+ * state.
+ */
+struct TPEngSerializerStateData
+    {
+    TInt iWriterLength;           ///< Length of produced XML in the writer.
+    TPEngSerializerState iState;  ///< Serializer state enumeration.
+#ifdef __SERIALIZER_TAG_NAME_ASSERT
+    TInt iAssertionStackCount;    ///< Count of elements there in the element stack.
+#endif
+    };
+
+
+
+//FORWARD DECLARATION
+class CPEngTagAssertionStack;
+
+
+
+// CLASS DECLARATION
+/**
+ * XML Serializer implementation.
+ *
+ * @lib PEngParser.lib
+ * @since 2.1
+ */
+class CPEngXmlSerializer : public CBase,
+            public MPEngXMLSerializer
+    {
+    public:  // Two-phased constructors and destructor
+
+        /**
+         * Two-phased constructor.
+         *
+         * @since 2.1
+         */
+        IMPORT_C static CPEngXmlSerializer* NewL( TDes8& aBuffer );
+        IMPORT_C static CPEngXmlSerializer* NewLC( TDes8& aBuffer );
+
+
+        /**
+         * Destructor.
+         */
+        ~CPEngXmlSerializer();
+
+    private:
+
+        /**
+         * C++ constructor.
+         */
+        CPEngXmlSerializer( TDes8& aBuffer );
+
+        /**
+         * Symbian OS constructor.
+         */
+        void ConstructL();
+
+    public:  // XML Serialization methods from MPEngXmlSerializer
+
+
+        void Close();
+
+        MPEngXMLSerializer& StartTagL( const TDesC8& aName );
+        MPEngXMLSerializer& AttributeL( const TDesC8& aName, const TDesC8& aValue );
+        MPEngXMLSerializer& EndTagL( const TDesC8& aName );
+
+
+        MPEngXMLSerializer& RawValueL( const TDesC8& aValue );
+        MPEngXMLSerializer& NarrowTextL( const TDesC8& aText );
+        MPEngXMLSerializer& UnicodeTextL( const TDesC16& aText );
+        MPEngXMLSerializer& WvAddressL( const TDesC16& aAddress );
+        MPEngXMLSerializer& Base64DataL( const TDesC8& aData );
+
+
+
+    public: //Serializer state handling support
+
+        /**
+         * @see MPEngXmlSerializer
+         *
+         * @since 2.1
+         */
+        void PushSerializerStateL();
+
+        /**
+         * @see MPEngXmlSerializer
+         *
+         * @since 2.1
+         */
+        void CommitState();
+
+        /**
+         * @see MPEngXmlSerializer
+         *
+         * @since 2.1
+         */
+        void RollbackState();
+
+        /**
+         * @see MPEngXmlSerializer
+         *
+         * @since 2.1
+         */
+        TInt PushedStateCount();
+
+
+    protected: //Private helpers
+
+
+        void CheckAndCloseOpenStartTagL();
+        TInt EncodeWvAddressChars( TDes16& aEncodedAddress,
+                                   const TDesC16& aUnicodeAddress );
+
+        void WriteXmlEscapedL( const TDesC8& aString,
+                               TBool aEscapeQuotes );
+
+        void WriteXmlEscapedL( TUint8 aCharacter,
+                               TBool aEscapeQuotes );
+
+
+
+
+
+    protected: //Assertion helpers
+
+        void __AssertNoXmlEscapedCharsL( const TDesC8& aString );
+
+        void __AssertSerializerStateL( TBool aInCorrectState,
+                                       TPEngSerializerPanics aPanicReason );
+
+        void __AssertNotEmptyL( const TDesC8& aString );
+
+
+#ifdef __SERIALIZER_TAG_NAME_ASSERT
+        void __AssertEndTagName( const TDesC8& aEndTagName );
+#endif // __SERIALIZER_TAG_NAME_ASSERT
+
+
+    private:    // Data
+
+        //OWN: serializer state
+        TPEngSerializerState iState;
+
+        //OWN: Content writer
+        TPEngWriter          iWriter;
+
+        //OWN: Start tag count
+        TInt                 iStartTagCount;
+
+        //OWN: Pushed states
+        RArray< TPEngSerializerStateData >  iStateStack;
+
+#ifdef __SERIALIZER_TAG_NAME_ASSERT
+        //OWN: Start tag assertion stack
+        CPEngTagAssertionStack*             iAssertionStack;
+#endif //   __SERIALIZER_TAG_NAME_ASSERT
+    };
+
+#endif      //  __CPENGXMLSERIALIZER_H__
+
+
+//  End of File