diff -r 000000000000 -r 62f9d29f7211 websrv_pub/xml_extensions_api/inc/SenXmlReader.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/websrv_pub/xml_extensions_api/inc/SenXmlReader.h Thu Jan 07 16:19:19 2010 +0200 @@ -0,0 +1,437 @@ +/* +* Copyright (c) 2002-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: Class extends Symbian XML framework parser functionality +* +*/ + + + + + + + + +#ifndef SEN_XMLREADER_H +#define SEN_XMLREADER_H + +// INCLUDES +#include +#include // for TParserFeature enumeration +#include +#include + +using namespace Xml; + +// CONSTANTS +const TInt KSenDefaultParserFeature = (TInt)EReportNamespaceMapping; + + +#ifdef RD_SEN_FORCE_LIBXML_SAX_PLUGIN_MIMETYPE + _LIT8(KXmlParserMimeType, "text/wsstarlibxml2"); + _LIT8(KXmlVariant, "wsstarlibxml2"); +#else + _LIT8(KXmlParserMimeType, "text/xml"); + _LIT8(KXmlVariant, "libxml2"); // LibXml2 SAX parser +#endif + +// FORWARD DECLARATIONS +class MSenContentHandlerClient; +class RFs; + +// CLASS DECLARATION + +/** +* Class extends Symbian XML framework parser functionality +* Callers of this class must register some handler which will +* then receive XML callback events from underlying Symbian +* XML framework. +* @lib SenXML.dll +* @since Series60 3.0 +*/ +class CSenXmlReader : public CBase, public MContentHandler + { + public: // Constructors and destructor + + /** + * Standard two-phase constructor. + * Creates new parser instance using default + * MIME type "text/xml" (KXmlParserMimeType). + * @since Series60 3.0 + * @return pointer to a new CSenXmlReader instance. + */ + IMPORT_C static CSenXmlReader* NewL(); + + /** + * Standard two-phase constructor. + * Creates new parser instance using default + * MIME type "text/xml" (KXmlParserMimeType). + * @since Series60 3.0 + * @return pointer to a new CSenXmlReader instance + * which is left on cleanup stack. + */ + IMPORT_C static CSenXmlReader* NewLC(); + + /** + * A constructor with parser feature enabling. Uses default + * parser MIME type "text/xml" (KXmlParserMimeType). + * @since Series60 3.0 + * @param aParserFeature is typically some enumeration introduced + * in Xml::TParserFeature or some other feature introduced in + * some XML parser implementation. + * Leave codes: + * KErrArgument if aParserFeature value is negative. + */ + IMPORT_C static CSenXmlReader* NewL(TInt aParserFeature); + + /** + * A constructor with parser feature enabling. Uses default + * parser MIME type "text/xml" (KXmlParserMimeType). + * @since Series60 3.0 + * @param aParserMimeType is the XML parser MIME type. + * If descriptor is of zero-length, then default + * MIME type KXmlParserMimeType is used ("text/xml"). + * Availability of other MIME types depends on + * underlying parser implementation. + * @param aParserFeature is typically some enumeration introduced + * in Xml::TParserFeature or some other feature introduced in + * some XML parser implementation. + * Leave codes: + * KErrArgument if aParserFeature value is negative. + */ + IMPORT_C static CSenXmlReader* NewLC(TInt aParserFeature); + + /** + * A constructor with parser MIME type. + * Standard two-phase constructor. + * @since Series60 3.0 + * @param aParserMimeType is the XML parser MIME type. + * If descriptor is of zero-length, then default + * MIME type KXmlParserMimeType is used ("text/xml"). + * Availability of other MIME types depends on + * underlying parser implementation. + * @return pointer to a new CSenXmlReader instance. + */ + IMPORT_C static CSenXmlReader* NewL(const TDesC8& aParserMimeType); + + /** + * A constructor with parser MIME type. + * @since Series60 3.0 + * @param aParserMimeType is the XML parser MIME type. + * If descriptor is of zero-length, then default + * MIME type KXmlParserMimeType is used ("text/xml"). + * Availability of other MIME types depends on + * underlying parser implementation. + * @return pointer to a new CSenXmlReader instance + * which is left on cleanup stack. + */ + IMPORT_C static CSenXmlReader* NewLC(const TDesC8& aParserMimeType); + + /** + * A constructor with parser MIME type and parser feature enabling. + * @since Series60 3.0 + * @param aParserFeature is typically some enumeration introduced + * in Xml::TParserFeature or some other feature introduced in + * some XML parser implementation. + * Leave codes: + * KErrArgument if aParserFeature value is negative. + */ + IMPORT_C static CSenXmlReader* NewL(const TDesC8& aParserMimeType, + TInt aParserFeature); + + /** + * A constructor with parser MIME type and parser feature enabling. + * @since Series60 3.0 + * @param aParserMimeType is the XML parser MIME type. + * If descriptor is of zero-length, then default + * MIME type KXmlParserMimeType is used ("text/xml"). + * Availability of other MIME types depends on + * underlying parser implementation. + * @param aParserFeature is typically some enumeration introduced + * in Xml::TParserFeature or some other feature introduced in + * some XML parser implementation. + * Leave codes: + * KErrArgument if aParserFeature value is negative. + */ + IMPORT_C static CSenXmlReader* NewLC(const TDesC8& aParserMimeType, + TInt aParserFeature); + + /** + * Destructor. + */ + IMPORT_C virtual ~CSenXmlReader(); + + // New functions + + /** + * Method to allow client to register a content event handler (for XML) for + * the current reader. + * @since Series60 3.0 + * @param aContentHandler The new event handler. + */ + IMPORT_C virtual void SetContentHandler( + MSenContentHandlerClient& aContentHandler); + + /** + * Method for checking which feature has been enabled in the parser. + * @since Series60 3.0 + * @return the corresponding integer id of the feature + */ + IMPORT_C virtual TInt EnabledParserFeature(); + + /** + * @deprecated - use EnabledParserFeature() instead. + */ + IMPORT_C virtual TInt ParserFeature(); + + /** + * Method for enabling a parser feature. + * @since Series60 3.0 + * @param aParserFeature is typically some enumeration introduced + * in Xml::TParserFeature or some other feature introduced in + * some XML parser implementation. + * @return KErrNone or some system-wide error code, if an error has + * occurred. + */ + TInt SetParserFeature(TInt aParserFeature); + + /** + * Parse an XML buffer. + * @since Series60 3.0 + * @param aBuff Buffer containing document to parse. + * Note that this method will also leave, if an error + * is returned from Symbian XML framework. Here are + * the corresponding enums, and their respective + * error code values (-1000, -999... and up) + * (XML-specific errors returned by the XML parser) + * [from XmlParserErrors.h] + * EXmlParserError = -1000, + * EXmlSyntax = 2+EXmlParserError, // -998 + * EXmlNoElements, // -997 + * EXmlInvalidToken, // -996 + * EXmlUnclosedToken, // -995 + * EXmlPartialChar, // -994 + * EXmlTagMismatch, // -993 + * EXmlDuplicateAttribute, // -992 + * EXmlJunkAfterDocElement, // -991 + * EXmlPeRef, // -990 + * EXmlUndefinedEntity, // -989 + * EXmlRecursiveEntity, // -988 + * EXmlAsyncEntity, // -987 + * EXmlBadCharRef, // -986 + * EXmlBinaryEntityRef, // -985 + * EXmlAttributeExternalEntityRef, // -984 + * EXmlMisplacedPi, // -983 + * EXmlUnknownEncoding, // -982 + * EXmlIncorrectEncoding, // -981 + * EXmlUnclosedCdata, // -980 + * EXmlExternalEntityHandling, // -979 + * EXmlNotStandalone, // -978 + * EXmlUnexpectedState, // -977 + * EXmlEntityDeclInPe, // -976 + * EXmlDtdRequired, // -975 + * EXmlFeatureLockedWhileParsing // -974 + */ + IMPORT_C void ParseL(const TDesC8& aBuff); + + /** + * Parse an XML document. + * @since Series60 3.0 + * @param aRFs An open filesession. + * @param aFileToParse Filename of file to parse. + */ + IMPORT_C void ParseL(RFs &aRFs, const TDesC& aFileToParse); + + // Functions from base classes + + // Callback functions implementing Symbian MContentHandler interface + + /** + * @since Series60 3.0 + * Leave codes: + * KErrSenXmlContentHandlerNotSet if XML content handler + * for this XML reader has not been set. This leave can + * be avoided calling SetContentHandlerL() method prior + * parsing some XML document. + */ + virtual void OnStartDocumentL(const RDocumentParameters& aDocParam, + TInt aErrorCode); + + /** + * @since Series60 3.0 + * Leave codes: + * KErrSenXmlContentHandlerNotSet if XML content handler + * for this XML reader has not been set. This leave can + * be avoided calling SetContentHandlerL() method prior + * parsing some XML document. + */ + virtual void OnEndDocumentL(TInt aErrorCode); + + /** + * @since Series60 3.0 + * Leave codes: + * KErrSenXmlContentHandlerNotSet if XML content handler + * for this XML reader has not been set. This leave can + * be avoided calling SetContentHandlerL() method prior + * parsing some XML document. + */ + virtual void OnStartElementL(const RTagInfo& aElement, + const RAttributeArray& aAttributes, + TInt aErrorCode); + + /** + * @since Series60 3.0 + * Leave codes: + * KErrSenXmlContentHandlerNotSet if XML content handler + * for this XML reader has not been set. This leave can + * be avoided calling SetContentHandlerL() method prior + * parsing some XML document. + */ + virtual void OnEndElementL(const RTagInfo& aElement, TInt aErrorCode); + + /** + * @since Series60 3.0 + * @param aBytes is the actual XML data, content in UTF-8 form + * @param aErrorCode KErrNone, or some system-wide error code + * if an error has occured. + */ + virtual void OnContentL(const TDesC8& aBytes, TInt aErrorCode); + + /** + * @since Series60 3.0 + * Leave codes: + * KErrSenXmlContentHandlerNotSet if XML content handler + * for this XML reader has not been set. This leave can + * be avoided calling SetContentHandlerL() method prior + * parsing some XML document. + */ + virtual void OnStartPrefixMappingL(const RString& aPrefix, + const RString& aUri, + TInt aErrorCode); + + /** + * @since Series60 3.0 + * Leave codes: + * KErrSenXmlContentHandlerNotSet if XML content handler + * for this XML reader has not been set. This leave can + * be avoided calling SetContentHandlerL() method prior + * parsing some XML document. + */ + virtual void OnEndPrefixMappingL(const RString& aPrefix, TInt aErrorCode); + + /** + * @since Series60 3.0 + * Leave codes: + * KErrSenXmlContentHandlerNotSet if XML content handler + * for this XML reader has not been set. This leave can + * be avoided calling SetContentHandlerL() method prior + * parsing some XML document. + */ + virtual void OnIgnorableWhiteSpaceL(const TDesC8& aBytes, TInt aErrorCode); + + /** + * @since Series60 3.0 + * Leave codes: + * KErrSenXmlContentHandlerNotSet if XML content handler + * for this XML reader has not been set. This leave can + * be avoided calling SetContentHandlerL() method prior + * parsing some XML document. + */ + virtual void OnSkippedEntityL(const RString& aName, TInt aErrorCode); + + /** + * @since Series60 3.0 + * Leave codes: + * KErrSenXmlContentHandlerNotSet if XML content handler + * for this XML reader has not been set. This leave can + * be avoided calling SetContentHandlerL() method prior + * parsing some XML document. + */ + virtual void OnProcessingInstructionL(const TDesC8& aTarget, + const TDesC8& aData, + TInt aErrorCode); + + /** + * OnError is a callback method signalled by Symbian XML + * framework. Current implementation of this class issues + * a leave in original ParseL() call on any received by + * this callback implementation. Used leave code will be + * the received error code. + * + * @since Series60 3.0 + * @param aErrorCode is one of the Symbian XML framework + * errors listed in XmlFrameworkErrors.h + * + * Currently any s + * + * If content handler was not set, ParseL will leaves with + * KErrSenXmlContentHandlerNotSet. + */ + virtual void OnError(TInt aErrorCode); + + /** + * This method obtains the interface matching the specified UID. + * @since Series60 3.0 + * @param aUid the UID identifying the required interface. + * @return NULL if no interface matching the UID is found or + * if content handler was not set. Otherwise, + * returns pointer to the interface. + */ + virtual TAny* GetExtendedInterface(const TInt32 aUid); + + protected: + + /** + * C++ constructor. + */ + IMPORT_C CSenXmlReader(TInt aParserFeature); + + /** + * Symbian 2nd phase constructor. + * @param aParserMimeType sets the MIME type of + * this XML parser. + */ + void ConstructL(const TDesC8& aParserMimeType); + + // New functions + + /** + * This method re-initializes encapsulated CParser class instance. + * @since Series60 3.0 + */ + void RecreateParserL(); + + private: + static void CleanupParser(TAny* apReader); + + void CleanUp(); + + private: // Data + // Owned instance of Symbian XML framework (default) XML parser + CParser* iParser; + // Not owned pointer to XML content handler. + MSenContentHandlerClient* iContentHandler; + // Owned pointer to XML namespace prefix strings + CDesC8Array* ipNsPrefixes; + // Owned pointer to XML namespace URI strings + CDesC8Array* ipNsUris; + // Owned string pool for XML attribute handling. + RStringPool iStringPool; + // Integer indicating currently enabled features + TInt iEnabledFeature; + }; + +#endif // SEN_XMLREADER_H + +// End of File +