stif/Parser/inc/StifFileParser.h
branchRCL_3
changeset 59 8ad140f3dd41
parent 0 a03f92240627
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/stif/Parser/inc/StifFileParser.h	Wed Oct 13 16:17:58 2010 +0300
@@ -0,0 +1,238 @@
+/*
+* 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 CStifFileParser.
+*
+*/
+
+#ifndef STIF_FILE_PARSER_H
+#define STIF_FILE_PARSER_H
+
+//  INCLUDES
+#include <f32file.h>
+#include <e32std.h>
+#include <e32base.h>
+#include "cstackdeprecated.h"
+#include <StifTestModule.h>
+#include "StifParser.h"
+
+// CONSTANTS
+_LIT(KIncludeKeyword, "INCLUDE");
+
+// MACROS
+// None
+
+// DATA TYPES
+// None
+
+// FUNCTION PROTOTYPES
+// None
+
+// FORWARD DECLARATIONS
+// None
+
+// CLASS DECLARATION
+
+// DESCRIPTION
+// CStifFileParser is a STIF Test Framework StifParser class.
+// Class contains a configuration file parsing operations without loading it into memory.
+
+
+NONSHARABLE_CLASS (CStifFileParser) : public CBase
+{
+    public:     // Enumerations
+		// Indication what kind of char sequence is to be found
+        enum TWhatToFind
+      	{
+        	EStart,             // '//' or '/*' or '"' signs
+        	EQuota,             // '"' sign
+        	EEndOfComment       // '*/' sequence
+    	};
+
+		// Indication if beginning or end of section is to be found
+        enum TSectionFind
+        {
+        	ESectionStart,
+        	ESectionEnd
+        };
+
+    private:    // Enumerations
+
+    public:     // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        * Creating parser with given handle to file. For default all
+        * information will be parsed(ENoComments).
+        */
+        static CStifFileParser* NewL(RFs& aFs,
+                                     RFile &aFile,
+                                     TBool aIsUnicode,
+                                     CStifParser::TCommentType aCommentType = CStifParser::ENoComments);
+
+        /**
+        * Destructor.
+        */
+        ~CStifFileParser();
+
+    public:     // New functions
+
+        /**
+        * Open and read configuration source and parses a required section.
+        * This method will parse next section after the earlier section if
+        * aSeeked parameter is equal 1.
+        * If configuration file includes several sections with both start and
+        * end tags so aSeeked parameter seeks the required section. The aSeeked
+        * parameters indicates section that will be parsed.
+        * If start tag is not given, returned section begins from the beginning of
+        * the file. If end tag is not given, returned sections ends at the end of
+        * the file.
+        * If section is not found and first occurence of section is seeked, function
+        * will return NULL, but if second (or further) occurence is seeked, function
+        * will leave with KErrNotFound (for compability with CStifParser::NextSectionL
+		* reason).
+        */
+		HBufC* NextSectionL(const TDesC& aStartTag,
+                            const TDesC& aEndTag,
+                            TInt& aOffset,
+                            TInt aSeeked = 1);
+
+    public:     // Functions from base classes
+
+    protected:  // New functions
+
+    protected:  // Functions from base classes
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CStifFileParser(CStifParser::TCommentType aCommentType);
+
+        /**
+        * By default Symbian OS constructor is private.
+        */
+        void ConstructL(RFs& aFs,
+                        RFile &aFile,
+                        TBool aIsUnicode);
+
+        /**
+        * Reads configuration source and returns a complete line.
+        * This method will return also and end of line sequence.
+        */
+		TBool ReadLineL(TPtr& aLineBuffer,
+		                TPtr& aEndOfLineBuffer);
+
+        /**
+        * Parses a given line and removes all c-style comments from it (and #-style comments).
+        * Result is passed in destination buffer.
+        */
+		void ReplaceCommentsLineL(TPtr& aSrcBufPtr,
+		                          TPtr& aDstBufPtr,
+								  TWhatToFind& aFind);
+
+        /**
+        * Parses a given line and removes all #-style comments.
+        * Result is passed in destination buffer.
+        */
+	 	void ReplaceHashCommentsLineL(TPtr& aSrcBufPtr,
+ 	                                  TPtr& aDstBufPtr);
+
+        /**
+        * Closes all files on file stack and clears the stack.
+        */
+ 	    void ClearFileStack(void);
+
+        /**
+        * Pops RFile handle from file stack and sets correct current file handle.
+        */
+        void PopFromFileStack(void);
+
+        /**
+        * Opens file and pushes it to stack.
+        */
+        void PushFileToStackL(const TDesC& aFileName);
+
+        /**
+        * Deletes all descriptors assigned to array and empties array.
+        */
+        void ClearSectionLinesArray(void);
+
+    public:     // Data
+
+    protected:  // Data
+
+    private:    // Data
+
+        /**
+        * For file opening.
+        */
+        RFs         iFileServer;
+
+        /**
+        * For file opening. This is the first (base) file. Later other files may be opened if
+        * they are included to base one.
+        */
+        RFile       iBaseFile;
+
+        /**
+        * Comment type's indication.
+        */
+        CStifParser::TCommentType iCommentType;
+
+        /**
+        * Flag indicating if file is unicode.
+        */
+        TBool       iIsUnicode;
+        
+        /**
+        * How many bytes per char in file (2 for unicode, 1 for non-unicode).
+        */
+        TInt 		iBytesPerChar;
+        
+        /**
+        * Handle to file which is currently read.
+        */
+        RFile*      iCurrentFile;
+
+        /**
+        * Stack of opened files (it does not contain base file).
+        */
+        CStackDeprecated<RFile, EFalse>* iFileStack;
+
+        /**
+        * Array of lines belonging to seeked section.
+        */
+		RPointerArray<HBufC> iSectionLines;
+
+		/**
+		* Array of already included files (to avoid loop in includes).
+		*/
+		RPointerArray<HBufC> iFileNames;
+
+		/**
+		* Buffer with eol sequence. Filled when include found and used after last line of inlcuded file.
+		*/
+		TBuf<2>     iEolBuf;
+
+    public:     // Friend classes
+
+    protected:  // Friend classes
+
+    private:    // Friend classes
+};
+
+#endif      // STIF_FILE_PARSER_H
+
+// End of File