williamr@4: // Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@4: // All rights reserved. williamr@4: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@4: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@4: // williamr@4: // Initial Contributors: williamr@4: // Nokia Corporation - initial contribution. williamr@4: // williamr@4: // Contributors: williamr@4: // williamr@4: // Description: williamr@4: // Ini file parser header file williamr@4: // williamr@4: // williamr@4: williamr@4: /** williamr@4: @file williamr@4: @internalAll williamr@4: */ williamr@4: williamr@4: #ifndef __INIFILE_H__ williamr@4: #define __INIFILE_H__ williamr@4: williamr@4: #include williamr@4: #include williamr@4: williamr@4: //Forward declaration williamr@4: class RFs; williamr@4: williamr@4: namespace BSUL williamr@4: { williamr@4: williamr@4: class CIniDocument8; williamr@4: class CIniDocument16; williamr@4: williamr@4: class CIniSecIter8Impl; williamr@4: /** williamr@4: Section iterator for 8 bit ini file. This class provides an iterator williamr@4: to navigate through the settings within a section inside an 8 bit ini file. williamr@4: */ williamr@4: NONSHARABLE_CLASS(CIniSecIter8): public CBase williamr@4: { williamr@4: public: williamr@4: IMPORT_C static CIniSecIter8* NewL(const TDesC8& aSectionName,const CIniDocument8* aIniDocument); williamr@4: IMPORT_C ~CIniSecIter8(); williamr@4: williamr@4: IMPORT_C TBool Next(TPtrC8& aKey,TPtrC8& aValue); williamr@4: IMPORT_C TBool End(); williamr@4: IMPORT_C void Reset(); williamr@4: private: williamr@4: CIniSecIter8(); williamr@4: CIniSecIter8Impl* iImpl; williamr@4: }; williamr@4: williamr@4: class CIniDocument8Impl; williamr@4: /** williamr@4: Dom parser for 8 bit ini file. This class provides the functionality to read williamr@4: and write settings of an 8 bit ini file. williamr@4: */ williamr@4: NONSHARABLE_CLASS(CIniDocument8): public CBase williamr@4: { williamr@4: public: williamr@4: IMPORT_C static CIniDocument8* NewL(RFs& aFs,const TDesC& aFileName); williamr@4: IMPORT_C ~CIniDocument8(); williamr@4: IMPORT_C TInt Externalise(const TDesC& aFileName); williamr@4: williamr@4: //read api williamr@4: IMPORT_C TInt GetSectionList(RArray& aSectionList) const; williamr@4: IMPORT_C TInt GetKeyValue(const TDesC8& aSectionName,const TDesC8& aKey,TPtrC8& aValue) const; williamr@4: williamr@4: //write api williamr@4: IMPORT_C TInt AddSection(const TDesC8& aSectionName); williamr@4: IMPORT_C TInt RemoveSection(const TDesC8& aSectionName); williamr@4: IMPORT_C TInt SetKey(const TDesC8& aSectionName,const TDesC8& aKey,const TDesC8& aValue); williamr@4: IMPORT_C TInt RemoveKey(const TDesC8& aSectionName,const TDesC8& aKey); williamr@4: IMPORT_C TBool CompareDocs(CIniDocument8& aDoc); williamr@4: private: williamr@4: friend class CIniSecIter8Impl; williamr@4: CIniDocument8(); williamr@4: CIniDocument8Impl* iImpl; williamr@4: }; williamr@4: williamr@4: class CIniSecIter16Impl; williamr@4: /** williamr@4: Section iterator for 16 bit ini file. This class provides an iterator williamr@4: to navigate through the settings within a section inside an 16 bit ini file. williamr@4: */ williamr@4: NONSHARABLE_CLASS(CIniSecIter16): public CBase williamr@4: { williamr@4: public: williamr@4: IMPORT_C static CIniSecIter16* NewL(const TDesC16& aSectionName,const CIniDocument16* aIniDocument); williamr@4: IMPORT_C ~CIniSecIter16(); williamr@4: williamr@4: IMPORT_C TBool Next(TPtrC16& aKey,TPtrC16& aValue); williamr@4: IMPORT_C TBool End(); williamr@4: IMPORT_C void Reset(); williamr@4: private: williamr@4: CIniSecIter16(); williamr@4: CIniSecIter16Impl* iImpl; williamr@4: }; williamr@4: williamr@4: class CIniDocument16Impl; williamr@4: /** williamr@4: Dom parser for 16 bit ini file. This class provides the functionality to read williamr@4: and write settings of an 16 bit ini file. williamr@4: */ williamr@4: NONSHARABLE_CLASS(CIniDocument16): public CBase williamr@4: { williamr@4: public: williamr@4: IMPORT_C static CIniDocument16* NewL(RFs& aFs,const TDesC& aFileName); williamr@4: IMPORT_C ~CIniDocument16(); williamr@4: IMPORT_C TInt Externalise(const TDesC& aFileName); williamr@4: williamr@4: //read api williamr@4: IMPORT_C TInt GetSectionList(RArray& aSectionList) const; williamr@4: IMPORT_C TInt GetKeyValue(const TDesC16& aSectionName,const TDesC16& aKey,TPtrC16& aValue) const; williamr@4: williamr@4: //write api williamr@4: IMPORT_C TInt AddSection(const TDesC16& aSectionName); williamr@4: IMPORT_C TInt RemoveSection(const TDesC16& aSectionName); williamr@4: IMPORT_C TInt SetKey(const TDesC16& aSectionName,const TDesC16& aKey,const TDesC16& aValue); williamr@4: IMPORT_C TInt RemoveKey(const TDesC16& aSectionName,const TDesC16& aKey); williamr@4: IMPORT_C TBool CompareDocs(CIniDocument16& aDoc); williamr@4: private: williamr@4: friend class CIniSecIter16Impl; williamr@4: CIniDocument16(); williamr@4: CIniDocument16Impl* iImpl; williamr@4: }; williamr@4: williamr@4: class CIniFile8Impl; williamr@4: /** williamr@4: A light weight parser for reading setting values from an 8 bit ini file. Note that this does not williamr@4: guarantee checking that the ini file is wellformed. See CIniFile16 for a class that handles both williamr@4: 8 and 16 bit files. williamr@4: */ williamr@4: NONSHARABLE_CLASS(CIniFile8): public CBase williamr@4: { williamr@4: public: williamr@4: IMPORT_C static CIniFile8* NewL(RFs& aFs,const TDesC& aFileName); williamr@4: IMPORT_C ~CIniFile8(); williamr@4: IMPORT_C TInt FindVar(const TDesC8& aSectionName,const TDesC8& aKeyName,TPtrC8& aValue) const; williamr@4: private: williamr@4: CIniFile8(); williamr@4: CIniFile8Impl* iImpl; williamr@4: }; williamr@4: williamr@4: class CIniFile16Impl; williamr@4: /** williamr@4: A light weight parser for reading setting values from a 16 or 8 bit ini file. The aConvert8To16 williamr@4: parameter of NewL controls whether or not 8 bit files are accepted. Note that this does williamr@4: not guarantee checking that the ini file is wellformed. williamr@4: */ williamr@4: NONSHARABLE_CLASS(CIniFile16): public CBase williamr@4: { williamr@4: public: williamr@4: IMPORT_C static CIniFile16* NewL(RFs& aFs,const TDesC& aFileName); williamr@4: IMPORT_C static CIniFile16* NewL(RFs& aFs,const TDesC& aFileName,TBool aConvert8To16); williamr@4: IMPORT_C ~CIniFile16(); williamr@4: IMPORT_C TInt FindVar(const TDesC16& aSectionName,const TDesC16& aKeyName,TPtrC16& aValue) const; williamr@4: private: williamr@4: CIniFile16(); williamr@4: CIniFile16Impl* iImpl; williamr@4: }; williamr@4: williamr@4: }//namespace BSUL williamr@4: williamr@4: #endif