diff -r 7fdc9a71d314 -r 8ad140f3dd41 stif/Parser/inc/StifFileParser.h --- /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 +#include +#include +#include "cstackdeprecated.h" +#include +#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* iFileStack; + + /** + * Array of lines belonging to seeked section. + */ + RPointerArray iSectionLines; + + /** + * Array of already included files (to avoid loop in includes). + */ + RPointerArray 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