imgtools/sisutils/inc/pkgfileparser.h
changeset 590 360bd6b35136
parent 0 044383f39525
--- 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__