diff -r 8ce15fced3a6 -r cad71a31b7fc srsf/vcommandmanager/src/vcxmlparser.h --- a/srsf/vcommandmanager/src/vcxmlparser.h Thu Aug 19 09:56:14 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,537 +0,0 @@ -/* -* Copyright (c) 2005-2007 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: Parser class for Voice Commands XML -* -*/ - - -#ifndef VCXMLPARSER_H -#define VCXMLPARSER_H - -// INCLUDES -#include -#include -#include - -// DATA TYPES - -// Enumeration that is used when saving information -// of last found xml tag -enum TVcXmlTagNesting - { - EXmlStarted = 0, - EXmlDocument, - EXmlFolder, - EXmlVCommand, - EXmlSpoken, - EXmlWritten, - EXmlExecutes, - EXmlCmdlineparams, - EXmlIcon, - EXmlTooltip - }; - -// FORWARD DECLARATIONS -class CVcResource; - -// CLASS DECLARATION - -/** -* Observer mixin class for Voice Commands XML parser -* -* @lib nssvcommandmanager.exe -* -*/ -NONSHARABLE_CLASS( MVcXmlParserObserver ) - { - public: // New functions - - /** - * Callback when voice command data has been completely resolved. - * - * @param aWrittenText Voice Command text in written form - * @param aSpokenText Voice Command text in spoken form - * @param aTooltipText Tooltip text - * @param aFolder Folder where Voice Command should be placed - * in the UI - * @param aFolderTitle String which is used in folder title pane - * @param aParameters Command line parameters for the application - * which is started - * @param aIcon Icon which is used when showing the voice command - * @param aAppId UID of the application which will be started - * @param aAppName Name of the application which will be started - * @param aStartImmediately ETrue if no TTS verification is needed when - * command has been recognized - * @param aUserCanModify ETrue if user can modify the command - * @param aFolderIconFile Full path to the MBM file where to get the folder icon from - * or KNullDesC if not defined - * @param aFolderIconIndex Index of the folder icon in the aFolderIconFile. - * or -1 if not defined - */ - virtual void MvcxpoVoiceCommandFound( const TDesC& aWrittenText, - const TDesC& aSpokenText, - const TDesC& aTooltipText, - const TDesC& aFolder, - const TDesC& aFolderTitle, - const TDesC& aParameters, - TUid aIcon, - TUid aAppId, - const TDesC& aAppName, - TBool aStartImmediately, - TBool aUserCanModify, - const TDesC& aFolderIconFile, - TInt aFolderIconIndex - ) = 0; - - }; - - -/** -* Parser class for Voice Commands XML -* -* @lib nssvcommandmanager.exe -* -*/ -NONSHARABLE_CLASS( CVcXmlParser ) : public CBase, public Xml::MContentHandler - { - public: // Constructors and destructor - - /** - * Two-phased constructor. - */ - static CVcXmlParser* NewL( RFs& aRFs, MVcXmlParserObserver& aObserver ); - - /** - * Destructor. - */ - virtual ~CVcXmlParser(); - - public: // New functions - - /** - * Parses one XML file - * - * @param aFileName XML file name - */ - void ParseFileL( const TFileName& aFileName ); - - - - public: // From Xml::MContentHandler - - /** - This method is a callback to indicate the start of the document. - @param aDocParam Specifies the various parameters of the document. - @param aDocParam.iCharacterSetName The character encoding of the document. - @param aErrorCode is the error code. - If this is not KErrNone then special action may be required. - */ - void OnStartDocumentL( const Xml::RDocumentParameters& aDocParam, - TInt aErrorCode ); - - /** - This method is a callback to indicate the end of the document. - @param aErrorCode is the error code. - If this is not KErrNone then special action may be required. - */ - void OnEndDocumentL( TInt aErrorCode ); - - /** - This method is a callback to indicate an element has been parsed. - @param aElement is a handle to the element's details. - @param aAttributes contains the attributes for the element. - @param aErrorCode is the error code. - If this is not KErrNone then special action may be required. - */ - void OnStartElementL( const Xml::RTagInfo& aElement, - const Xml::RAttributeArray& aAttributes, - TInt aErrorCode ); - - /** - This method is a callback to indicate the end of the element has been reached. - @param aElement is a handle to the element's details. - @param aErrorCode is the error code. - If this is not KErrNone then special action may be required. - */ - void OnEndElementL( const Xml::RTagInfo& aElement, TInt aErrorCode ); - - /** - This method is a callback that sends the content of the element. - Not all the content may be returned in one go. The data may be sent in chunks. - When an OnEndElementL is received this means there is no more content to be sent. - @param aBytes is the raw content data for the element. - The client is responsible for converting the data to the - required character set if necessary. - In some instances the content may be binary and must not be converted. - @param aErrorCode is the error code. - If this is not KErrNone then special action may be required. - */ - void OnContentL( const TDesC8& aBytes, TInt aErrorCode ); - - /** - This method is a notification of the beginning of the scope of a prefix-URI Namespace mapping. - This method is always called before the corresponding OnStartElementL method. - @param aPrefix is the Namespace prefix being declared. - @param aUri is the Namespace URI the prefix is mapped to. - @param aErrorCode is the error code. - If this is not KErrNone then special action may be required. - */ - void OnStartPrefixMappingL( const RString& aPrefix, - const RString& aUri, - TInt aErrorCode ); - - /** - This method is a notification of the end of the scope of a prefix-URI mapping. - This method is called after the corresponding DoEndElementL method. - @param aPrefix is the Namespace prefix that was mapped. - @param aErrorCode is the error code. - If this is not KErrNone then special action may be required. - */ - void OnEndPrefixMappingL( const RString& aPrefix, TInt aErrorCode ); - - /** - This method is a notification of ignorable whitespace in element content. - @param aBytes are the ignored bytes from the document being parsed. - @param aErrorCode is the error code. - If this is not KErrNone then special action may be required. - */ - void OnIgnorableWhiteSpaceL( const TDesC8& aBytes, TInt aErrorCode ); - - /** - This method is a notification of a skipped entity. If the parser encounters an - external entity it does not need to expand it - it can return the entity as aName - for the client to deal with. - @param aName is the name of the skipped entity. - @param aErrorCode is the error code. - If this is not KErrNone then special action may be required. - */ - void OnSkippedEntityL( const RString& aName, TInt aErrorCode ); - - /** - This method is a receive notification of a processing instruction. - @param aTarget is the processing instruction target. - @param aData is the processing instruction data. If empty none was supplied. - @param aErrorCode is the error code. - If this is not KErrNone then special action may be required. - */ - void OnProcessingInstructionL( const TDesC8& aTarget, - const TDesC8& aData, - TInt aErrorCode ); - - /** - This method indicates an error has occurred. - @param aError is the error code - */ - void OnError( TInt aErrorCode ); - - /** - This method obtains the interface matching the specified uid. - @return 0 if no interface matching the uid is found. - Otherwise, the this pointer cast to that interface. - @param aUid the uid identifying the required interface. - */ - TAny* GetExtendedInterface( const TInt32 aUid ); - - - private: - - /** - * C++ default constructor. - */ - CVcXmlParser( RFs& aRFs, MVcXmlParserObserver& aObserver ); - - /** - * By default Symbian 2nd phase constructor is private. - */ - void ConstructL(); - - /** - * Checks if attribute value equals to the expected. If no value is given, just - * checks that the attribute exists. - * - * @param aAttributes List of attributes - * @param aAttribute Name of the attribute which is searched - * @param aValue Needed value. - * @return ETrue if attribute was found, EFalse otherwise - */ - TBool CheckAttributeL( const Xml::RAttributeArray& aAttributes, - const TDesC8& aAttribute, const TDesC8& aValue = KNullDesC8 ); - - - /** - * Resolves content of element. - * - * @param aName Element name - * @param aAttributes Attribute list - * @return ETrue if document tag was resolved - */ - TBool ResolveDocumentTagL( const TDesC8& aName, - const Xml::RAttributeArray& aAttributes ); - - /** - * Resolves content of element. - * - * @param aName Element name - * @param aAttributes Attribute list - * @return ETrue if folder tag was resolved - */ - TBool ResolveFolderTagL( const TDesC8& aName, - const Xml::RAttributeArray& aAttributes ); - - /** - * Resolves content of element. - * - * @param aName Element name - * @param aAttributes Attribute list - * @return ETrue if vcommand tag was resolved - */ - TBool ResolveVCommandTagL( const TDesC8& aName, - const Xml::RAttributeArray& aAttributes ); - - /** - * Resolves content of element. - * - * @param aName Element name - * @param aAttributes Attribute list - * @return ETrue if spoken tag was resolved - */ - TBool ResolveSpokenTagL( const TDesC8& aName, - const Xml::RAttributeArray& aAttributes ); - - /** - * Resolves content of element. - * - * @param aName Element name - * @param aAttributes Attribute list - * @return ETrue if written tag was resolved - */ - TBool ResolveWrittenTagL( const TDesC8& aName, - const Xml::RAttributeArray& aAttributes ); - - /** - * Resolves content of element. - * - * @param aName Element name - * @param aAttributes Attribute list - * @return Error code - */ - TBool ResolveTooltipTagL( const TDesC8& aName, - const Xml::RAttributeArray& aAttributes ); - - /** - * Resolves content of element. - * - * @param aName Element name - * @param aAttributes Attribute list - * @return Error code - */ - TBool ResolveExecutesTagL( const TDesC8& aName, - const Xml::RAttributeArray& aAttributes ); - - /** - * Resolves content of element. - * - * @param aName Element name - * @param aAttributes Attribute list - * @return ETrue if commandline parameters were found correctly - */ - TBool ResolveCmdlineparamsTag( const TDesC8& aName, - const Xml::RAttributeArray& aAttributes ); - - /** - * Resolves content of element. - * - * @param aName Element name - * @param aAttributes Attribute list - * @return ETrue if icon element was found - */ - TBool ResolveIconTagL( const TDesC8& aName, - const Xml::RAttributeArray& aAttributes ); - - /** - * Destroys the data of one voice command folder. - */ - void ResetVCommandFolder(); - - /** - * Destroys the data of one voice command. - */ - void ResetVCommandInfo(); - - /** - * Checks that all mandatory data is found for one voice command. - */ - void CheckVoiceCommmandData(); - - /** - * Reads localized string from loc file based on locindex attribute - * - * @param aAttributes Attribute list - * @param aAttributeName Name of the loc index attribute - * @return Error code - */ - TBool GetLocalizedStringL( const Xml::RAttributeArray& aAttributes, - const TDesC8& aAttributeName ); - - /** - * Reads uid attribute and constructs TUid - * - * @params aAttributes List of XML attributes - * @return Parsed UID - */ - TUid ResolveUidL( const Xml::RAttributeArray& aAttributes ); - - /** - * Reads exe attribute and constructs exe file name - * - * @params aAttributes List of XML attributes - * @return Error code - */ - TBool ResolveExeL( const Xml::RAttributeArray& aAttributes ); - - /** - * Reads the iconfile attribute and constructs the file name or - * sets it to NULL - * - * @params aAttributes List of XML attributes - * @return ETrue if resolved successfully, EFalse otherwise - */ - TBool ResolveFolderIconFileL( const Xml::RAttributeArray& aAttributes ); - - /** - * Reads the iconindex attribute and stores the index or sets it to 0 - * - * @params aAttributes List of XML attributes - * @return parsed index if any. -1 if there is no icon index - */ - TInt ResolveFolderIconIndexL( const Xml::RAttributeArray& aAttributes ); - - /** - * Common function to resolve content of all elements which contain localized data. - * - * @param aName Element name - * @param aAttributes Attribute list - * @param aExpectedName Expected element name - * @param aTagEnum Enum value equal to tag name - * @param aAttributeName name of the attribute which contains loc index - * @return Error code - */ - TBool ResolveLocalizedTagL( const TDesC8& aName, const Xml::RAttributeArray& aAttributes, - const TDesC8& aExpectedName, TVcXmlTagNesting aTagEnum ); - - - - /** - * Tries to find matching element name from the attribute list. - * - * @param aName Element name - * @param aAttributes Attribute list - * @return Found attribute as a 16-bit descriptor - */ - const TDesC& Find16ValueL( const TDesC8& aName, - const Xml::RAttributeArray& aAttributes ); - - /** - * Tries to find matching element name from the attribute list. - * - * @param aName Element name - * @param aAttributes Attribute list - * @return Found attribute as a 8-bit descriptor - */ - const TDesC8& Find8ValueL( const TDesC8& aName, - const Xml::RAttributeArray& aAttributes ); - - /** - * Converts given string to lowercase - * - * @param aString String to convert - * @return Converted string - */ - HBufC8* ToLowercaseLC( const TDesC8& aString ); - - /** - * Pops the last element from XML stack if aTagName and aExpectedTag are equal - * - * @param aTagName Tag name which was found in XML file - * @param aExpectedTag Tag which was expected - */ - void PopFromStackIfFoundL( const TDesC8& aTagName, const TDesC8& aExpectedTag ); - - private: // Data - - // Callback observer - MVcXmlParserObserver& iObserver; - - // Currently open localization resource file - CVcResource* iResource; - - // String read from localization resource file - HBufC* iCurrentLocalizedString; - - // Stack of XML elements - RArray iXmlNesting; - - // Data for one Voice Command - // Text shown on screen - HBufC* iWrittenText; - - // Text which will be trained, if KNullDesC then iWrittenText will be trained - HBufC* iSpokenText; - - // Icon - TUid iIcon; - - // Text of the tooltip - HBufC* iTooltipText; - - // Folder name, if it does not exist, then it will be created - // If NULL then "root" will be used - HBufC* iFolder; - - // Title pane text for folder - HBufC* iFolderTitle; - - HBufC* iFolderIconFile; - - TInt iFolderIconIndex; - - // UID of the application which will be started when this voice command has been recognized - TUid iAppId; - - // Name of the application which will be started when this voice command has been recognized - HBufC* iAppName; - - // Command line parameters for the application which will be started - HBufC* iParameters; - HBufC8* iParameters8; - - // TTS feedback & adaptation of the recognition result on/off - TBool iStartImmediately; - - // Can user modify? - TBool iUserCanModify; - - // Value for attribute - HBufC* iAttributeValue; - - // XML Parser - Xml::CParser* iParser; - - // File system handle - RFs& iRFs; - }; - -#endif // VCXMLPARSER_H - -// End of File