--- /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 <e32base.h>
+#include <txtrich.h>
+
+// 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<HBufC>* 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<CStringPair> *iMacros;
+
+ /**
+ * An array which contains places for line feeds. These will
+ * be inserted to a RTF object.
+ */
+ RArray<TInt> *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<HBufC>* 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