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