--- a/imgtools/sisutils/inc/pkgfileparser.h Wed Jun 16 16:51:40 2010 +0300
+++ b/imgtools/sisutils/inc/pkgfileparser.h Wed Jun 23 16:56:47 2010 +0800
@@ -1,204 +1,210 @@
-/*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "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:
-*
-*/
-
-
-#ifndef __PKGFILEPARSER_H__
-#define __PKGFILEPARSER_H__
-
-#ifdef WIN32
-#include <windows.h>
-#endif
-
-#include <iostream>
-
-#include <sstream>
-#include <string>
-#include <list>
-#include <map>
-#undef _L
-
-#include "pkglanguage.h"
-
-typedef class PkgParser PKGPARSER, *PPKGPARSER;
-
-//Data structures for pkg file parsing
-#define EOF_TOKEN 0
-#define NUMERIC_TOKEN 1
-#define ALPHA_TOKEN 2
-#define QUOTED_STRING_TOKEN 3
-#define AND_TOKEN 4
-#define OR_TOKEN 5
-#define NOT_TOKEN 6
-#define EXISTS_TOKEN 7
-#define DEVCAP_TOKEN 8
-#define APPCAP_TOKEN 9
-#define GE_TOKEN 10
-#define LE_TOKEN 11
-#define NE_TOKEN 12
-#define IF_TOKEN 13
-#define ELSEIF_TOKEN 14
-#define ELSE_TOKEN 15
-#define ENDIF_TOKEN 16
-#define TYPE_TOKEN 17
-#define KEY_TOKEN 18
-#define LAST_TOKEN 18
-
-#define MAX_STRING 255
-
-typedef union _tag_VARIANTVAL
-{
- long dwNumber; // numeric value, e.g. 100
- wchar_t pszString[MAX_STRING]; // string value, e.g. "crystal"
-}VARIANTVAL;
-
-//Data structures to store the pkg file contents
-/**
-Supported package body statements
-*/
-typedef enum cmd_type {IF, ELSEIF, ELSE, ENDIF, INSTALLFILE, PACKAGE} CMD_TYPE;
-
-/**
-Structure to store the language details
-*/
-typedef struct _tag_LangList
-{
- String langName; // Language Name
- unsigned long langCode; // Language code
- unsigned long dialectCode; // Dialect code
-}LANG_LIST, *PLANG_LIST;
-
-/**
-Structure to store the package file header details
-*/
-typedef struct _tag_Pkgheader
-{
- std::list<String> pkgNameList;
- unsigned long pkgUid;
- int vMajor;
- int vMinor;
- int vBuild;
- String pkgType;
-}PKG_HEADER, *PPKG_HEADER;
-
-/**
-Structure to store the installable file list
-*/
-typedef struct _tag_InstallFileList
-{
- int langDepFlg;
- int pkgFlg;
- std::list<String> srcFiles;
- String destFile;
-}INSTALLFILE_LIST, *PINSTALLFILE_LIST;
-
-/**
-Structure to store the package body details
-*/
-typedef struct _tag_CmdBlock
-{
- CMD_TYPE cmdType; // Command type
- String cmdExpression; // Expression
- PINSTALLFILE_LIST iInstallFileList; // Installable file details
-}CMD_BLOCK, *PCMD_BLOCK;
-
-typedef std::list<PLANG_LIST> LANGUAGE_LIST;
-typedef std::list<String> SISFILE_LIST, FILE_LIST;
-typedef std::list<PCMD_BLOCK> CMDBLOCK_LIST;
-
-/**
-class PkgParser
- Parses the package file generated by DUMPSIS tool
-
-@internalComponent
-@released
-*/
-class PkgParser
-{
-public:
- PkgParser(String aFile);
- ~PkgParser();
-
- void ParsePkgFile();
- void GetEmbeddedSisList(SISFILE_LIST& embedSisList);
- void GetInstallOptions(FILE_LIST& aOptions);
- void GetLanguageList(LANGUAGE_LIST& langList);
- void GetHeader(PKG_HEADER& pkgHeader);
- void GetCommandList(CMDBLOCK_LIST& cmdList);
- String GetPkgFileName()
- {
- return iPkgFile;
- }
-
-private:
- int OpenFile();
- void DeleteAll();
-
- HANDLE iPkgHandle;
-
- LANGUAGE_LIST iLangList;
- PKG_HEADER iPkgHeader;
- SISFILE_LIST iEmbedSisFiles;
- FILE_LIST iInstallOptions;
- CMDBLOCK_LIST iPkgBlock;
-
- String iPkgFile;
-
- //Parser Methods
- void AddLanguage(String aLang, unsigned long aCode, unsigned long aDialect);
- void GetNextChar();
- void GetNextToken();
- bool GetStringToken();
- WORD ParseEscapeChars();
- void GetAlphaNumericToken();
- bool IsNumericToken();
- void GetNumericToken();
- void ParseEmbeddedBlockL ();
- void ParseCommentL();
- void ExpectToken(int aToken);
- void ParseHeaderL();
- void ParseLanguagesL();
- void ParseFileL();
- void ParsePackageL();
- void ParseIfBlockL();
- void ParseLogicalOp(String& aExpression);
- void ParseRelation(String& aExpression);
- void ParseUnary(String& aExpression);
- void ParseFactor(String& aExpression);
- void ParseOptionsBlockL();
- void ParsePropertyL();
- void ParseVendorNameL();
- void ParseLogoL();
- void ParseDependencyL();
- void ParseVersion();
- void ParseVendorUniqueNameL();
- void ParseTargetDeviceL();
-
- //Parser Attributes
- wchar_t m_pkgChar;
- int m_token;
- VARIANTVAL m_tokenValue;
- int m_nLineNo;
-
- void ParserError(char* msg);
-
- friend String wstring2string (const std::wstring& aWide);
- friend std::wstring string2wstring (const String& aNarrow);
- friend int CompareTwoString(wchar_t* string ,wchar_t* option);
- friend int CompareNString(wchar_t* string ,wchar_t* option, int len);
-};
-
-#endif //__PKGFILEPARSER_H__
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:
+*
+*/
+
+
+#ifndef __PKGFILEPARSER_H__
+#define __PKGFILEPARSER_H__
+
+#ifdef WIN32
+#ifdef _STLP_INTERNAL_WINDOWS_H
+#define __INTERLOCKED_DECLARED
+#endif
+#include <windows.h>
+#endif
+
+#include <iostream>
+
+#include <sstream>
+#include <string>
+#include <list>
+#include <map>
+#undef _L
+
+#include "pkglanguage.h"
+
+typedef class PkgParser PKGPARSER, *PPKGPARSER;
+
+//Data structures for pkg file parsing
+#define EOF_TOKEN 0
+#define NUMERIC_TOKEN 1
+#define ALPHA_TOKEN 2
+#define QUOTED_STRING_TOKEN 3
+#define AND_TOKEN 4
+#define OR_TOKEN 5
+#define NOT_TOKEN 6
+#define EXISTS_TOKEN 7
+#define DEVCAP_TOKEN 8
+#define APPCAP_TOKEN 9
+#define GE_TOKEN 10
+#define LE_TOKEN 11
+#define NE_TOKEN 12
+#define IF_TOKEN 13
+#define ELSEIF_TOKEN 14
+#define ELSE_TOKEN 15
+#define ENDIF_TOKEN 16
+#define TYPE_TOKEN 17
+#define KEY_TOKEN 18
+#define LAST_TOKEN 18
+
+#define MAX_STRING 255
+
+typedef union _tag_VARIANTVAL
+{
+ TInt32 iNumber; // numeric value, e.g. 100
+ char iString[MAX_STRING]; // string value, e.g. "crystal"
+}VARIANTVAL;
+
+//Data structures to store the pkg file contents
+/**
+Supported package body statements
+*/
+typedef enum cmd_type {IF, ELSEIF, ELSE, ENDIF, INSTALLFILE, PACKAGE} CMD_TYPE;
+
+/**
+Structure to store the language details
+*/
+typedef struct _tag_LangList
+{
+ string iLangName; // Language Name
+ TUint32 iLangCode; // Language code
+ TUint32 iDialectCode; // Dialect code
+}LANG_LIST, *PLANG_LIST;
+
+/**
+Structure to store the package file header details
+*/
+typedef struct _tag_Pkgheader
+{
+ list<string> iPkgNames;
+ TUint32 iPkgUID;
+ TInt iMajorVersion;
+ TInt iMinorVersion;
+ TInt iBuildVersion;
+ string iPkgType;
+}PKG_HEADER, *PPKG_HEADER;
+
+/**
+Structure to store the installable file list
+*/
+typedef struct _tag_InstallFileList
+{
+ TInt iLangDepFlag;
+ TInt iPkgFlag;
+ list<string> iSourceFiles;
+ string iDestFile;
+}INSTALLFILE_LIST, *PINSTALLFILE_LIST;
+
+/**
+Structure to store the package body details
+*/
+typedef struct _tag_CmdBlock
+{
+ CMD_TYPE iCmdType; // Command type
+ string iCmdExpr; // Expression
+ PINSTALLFILE_LIST iInstallFileList; // Installable file details
+}CMD_BLOCK, *PCMD_BLOCK;
+
+typedef list<PLANG_LIST> LANGUAGE_LIST;
+typedef list<string> SISFILE_LIST, FILE_LIST;
+typedef list<PCMD_BLOCK> CMDBLOCK_LIST;
+
+/**
+class PkgParser
+ Parses the package file generated by DUMPSIS tool
+
+@internalComponent
+@released
+*/
+class PkgParser
+{
+public:
+ PkgParser(const string& aFile);
+ ~PkgParser();
+
+ void ParsePkgFile();
+ void GetEmbeddedSisList(SISFILE_LIST& embedSisList);
+ void GetInstallOptions(FILE_LIST& aOptions);
+ void GetLanguageList(LANGUAGE_LIST& langList);
+ void GetHeader(PKG_HEADER& pkgHeader);
+ void GetCommandList(CMDBLOCK_LIST& cmdList);
+ const char* GetPkgFileName(){
+ return iPkgFileName.c_str();
+ }
+
+private:
+ bool OpenFile();
+ void DeleteAll();
+
+ const char* iPkgFileContent ;
+ TUint iContentPos ;
+ string iContentStr ;
+
+ LANGUAGE_LIST iLangList;
+ PKG_HEADER iPkgHeader;
+ SISFILE_LIST iEmbedSisFiles;
+ FILE_LIST iInstallOptions;
+ CMDBLOCK_LIST iPkgBlock;
+
+ string iPkgFileName;
+
+ //Parser Methods
+ void AddLanguage(const string& aLang, TUint32 aCode, TUint32 aDialect);
+
+ void GetNextChar() ;
+ inline char GetCurChar() const {
+ return iPkgFileContent[iContentPos] ;
+ }
+ void GetNextToken();
+ bool GetStringToken();
+ TUint16 ParseEscapeChars();
+ void GetAlphaNumericToken();
+ bool IsNumericToken();
+ void GetNumericToken();
+ void ParseEmbeddedBlockL ();
+ void ParseCommentL();
+ inline void ExpectToken(TInt aToken) {
+ if (iToken!=aToken)
+ ParserError("Unexpected Token");
+ }
+ void ParseHeaderL();
+ void ParseLanguagesL();
+ void ParseFileL();
+ void ParsePackageL();
+ void ParseIfBlockL();
+ void ParseLogicalOp(string& aExpression);
+ void ParseRelation(string& aExpression);
+ void ParseUnary(string& aExpression);
+ void ParseFactor(string& aExpression);
+ void ParseOptionsBlockL();
+ void ParsePropertyL();
+ void ParseVendorNameL();
+ void ParseLogoL();
+ void ParseDependencyL();
+ void ParseVersion();
+ void ParseVendorUniqueNameL();
+ void ParseTargetDeviceL();
+
+ //Parser Attributes
+ TInt iToken;
+ VARIANTVAL iTokenVal;
+ TInt iLineNumber;
+
+ void ParserError(const char* aMsg);
+
+};
+
+#endif //__PKGFILEPARSER_H__