// MIUTPARS.H
//
// Copyright (c) 1998 Symbian Ltd.  All rights reserved. 
//

#if !defined (__MIUTPARS_H__)
#define __MIUTPARS_H__

#include <e32base.h>

// comment out line below to switch ON Internet message checking
//#define __NO_EMAIL_ADDRESS_CHECKING__

class TImMessageField
	{
public:
	IMPORT_C TBool	ValidEmailAddress(const TDesC8& anAddress);								
	IMPORT_C TBool	ValidEmailAddress(const TDesC8& anAddress,TInt& rFirstBadCharPos);	

	IMPORT_C TBool	ValidEmailAddress(const TDesC8& anAddress, TInt& rFirstChar, TInt& rLastChar);								
	IMPORT_C TBool	ValidEmailAddress(const TDesC8& anAddress, TInt& rFirstChar, TInt& rLastChar, TInt& rFirstBadCharPos);	

	IMPORT_C TBool	LegalEmailAddress(const TDesC8& anAddress);								
	IMPORT_C TBool	LegalEmailAddress(const TDesC8& anAddress,TInt& aFirstBadCharPos);	

	IMPORT_C TBool	LegalEmailAddress(const TDesC8& anAddress, TInt& rFirstChar, TInt& rLastChar);								
	IMPORT_C TBool	LegalEmailAddress(const TDesC8& anAddress, TInt& rFirstChar, TInt& rLastChar, TInt& rFirstBadCharPos);	

	IMPORT_C TBool	LegalEmailAddressChar(const TChar& /* aChar*/ );	

	IMPORT_C TBool  LegalSubjectLine(const TDesC8& aSubjectLine);						// test subject line for illegal characters
	IMPORT_C TBool  LegalSubjectLine(const TDesC8& aSubjectLine,TInt& rFirstBadCharPos);	// ditto
	IMPORT_C TBool	LegalSubjectLineChar(const TChar&  aChar);	

	IMPORT_C TBool  LegalAliasName(const TDesC8& aName);
	IMPORT_C TBool  LegalAliasName(const TDesC8& aName,TInt& rFirstBadCharPos);

	IMPORT_C TPtrC8 ExtractEmailAddress(const TDesC8& aDesc);							// extract an email address (removing any surrounding angled brackets), or return whole string if address not found
	IMPORT_C TPtrC8 ExtractEmailAddress(const TDesC8& aDesc,TInt& rError);				// ditto
	IMPORT_C TPtrC8 ExtractAlias(const TDesC8& aDesc);
	IMPORT_C TPtrC8 ExtractAlias(const TDesC8& aDesc,TInt& rError);
	IMPORT_C TPtrC8 ExtractComment(const TDesC8& aDesc);
	IMPORT_C TPtrC8 ExtractComment(const TDesC8& aDesc,TInt& rError);

	IMPORT_C TPtrC8 ExtractLegalEmailAddress(const TDesC8& aDesc);						// only extract Internet Email address which must be surrounded by angled brackets

#if defined (_UNICODE)
	IMPORT_C TBool	ValidEmailAddress(const TDesC16& anAddress);								
	IMPORT_C TBool	ValidEmailAddress(const TDesC16& anAddress,TInt& rFirstBadCharPos);	

	IMPORT_C TBool	LegalEmailAddress(const TDesC16& anAddress);								
	IMPORT_C TBool	LegalEmailAddress(const TDesC16& anAddress,TInt& rFirstBadCharPos);	

	IMPORT_C TBool	LegalEmailAddress(const TDesC16& anAddress, TInt& rFirstChar, TInt& rLastChar);								
	IMPORT_C TBool	LegalEmailAddress(const TDesC16& anAddress, TInt& rFirstChar, TInt& rLastChar, TInt& rFirstBadCharPos);	

	IMPORT_C TBool  LegalSubjectLine(const TDesC16& aSubjectLine);						// test subject line for illegal characters
	IMPORT_C TBool  LegalSubjectLine(const TDesC16& aSubjectLine,TInt& rFirstBadCharPos);	// ditto

	IMPORT_C TBool  LegalAliasName(const TDesC16& aName);
	IMPORT_C TBool  LegalAliasName(const TDesC16& aName,TInt& rFirstBadCharPos);

	IMPORT_C TPtrC16 ExtractEmailAddress(const TDesC16& aDesc);							// extract an email address (removing any surrounding angled brackets), or return whole string if address not found
	IMPORT_C TPtrC16 ExtractEmailAddress(const TDesC16& aDesc,TInt& rError);				// ditto
	IMPORT_C TPtrC16 ExtractAlias(const TDesC16& aDesc);
	IMPORT_C TPtrC16 ExtractAlias(const TDesC16& aDesc,TInt& rError);
	IMPORT_C TPtrC16 ExtractComment(const TDesC16& aDesc);
	IMPORT_C TPtrC16 ExtractComment(const TDesC16& aDesc,TInt& rError);

	IMPORT_C TPtrC16 ExtractLegalEmailAddress(const TDesC16& aDesc);						// only extract Internet Email address which must be surrounded by angled brackets
#endif

private:
	TBool isValidEmailAddress(const TDesC8& aDesc, TInt& aLeftEdge, TInt& aRightEdge);
	TBool isLegalEmailAddress(const TDesC8& aDesc, TInt& aLeftEdge, TInt& aRightEdge);
	TBool isSurroundedByRoundBrackets(const TDesC8& aDesc, TInt& aLeftEnd, TInt& aRightEnd);
	TBool isSurroundedByAngledBrackets(const TDesC8& aDesc, TInt& aLeftEnd, TInt& aRightEnd);
	TBool isEnclosedSubString(const TDesC8& aDesc, const TChar& aLeftBracket, const TChar& aRightBracket,TInt& aLeftPos, TInt& aRightPos);

    TBool isLegalString(const TDesC8& aDesc, TInt& aFirstBadCharPos);
	TBool isLegalChar(const TChar& aChar);
    TBool isLegalEmailString(const TDesC8& aDesc, TInt& aFirstBadCharPos);
	TBool isLegalEmailChar(const TChar& aChar);
	TBool LocateSubString(const TDesC8& aDesc, const TInt atPos, TInt& aLeftEdge, TInt& aRightEdge);	
	TBool hasAngledBrackets(const TDesC8& anAddress);
	TBool isLegal_ISO88591String(const TDesC8& aString,TInt& aPos);

#if defined (_UNICODE)
	TBool isSurroundedByAngledBrackets(const TDesC16& aDesc, TInt& aLeftEnd, TInt& aRightEnd);
	TBool isSurroundedByRoundBrackets(const TDesC16& aDesc, TInt& aLeftEnd, TInt& aRightEnd);
	TBool isEnclosedSubString(const TDesC16& aDesc, const TChar& aLeftBracket, const TChar& aRightBracket,TInt& aLeftPos, TInt& aRightPos);
	TBool LocateSubString(const TDesC16& aDesc, const TInt atPos, TInt& aLeftEdge, TInt& aRightEdge);
	TBool isValidEmailAddress(const TDesC16& aDesc, TInt& aLeftEdge, TInt& aRightEdge);
	TBool isLegalEmailAddress(const TDesC16& aDesc, TInt& aLeftEdge, TInt& aRightEdge);
	TBool isLegalString(const TDesC16& aString,TInt& aPos);
	TBool isLegalEmailString(const TDesC16& aString,TInt& aPos);
	TBool hasAngledBrackets(const TDesC16& anAddress);
	TBool isLegal_ISO88591String(const TDesC16& aString,TInt& aPos);

#endif
	};


#endif // !defined __MIUTPARS_H__

