diff -r 000000000000 -r 72b543305e3a email/mail/PluginSrc/MailPlainView/MsgMailViewerHtmlConv.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/mail/PluginSrc/MailPlainView/MsgMailViewerHtmlConv.h Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,349 @@ +/* +* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "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: +* Utility class for HTML converter +* +*/ + + +#ifndef CMSGMAILVIEWERHTMLCONV_H +#define CMSGMAILVIEWERHTMLCONV_H + +// INCLUDES +#include +#include + +// FORWARD DECLARATIONS +class CMsgBodyControl; +class CCnvCharacterSetConverter; + +// CLASS DECLARATION + +/** +* Utility class for HTML converter. +* A pair of two strings. +*/ +class CStringPair : public CBase + { + public: + /** + * A constructor. + * @param aName a HTML macro, e.g. lt + * @param aValue a character that is represented by a macro e.g. < + * @return created object. + */ + static CStringPair* NewLC(const TDesC& aName, const TDesC& aValue); + + /** + * Destructor + */ + ~CStringPair(); + + /** + * @return a name of the macro + */ + HBufC* GetName() const; + + /** + * @return a value of the macro + */ + HBufC* GetValue() const; + + /** + * Compares if two pairs are same. Names are compared. + * @return as in TBufC::Compare. + */ + static TInt Compare(const CStringPair& aPair1, + const CStringPair& aPair2); + + private: + /** + * A constructor + */ + CStringPair(); + + /** + * A 2nd phase constructor + * @param aName a HTML macro, e.g. lt + * @param aValue a character that is represented by a macro e.g. < + */ + void ConstructL(const TDesC& aName, const TDesC& aValue); + + private: + /// Name of the macro. Owns. + HBufC* iName; + + /// Value of the macro. Owns. + HBufC* iValue; + }; + + +/** +* HTML converter. +* This class is used in Mail viewer application to convert +* messages with HTML-formatting to plain text. +*/ +class CMsgMailViewerHtmlConv : public CActive + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aHandle a handle to HTML-file. + * @param aCharset Characterset ID + * @param aForced forse converter to use passed Character set id + * otherwise converter tries to use character set defined in HTML content + * If zero character set id is tried to find out from the HTML content. + */ + static CMsgMailViewerHtmlConv* NewLC( + RFile& aHandle, TUint aCharset, TBool aForced); + static CMsgMailViewerHtmlConv* NewL( + RFile& aHandle, TUint aCharset, TBool aForced); + + /** + * Destructor. + */ + virtual ~CMsgMailViewerHtmlConv(); + + public: // New functions + + /** + * Removes HTML-tags and replaces macros with real characters. + * @return KErrNone if part of the conversion has been successful. + * Returns KErrEof when conversion is done. + */ + TInt Convert(); + + /** + * Removes HTML-tags and replaces macros with real characters. + * Does the conversion asynchronously in low priority. + * + * @param aStatus Generic request status. + * KErrNone when the convertion is succesful. + * Other error codes are used to indicate an error during conversion. + */ + void Convert( TRequestStatus* aStatus ); + + + /** + * Returns a stripped text. + * @return stripped text object. + */ + HBufC* GetText() const; + + /** + * Return file id array of inline images. + * @return Reference to array. + * Ownership is transferred to caller + **/ + RPointerArray* FileIdArray(); + /** + * Checks if the charset name and identifiers were autoparsed + */ + TBool AutoParsedCharSetNameAndIdentifier() const; + + /** + * Returns the auto parsed charset identifier + */ + TUint AutoParsedCharSetIdentifier() const; + + private: + /** + * C++ default constructor. + */ + CMsgMailViewerHtmlConv(); + + /** + * By default Symbian OS constructor is private. + * @param aHandle file handle to HTML content + * @param aCharSet characterset id + */ + void ConstructL(RFile& aHandle, TUint aCharSet); + + /** + * Deletes aLen characters beginning from aPos in iStrippedText. + * @param aLen how many characters will be deleted. + * @return New length of the message. + */ + TInt Delete(const TInt aLen); + + /** + * Inserts characters beginning from aPos in iStrippedText. + * @param aChars characters to be inserted. + * @return New length of the message. + */ + TInt InsertTextL(const TDesC& aChars); + + /** + * Replaces macro with real text + * @return New length of the message. + */ + TInt ReplaceMacroL(); + + /** + * Fills a map of macros with name, value pairs. + */ + void InitMacroArrayL(); + + /** + * Converts unnumbered list to a text. + * @param Indentation of the items. + * @return New length of the message. + */ + TInt HandleUListL(const TInt aIndent); + + /** + * Converts ordinal list to a text. + * @param Indentation of the items. + * @return New length of the message. + */ + TInt HandleOListL(const TInt aIndent); + + /** + * Converts definition list to a text. + * @param Indentation of the items. + * @return New length of the message. + */ + TInt HandleDListL(const TInt aIndent); + + /** + * Converts lists into a text. + * @param aIndent Indentation of the items + * @param aNumbered, ETrue if ordinal list, EFalse otherwise + * @return New length of the message + */ + TInt HandleListL(const TInt aIndent, const TBool aNumbered); + + /** + * Converts HTML tags to plain text. + * @param indentation of the lists. + * @return New length of the message. + */ + TInt HandleTagL(const TInt aIndent); + + /** + * Removes characters from iPos to >-character. Shows an error + * and interrupts conversion if it is not found. + * @return New length of the message. + */ + TInt RemoveTagL(); + + /** + * Adds an error message to end of the message + * and shows an information note. + */ + void ShowErrorL(); + + /** + * Adds a linefeed into a text. + */ + void InsertLinefeedL(); + + /** + * Performs a character conversion for area started with + * BeginConvertL(); + */ + void DoConvertL(); + + /** + * Main loop + */ + void DoConversionL(); + + /** + * Continue asynchronous conversion in next scheduler loop + */ + void ContinueAsyncConvert(); + + + protected: // From CActive + void RunL(); + void DoCancel(); + + + private: // Data + /** + * Contains a text read from file which is stripped (Owned). + */ + HBufC *iOrigText; + + /** + * A position in text. + */ + TInt iPos; + + /** + * An array which contains all HTML macro definitions which + * are read from a resource file. + */ + RPointerArray *iMacros; + + /** + * An array which contains places for line feeds. These will + * be inserted to a RTF object. + */ + RArray *iNewLines; + + /** + * Status of the conversion + */ + TInt iReturnValue; + + /** + * Position where an error occured + */ + TInt iErrorPos; + + /** + * Own: Character converter instance. + */ + CCnvCharacterSetConverter* iCharConv; + + /** + * State conversion is in. + */ + TInt iConversionState; + + /** + * An array containing inline image names + */ + RPointerArray* iFileIdArray; + + /** + * Characterset name + */ + HBufC* iCharSetName; + + /** + * Characterset id + */ + TUint iCharacterSetId; + + /** + * Status flags + */ + TUint iStatusFlags; + + /** + * Asynchronous convert request status + */ + TRequestStatus* iReqStatus; + + }; + +#include "MsgMailViewerHtmlConv.inl" // inline functions + +#endif // CMSGMAILVIEWERHTMLCONV_H + +// End of File