--- /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