--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/PECengine/Parser2/Inc/MPEngXMLSerializer.h Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,330 @@
+/*
+* Copyright (c) 2003 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: interface for Presence XML Serializer.
+*
+*/
+
+#ifndef __MPENGXMLSERIALIZER_H
+#define __MPENGXMLSERIALIZER_H
+
+// INCLUDES
+#include <E32Std.h>
+
+
+//CONSTANTS
+
+/**
+* Serializer panic reasons.
+* @since 2.1
+*/
+enum TPEngSerializerPanics
+ {
+ EPEngSrlzr_AttributeNotAllowed = 0,
+ EPEngSrlzr_EndTagNotAllowed = 1,
+ EPEngSrlzr_EmptyInputString = 2,
+ EPEngSrlzr_EndTagNameMismatch = 3,
+ EPEngSrlzr_StateStackUnderflow = 4,
+ EPEngSrlzr_XmlMarkupCharNotAllowed = 5,
+ };
+
+/**
+* Serializer panic category.
+* @since 2.1
+*/
+_LIT( KXmlSerializer, "XMLSerializ" );
+
+
+
+
+//FORWARD DECLARATION
+class MPEngXMLSerializer;
+
+
+// FUNCTION PROTOTYPES
+
+/**
+ * Factory method to create XML Serializer.
+ *
+ * @since 3.0
+ */
+IMPORT_C MPEngXMLSerializer* CreateXmlSerializerL( TDes8& aBuffer );
+IMPORT_C MPEngXMLSerializer* CreateXmlSerializerLC( TDes8& aBuffer );
+
+
+
+
+
+// CLASS DEFINITION
+/**
+* This class defines the interface for Presence XML Serializer.
+* XML serializer is used for generating XML fragments.
+*
+* It offers features to write XML tags, XML attributes and actual
+* XML fragment content.
+*
+* @since 2.1
+*/
+class MPEngXMLSerializer
+ {
+ public: //Element handling methods
+
+ /**
+ * Writes a start tag.
+ *
+ * Writes a start tag with the given name.
+ * If aName is zero length descriptor,
+ * panics in debug builds with EEmptyInputString
+ * and release builds leaves with KErrArgument.
+ *
+ * @since 2.1
+ * @param aName Tags name.
+ * @return Self.
+ */
+ virtual MPEngXMLSerializer& StartTagL( const TDesC8& aName ) = 0;
+
+
+ /**
+ * Writes an attribute.
+ *
+ * Attributes must be written directly after starting
+ * the tag with StartTagL() method. It is possible write
+ * several attributes by issuing multiple calls to AttributeL().
+ * If attribute isn't written directly after starting the tag,
+ * panics in debug builds with EPEngSrlzr_AttributeNotAllowed and
+ * leaves on release builds with KErrNotSupported.
+ *
+ * If aName is empty descriptor, panics in debug
+ * builds with EPEngSrlzr_EmptyInputString and release
+ * builds leaves with KErrArgument. However, aValue can
+ * be empty descriptor.
+ *
+ * @since 2.1
+ * @param aName The attribute name.
+ * @param aValue The attribute value.
+ * @return Self.
+ */
+ virtual MPEngXMLSerializer& AttributeL( const TDesC8& aName,
+ const TDesC8& aValue ) = 0;
+
+
+ /**
+ * Writes end tag.
+ *
+ * Writes end tag with the given name.
+ * (Closes thus lastly written start tag.)
+ *
+ * If there isn't any start tag to close, panics in debug
+ * builds with EPEngSrlzr_EndTagNotAllowed and release builds
+ * leaves with KErrNotSupported.
+ *
+ * If aName is zero length descriptor,
+ * panics in debug builds with EPEngSrlzr_EmptyInputString
+ * and release builds leaves with KErrArgument.
+ *
+ * If passed end tag name aName doesn't match corresponding
+ * start tag name, panics in debug builds with
+ * EPEngSrlzr_EndTagNameMismatch.
+ * For performance reasons this check isn't done on
+ * release builds ==> possible end tag name mismatches
+ * are ignored in release builds.
+ *
+ * @since 2.1
+ * @param aName Tag name.
+ * @return Self.
+ */
+ virtual MPEngXMLSerializer& EndTagL( const TDesC8& aName ) = 0;
+
+
+
+
+ public: //Content writing methods
+
+
+ /**
+ * Writes raw protocol value without _ANY_ encoding.
+ *
+ * Checks the written value doesn't contain XML markup characters.
+ * If it contains, handles the error with panic:
+ * EPEngSrlzr_XmlMarkupCharNotAllowed.
+ *
+ * @since 3.0
+ * @param aValue Raw protocol value to write.
+ * @return Self.
+ */
+ virtual MPEngXMLSerializer& RawValueL( const TDesC8& aValue ) = 0;
+
+
+ /**
+ * Writes 8 bit text.
+ *
+ * Performed steps:
+ * 1. Escapes XML entities.
+ *
+ * @since 3.0
+ * @param aText Text to write.
+ * @return Self.
+ */
+ virtual MPEngXMLSerializer& NarrowTextL( const TDesC8& aText ) = 0;
+
+
+ /**
+ * Writes Unicode text.
+ *
+ * Performed steps:
+ * 1. Converts text from Unicode to Utf8
+ * 2. Escapes XML entities
+ *
+ * @since 3.0
+ * @param aText Text to write.
+ * @return Self.
+ */
+ virtual MPEngXMLSerializer& UnicodeTextL( const TDesC16& aText ) = 0;
+
+
+ /**
+ * Writes WV Address.
+ *
+ * Performed steps:
+ * 1. Escapes WV Address characters
+ * 2. Converts text from Unicode to Utf8
+ * 3. Escape XML entities
+ *
+ * @since 3.0
+ * @param aAddress Address to write.
+ * @return Self.
+ */
+ virtual MPEngXMLSerializer& WvAddressL( const TDesC16& aAddress ) = 0;
+
+
+ /**
+ * Writes data in BASE64 format.
+ *
+ * Performed steps:
+ * 1. Coverts data to BASE64 format
+ *
+ * @since 3.0
+ * @param aData The data to write.
+ * @return Self.
+ */
+ virtual MPEngXMLSerializer& Base64DataL( const TDesC8& aData ) = 0;
+
+
+
+
+
+
+ public: //Serializer state handling methods
+
+ /**
+ * Stores serializer current state.
+ *
+ * Stores serializer current state to its internal
+ * state stack. State consists from previously generated
+ * XML fragment and other serializer internal data.
+ *
+ * States are stored to stack like structure and later
+ * serializer state can be restored back to pushed state
+ * or pushed state can be committed.
+ *
+ * On serializer destruction all previously pushed
+ * states are committed automaticly.
+ *
+ * @since 2.1
+ */
+ virtual void PushSerializerStateL() = 0;
+
+ /**
+ * Commits topmost state in the state stack.
+ *
+ * Commits topmost state in the serializer
+ * state stack. If there isn't any state to
+ * commit, panics in debug builds with
+ * EPEngSrlzr_StateStackUnderflow. In
+ * release builds underflow is ignored.
+ *
+ * @since 2.1
+ */
+ virtual void CommitState() = 0;
+
+ /**
+ * Rollbacks the serializer state to topmost
+ * state in the state stack.
+ *
+ * Rollbacks the serializer state to topmost
+ * state in the state stack. If there isn't
+ * any state to commit, panics in debug builds
+ * with EPEngSrlzr_StateStackUnderflow. In
+ * release builds underflow is ignored.
+ *
+ * @since 2.1
+ */
+ virtual void RollbackState() = 0;
+
+ /**
+ * Gets the count of pushed states.
+ *
+ * @since 2.1
+ * @return Count of pushed states.
+ */
+ virtual TInt PushedStateCount() = 0;
+
+
+ public: //Destructor & Cleanup support
+
+ /**
+ * Release method.
+ * When called, deletes object and
+ * frees all its resources.
+ *
+ * Concrete serializer object can be thus pushed
+ * on the CleanupStack using CleanupClosePushL().
+ */
+ virtual void Close() = 0;
+
+
+ /**
+ * Inline virtual destructor.
+ * Concrete instancies can be deleted
+ * trough this interface.
+ */
+ virtual ~MPEngXMLSerializer() {}
+
+ };
+
+#endif //__MPENGXMLSERIALIZER_H
+
+
+// End of File
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+