--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/stif/stif_plat/inc/StifSectionParser.h Tue Feb 02 01:57:15 2010 +0200
@@ -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 <f32file.h>
+#include <e32std.h>
+#include <e32base.h>
+#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
\ No newline at end of file