diff -r 7fdc9a71d314 -r 8ad140f3dd41 stif/stif_plat/inc/StifSectionParser.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/stif/stif_plat/inc/StifSectionParser.h Wed Oct 13 16:17:58 2010 +0300 @@ -0,0 +1,286 @@ +/* +* Copyright (c) 2009 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: This file contains the header file of the +* CStifSectionParser. +* +*/ + +#ifndef STIF_SECTION_PARSER_H +#define STIF_SECTION_PARSER_H + +// INCLUDES +#include +#include +#include +#include "StifItemParser.h" + +// CONSTANTS +// Indicates is tag included in returned value. +enum TTagToReturnValue + { + ETag, // Return value includes the tag + ENoTag // Return value include no tag + }; + +// MACROS +// None + +// DATA TYPES +// None + +// FUNCTION PROTOTYPES +// None + +// FORWARD DECLARATIONS +class CStifItemParser; + +// CLASS DECLARATION + +// DESCRIPTION +// CStifSectionParser is a STIF Test Framework StifParser class. +// Class contains a configuration file parsing operations. + +class CStifSectionParser + :public CBase + { + public: // Enumerations + + private: // Enumerations + + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CStifSectionParser* NewL( const TInt aLength ); + + /** + * Destructor. + */ + ~CStifSectionParser(); + + public: // New functions + + /** + * Parses a line for items parsing with a tag. + * Returns a CStifItemParser object. + * If start tag is empty the parsing starts beging of the section. + * TTagToReturnValue indicates will also the aTag value (if exist) + * include to the returned object(For default the tag will be added). + */ + IMPORT_C CStifItemParser* GetItemLineL( const TDesC& aTag, + TTagToReturnValue aTagIndicator = ETag ); + + /** + * Parses a next line for items parsing. + * Returns a CStifItemParser object. + */ + IMPORT_C CStifItemParser* GetNextItemLineL(); + + /** + * Parses a next line for items parsing with a tag. + * Returns a CStifItemParser object. + * If start tag is empty the parsing starts beging of the section. + * TTagToReturnValue indicates will also the aTag value (if exist) + * include to the returned object(For default the tag will be added). + */ + IMPORT_C CStifItemParser* GetNextItemLineL( const TDesC& aTag, + TTagToReturnValue aTagIndicator = ETag ); + + /** + * Parses a sub sections from the main section with a start and with + * a end tag. + * Returns a CStifSectionParser object. + * If start tag is empty the parsing starts beging of the section. + * If end tag is empty the parsing goes end of section. + * This method will parse next subsection after the earlier subsection + * if aSeeked parameter is not given. + * If configuration file includes several subsections with both start + * and end tags so aSeeked parameter seeks the required subsection. The + * aSeeked parameters indicates subsection that will be parsed. + */ + IMPORT_C CStifSectionParser* SubSectionL( const TDesC& aStartTag, + const TDesC& aEndTag, + TInt aSeeked = 1 ); + + /** + * Parses a next subsections from the main section with a start and with + * a end tag. + * Returns a CStifSectionParser object. + * If start tag is empty the parsing starts beging of the section. + * If end tag is empty the parsing goes end of section. + * This method will parse next subsection after the earlier subsection + * if aSeeked parameter is not given. + * If configuration file includes several subsections with both start + * and end tags so aSeeked parameter seeks the required subsection. The + * aSeeked parameters indicates subsection that will be parsed. + */ + IMPORT_C CStifSectionParser* NextSubSectionL( const TDesC& aStartTag, + const TDesC& aEndTag, + TInt aSeeked = 1 ); + + /** + * Get a line from section with a tag. + * Returns an error code and a reference to the parsed line. + * If start tag is empty the parsing starts beging of the section. + * TTagToReturnValue indicates will also the aTag value(if exist) + * include to the aLine reference(For default the tag will be added). + */ + IMPORT_C TInt GetLine( const TDesC& aTag, TPtrC& aLine, + TTagToReturnValue aTagIndicator = ETag ); + + /** + * Get next line. + * Returns an error code and a reference to the parsed line. + */ + IMPORT_C TInt GetNextLine( TPtrC& aLine ); + + /** + * Get next line with tag. + * Returns an error code and a reference to the parsed line. + * If start tag is empty the parsing starts beging of the section. + * TTagToReturnValue indicates will also the aTag value(if exist) + * include to the aLine reference(For default the tag will be added). + */ + IMPORT_C TInt GetNextLine( const TDesC& aTag, TPtrC& aLine, + TTagToReturnValue aTagIndicator = ETag ); + + /** + * Get current position. + * Returns current parsing position, which + * can be used as parameter for SetPosition afterwards to go back + * to old parsing position. + */ + IMPORT_C TInt GetPosition(); + + /** + * Set position. + * Returns a Symbian OS error code. aPos indicates the position to + * which section parser should go. + * SetPosition can be used to set parsing position, e.g. to rewind + * back to some old position retrieved with GetPosition. + */ + IMPORT_C TInt SetPosition( TInt aPos ); + + /** + * Create a section. + */ + void SetData( TPtr aData, + TInt aStartPos, + TInt aLength ); + + /** + * Returns a current section. + */ + const TPtrC Des(); + + public: // Functions from base classes + + protected: // New functions + + protected: // Functions from base classes + + private: + + /** + * C++ default constructor. + */ + CStifSectionParser( const TInt aLength ); + + /** + * By default Symbian OS constructor is private. + */ + void ConstructL(); + + /** + * Generic start and end position parser for given data. + * Returns an error code. + */ + TInt ParseStartAndEndPos( TPtrC aSection, + const TDesC& aStartTag, + TTagToReturnValue aTagIndicator, + TInt& aStartPos, + TInt& aEndPos, + TInt& aLength ); + + /** + * Generic search for end-of-line. + * Returns position before linefeed and + * lex is posotioned to the beginning of next line. + */ + TInt GotoEndOfLine( TLex& lex ); + + /** + * Substracts line from the begining of selected text. + */ + TPtrC SubstractLine( const TPtrC& aText ); + + /** + * Searches for selected tag in a text. + */ + TInt FindTag( const TDesC& aText, const TDesC& aTag, TInt& aStartPos, TInt& aEndPos ); + + public: // Data + + protected: // Data + + private: // Data + + /** + * Parsed section with SectionL() or SubSectionL() method. + */ + TPtr iSection; + + /** + * Section length definitions. + */ + HBufC* iHBufferSection; + + /** + * Section length + */ + TInt iLength; + + /** + * Indicates position where start the parsing. + */ + TInt iSkipAndMarkPos; + + /** + * For line and item line parsing. Indicator is GetLine() or + * GetItemLineL() method used. + */ + TBool iLineIndicator; + + /** + * Indicates position where we are currently(subsection). + */ + TInt iSubOffset; + + public: // Friend classes + + /** + * For testing operations to get length information. + */ + friend class CTestParser; + + protected: // Friend classes + + private: // Friend classes + + }; + +#endif // STIF_SECTION_PARSER_H + +// End of File