diff -r 000000000000 -r 044383f39525 bintools/rcomp/inc/localise.h --- /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 +#include +#include + +#pragma warning( disable : 4710 ) // function not inlined. + +#include "ASTRING.H" + +typedef std::vector 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 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 iPermissibleParameters; + std::vector 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 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 iData; + std::vector 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 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 iCommentTagStore; // data split up into individual command lines + LocalisationLine iTempCommentStore; // holds the data brought in from yacc parsing + std::vector iCommentDefinitions; + std::vector iWarningStore; + String iTypes[4]; + String iRlsTypes[ENumberOfRlsTypes]; + }; + +extern GlobalLocalisationData *pGL; +#ifdef __VC32__ +#pragma warning( pop ) +#endif + +#endif +