bintools/rcomp/inc/localise.h
changeset 0 044383f39525
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/rcomp/inc/localise.h	Tue Oct 27 16:36:35 2009 +0000
@@ -0,0 +1,292 @@
+/*
+* Copyright (c) 2007-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 __LOCALISE_H__
+#define __LOCALISE_H__
+
+#ifdef __VC32__ 
+#pragma warning( push, 1 )	// MS STL libraries do not compile cleanly, temporarily set warning level to 1
+#pragma warning( disable : 4710 )	// function not inlined.
+#pragma warning( disable : 4530 )	// function not inlined.
+#endif
+#include <vector>
+#include <map>
+#include <new>
+
+#pragma warning( disable : 4710 )	// function not inlined.
+
+#include "ASTRING.H"
+
+typedef std::vector<String> CommentTagStore;
+
+enum OutputStates {	EStartOfLine, EGeneral, EFindLineNo, EInLineNo, 
+					EFindFileName, EInFileName, EFindDigit, EAfterDigit };
+
+enum States { EStartOfComment, EAfterFirstWordOfTag, ENewLineAtStart, EInTag, ENewLineInTag };
+
+enum Requirements { ERequired, EOptional, EOptionalWithDefault, EForbidden };
+
+enum ProcessOptionalStates { ELookingForCommand, ELookingForEqualSignOrRlsItem, ELookingForDefault,
+								ELookingForRlsItem, EShouldBeFinished };
+
+enum NumberOfRlsTypes { ENumberOfRlsTypes = 7 }; 
+// ENumberOfRlsTypes is used as the dimension of the array iRlsTypes declared in GlobalLocalisationData.
+// These values are filled in in the constructor for that class.
+
+class RlsItemRequirements
+	{
+public:
+	RlsItemRequirements(String aRlsName, int aRequirement=EForbidden);
+	RlsItemRequirements(const RlsItemRequirements & aRlsItemRequirements);
+	~RlsItemRequirements();
+private:
+	String iRlsName;
+	int iRequirement;
+	};
+
+class CommandRequirementsHolder
+	{
+public:
+	CommandRequirementsHolder(String aCommandName);
+	CommandRequirementsHolder(const CommandRequirementsHolder & aCommandRequirmentsHolder);
+	~CommandRequirementsHolder();
+private:
+	String iCommandName;
+	std::vector<RlsItemRequirements> iRlsRequirements;
+	};
+
+
+class TagParameterData
+	{
+public:
+	TagParameterData(String aTagParameter);
+	TagParameterData(const TagParameterData & aTagParameterData);
+	~TagParameterData();
+	void SetTagParameter(String aTagParameter);
+	String GetTagParameter();
+private:
+	String iTagParameter;
+	};
+
+class CommentRequirement // requirements for an rls item
+	{
+public:
+	CommentRequirement(int aRequirementStatus, String aDefaultParameter="");
+	CommentRequirement(const CommentRequirement & aCommentRequirement);
+	~CommentRequirement();
+	int GetRequirementStatus();
+	String GetDefault();
+private:
+	int iRequirementStatus;
+	String iDefaultParameter;
+	};
+
+class CommentRequirementPair // for a particular tag holds the requirements for an rls item
+	{
+public:
+	CommentRequirementPair(String aRlsItem, int aStatus, String aDefault="");
+	CommentRequirementPair(const CommentRequirementPair & aCommentRequirementPair);
+	~CommentRequirementPair();
+	String CheckIfOptionalAndHasDefault(String aRlsTypeName, String aCommandName);
+	int GetRequirementStatus();
+	String GetRlsItem();
+	void SetRlsItem(String aRlsItem);
+private:
+	String iRlsItem;
+	CommentRequirement iCommentRequirementData;
+	};
+
+class CommentTag // the declared data which goes with a particular command tag
+	{
+public:
+	CommentTag(String aParameterType="", bool aTagDeclared=false);
+	CommentTag(const CommentTag & aCommentTag);
+	~CommentTag();
+	bool IsTagDeclared();
+	bool IsTagLegalForRlsType(String aRlsTypeName);
+	bool IsParameterAlreadyDeclared(String aTagParameter);
+	int GetRequirementStatus(String aRlsItem);
+	String CheckIfOptionalAndHasDefault(String aRlsTypeName, String aCommandName);
+	String GetParameterType();
+	String GetPermissibleParameter(int aIndex);
+	int GetNumberOfPermissibleParameters();
+	void SetDeclared();
+	void SetParameterType(String aParameterType);
+	void AddTagParameterData(String aPermissibleParameter);
+	void AddRequirements(String aRlsItem, int aRequired, String aDefault);
+private:
+	bool iTagDeclared;
+	String iParameterType;
+	std::vector<TagParameterData> iPermissibleParameters;
+	std::vector<CommentRequirementPair> iRequirements;
+	};
+
+class CommentTagPair // a mapping between command tag names and the data which goes with them
+	{
+public:
+	CommentTagPair(String aCommandName, String aParameterType="", bool aTagDeclared=false);
+	CommentTagPair(const CommentTagPair & aCommentTagPair);
+	~CommentTagPair();
+	bool TagDeclared();
+	bool IsTagLegalForRlsType(String aRlsTypeName);
+	bool IsParameterAlreadyDeclared(String aTagParameter);
+	int GetRequirementStatus(String aRlsItem);
+	String CheckIfOptionalAndHasDefault(String aRlsTypeName);
+	String GetCommandName();
+	String GetParameterType();
+	String GetPermissibleParameter(int aIndex);
+	int GetNumberOfPermissibleParameters();
+	void SetCommandName(String aCommandName);
+	void SetTagDeclared();
+	void AddPermissibleParameter(String aPermissibleParameter);
+	void AddRlsItem(String aRlsItem, int aRequired, String aDefault);
+	
+private:
+	String iCommandName;
+	CommentTag iTagVariables;
+	};
+
+
+	
+class LocalisationLine // an individual line from a localisation comment
+	{
+public:
+	LocalisationLine(String iFileName="", int iLineNumber=-1);
+	LocalisationLine(const LocalisationLine & aClass);
+	~LocalisationLine();
+	void Reset(String iFileName, int iLineNumber);
+	String GetFileName();
+	int GetFirstLine();
+	int GetLastLine();
+	void SetFirstLine(int aFirstLine);
+	void SetFileName(String aFileName);
+	void SetLastLine(int aLastLine);
+	unsigned int GetNumberOfTokens();
+	String GetElement(unsigned int aIndex);
+	void AddElement(String aElement);
+	void SetAnalysed(bool aParity);
+	void Empty();
+	bool IsLineAnalysed();
+private:
+	bool iAnalysed;
+	int iFirstLine;
+	int iLastLine;
+	String iFileName;
+	std::vector<String> iData;
+	};
+
+
+class LocalisationComment // holds the data from a localisation comment
+	{
+public:
+	LocalisationComment(LocalisationLine & aComment);
+	~LocalisationComment();
+	String GetFileName();
+	int GetFirstLineOfComment();
+	int GetLastLineOfComment();
+	int GetNumberOfOptionalLinesToAdd();
+	LocalisationLine GetLine(unsigned int aIndex);
+	unsigned int GetNumberOfTokensInComment(); // size of originalData
+	unsigned int GetNumberOfTokensInLine(unsigned int aIndex); // size of iData[aIndex]
+	unsigned int GetNumberOfLinesInComment(); // size of iData
+	String GetOriginalElement(unsigned int aIndex);
+	String GetElementFromLine(unsigned int aLine, unsigned int aElement);
+	void AddDataLine(LocalisationLine aDataLine);
+	void SetAnalysed(unsigned int aIndex, bool aParity);
+	void SetLastLine(int aLineNumber);
+	bool IsLineAnalysed(unsigned int aIndex);
+	void SetWholeTagAnalysed(bool aParity);
+	int GetFirstLine(unsigned int aIndex);
+	void AddOptionalData(String aOptionalData);
+	String GetOptionalLineToAdd(unsigned int aLine);
+private:
+	LocalisationLine iOriginalData;
+	std::vector<LocalisationLine> iData;
+	std::vector<String> iOptionalLinesToAdd;
+	};
+
+class WarningToOutput // an individual localisation warning
+	{
+public:
+	WarningToOutput(const String aFileName, int aLineNumber, String aComment);
+	WarningToOutput(const WarningToOutput & aWarningToOutput);
+	~WarningToOutput();
+	WarningToOutput& operator=(const WarningToOutput& aWarningToOutput);
+	const String GetFileName();
+	int GetLineNumber();
+	String GetComment();
+private:
+	String iFileName;
+	int iLineNumber;
+	String iComment;
+	};
+
+class GlobalLocalisationData
+	{
+public:
+	GlobalLocalisationData();
+	~GlobalLocalisationData();
+
+	bool LocalisationCommentsExist();
+	void AnalyseLocalisationData();
+	void OutputLocalisedFile(String SourceFileName);
+	void PrintLocalisationWarnings();
+
+	void AddWarningToStore(const String aFileName, int aLineNumber, String aComment);
+	void SetStart(String aFileName, int aLineNumber);
+	void StoreComment(String aString);
+	void StoreFinalComment();
+
+private:
+	void ParseCommentTags(unsigned int i);
+	void CheckIfCommentTagsFullyAnalysed();
+	void CheckRlsEntries();
+	void Process(unsigned int aStoreIndex, unsigned int aCurrentIndex);
+	void ProcessDeclaration(unsigned int aStoreIndex, unsigned int aCurrentIndex);
+	void ProcessTagParameter(unsigned int aStoreIndex, unsigned int aCurrentIndex);
+	void ProcessOptional(unsigned int aStoreIndex, unsigned int aCurrentIndex);
+	void ProcessRequired(unsigned int aStoreIndex, unsigned int aCurrentIndex);
+	void StoreTagParameter(String aCommandName, String aParameter);
+	void StoreRlsItem(String aCommandName, String aRlsItem, int aRequired, String aDefault="");
+	void CheckWhetherAllCommentsPresent(String rlsTypeName, int commentOfInterest, std::vector<String> commentsSeen);
+	void CheckParametersArePermitted(int aCommentOfInterest, int aLineInComment, int aDefinitionNumber);
+	void CheckCommands(String aRlsTypeName, int aCommentOfInterest);
+	void AddCommentToStore();
+	bool IsAnRlsItem(String aString) const;
+	
+	int NeedToAddDefaultData(String aFileName, int aFileLine);
+	int FindIndex(const String aFileName, int aLineNumber);
+	bool CheckFirstIsCommand(LocalisationLine aCommandLine);
+	int GetTagDeclaredIndex(String aCommandName);
+
+	bool iCommentStarted;
+	std::vector<LocalisationComment> iCommentTagStore; // data split up into individual command lines
+	LocalisationLine iTempCommentStore; // holds the data brought in from yacc parsing
+	std::vector<CommentTagPair> iCommentDefinitions;
+	std::vector<WarningToOutput> iWarningStore;
+	String iTypes[4];
+	String iRlsTypes[ENumberOfRlsTypes];
+	};
+
+extern GlobalLocalisationData *pGL;	
+#ifdef __VC32__
+#pragma warning( pop )
+#endif
+
+#endif
+