williamr@2: // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@2: // under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members williamr@2: // which accompanies this distribution, and is available williamr@2: // at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // williamr@2: williamr@2: #if !defined(__UTF_H__) williamr@2: #define __UTF_H__ williamr@2: williamr@2: #if !defined(__E32STD_H__) williamr@2: #include williamr@2: #endif williamr@2: williamr@2: williamr@2: class CnvUtfConverter williamr@2: /** williamr@2: Converts text between Unicode (UCS-2) and the two Unicode transformation williamr@2: formats UTF-7 and UTF-8. There are no functions to convert directly between williamr@2: UTF-7 and UTF-8. williamr@2: williamr@2: Objects of this class do not need to be created because all the member functions williamr@2: are static. The four functions are passed text in the second argument and williamr@2: output the resulting text in the first argument. Sixteen-bit descriptors are williamr@2: used to hold text encoded in UCS-2 (i.e. normal 16 bit Unicode), and eight-bit williamr@2: descriptors are used to hold text encoded in either of the transformation williamr@2: formats. williamr@2: williamr@2: The conversion functions return the number of characters which were not converted williamr@2: because the output descriptor was not long enough to hold all of the converted williamr@2: text. This allows users of this class to perform partial conversions on an williamr@2: input descriptor, handling the case when the input descriptor is truncated williamr@2: mid way through a multi-byte character. The caller does not have to guess williamr@2: how big to make the output descriptor for a given input descriptor- they williamr@2: can simply do the conversion in a loop using a small output descriptor. The williamr@2: ability to handle truncated descriptors is particularly useful if the caller williamr@2: is receiving information in chunks from an external source. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: /** Conversion error flags. At this stage there is only one error flag williamr@2: - others may be added in the future. */ williamr@2: enum TError williamr@2: { williamr@2: /** The input descriptor contains a single corrupt character. This williamr@2: might occur when the input descriptor only contains some of the bytes williamr@2: of a single multi-byte character. */ williamr@2: EErrorIllFormedInput=KErrCorrupt williamr@2: }; williamr@2: williamr@2: /** Initial value for the state argument in a set of related calls to williamr@2: ConvertToUnicode(). */ williamr@2: enum {KStateDefault=0}; williamr@2: public: williamr@2: // the conversion functions return either one of the TError values above, or the number of unconverted elements left at the end of the input descriptor williamr@2: IMPORT_C static TInt ConvertFromUnicodeToUtf7(TDes8& aUtf7, const TDesC16& aUnicode, TBool aEncodeOptionalDirectCharactersInBase64); williamr@2: static TInt ConvertFromUnicodeToUtf7(TDes8& aUtf7, const TDesC16& aUnicode, TBool aIsImapUtf7, TBool aEncodeOptionalDirectCharactersInBase64); williamr@2: IMPORT_C static TInt ConvertFromUnicodeToUtf8(TDes8& aUtf8, const TDesC16& aUnicode); williamr@2: static TInt ConvertFromUnicodeToUtf8(TDes8& aUtf8, const TDesC16& aUnicode, TBool aGenerateJavaConformantUtf8); williamr@2: IMPORT_C static TInt ConvertToUnicodeFromUtf7(TDes16& aUnicode, const TDesC8& aUtf7, TInt& aState); williamr@2: static TInt ConvertToUnicodeFromUtf7(TDes16& aUnicode, const TDesC8& aUtf7, TBool aIsImapUtf7, TInt& aState); williamr@2: IMPORT_C static TInt ConvertToUnicodeFromUtf8(TDes16& aUnicode, const TDesC8& aUtf8); williamr@2: static TInt ConvertToUnicodeFromUtf8(TDes16& aUnicode, const TDesC8& aUtf8, TBool aGenerateJavaConformantUtf8); williamr@2: static TInt ConvertToUnicodeFromUtf8(TDes16& aUnicode, const TDesC8& aUtf8, TBool aGenerateJavaConformantUtf8, williamr@2: TInt& aNumberOfUnconvertibleCharacters, TInt& aIndexOfFirstByteOfFirstUnconvertibleCharacter); williamr@2: williamr@2: IMPORT_C static HBufC8* ConvertFromUnicodeToUtf7L(const TDesC16& aUnicode,TBool aEncodeOptionalDirectCharactersInBase64); williamr@2: IMPORT_C static HBufC8* ConvertFromUnicodeToUtf8L(const TDesC16& aUnicode); williamr@2: IMPORT_C static HBufC16* ConvertToUnicodeFromUtf7L(const TDesC8& aUtf7); williamr@2: IMPORT_C static HBufC16* ConvertToUnicodeFromUtf8L(const TDesC8& aUtf8); williamr@2: williamr@2: williamr@2: }; williamr@2: williamr@2: #endif