--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pimappsupport/vcardandvcal/src/VUTIL.CPP Tue Feb 02 10:12:19 2010 +0200
@@ -0,0 +1,133 @@
+// Copyright (c) 1997-2009 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:
+//
+
+#include <vutil.h>
+
+// System includes
+#include <f32file.h>
+#include <charconv.h>
+#include <utf.h>
+#include <s32mem.h>
+#include <concnf.h>
+#include <confndr.h>
+#include <conlist.h>
+
+// User includes
+#include <vuid.h>
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include "versit_internal.h"
+#endif
+
+
+EXPORT_C CVersitUnicodeUtils::~CVersitUnicodeUtils()
+/** Frees all resources owned by the object, prior to its destruction. */
+ {
+ delete iCharSetsAvailable;
+ delete iUnicodeConverter;
+ if (iFsConnected)
+ iFsSession.Close();
+ }
+
+EXPORT_C void CVersitUnicodeUtils::CreateConverterL()
+/** Creates a converter for converting between Unicode and Code Page 1252.
+
+Any unconvertible Unicode characters are converted into question marks. */
+ {
+ User::LeaveIfError(iFsSession.Connect());
+ iFsConnected=ETrue;
+ //
+ iUnicodeConverter = CCnvCharacterSetConverter::NewL();
+ iCharSetsAvailable = iUnicodeConverter->CreateArrayOfCharacterSetsAvailableL(iFsSession);
+ //
+ iUnicodeConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierCodePage1252, *iCharSetsAvailable, iFsSession);
+ iUnicodeConverter->SetReplacementForUnconvertibleUnicodeCharactersL(KVersitQuestionMark);
+ iCurrentConverterCharSet=KCharacterSetIdentifierCodePage1252;
+ }
+
+EXPORT_C HBufC8* CVersitUnicodeUtils::NarrowL(const TDesC& aDesC)
+/** Converts a string from Unicode to Code Page 1252.
+
+@param aDesC The Unicode string to be converted.
+@return A pointer to a Code Page 1252 string. The caller takes ownership. */
+ {
+ HBufC8* narrow=NarrowLC(aDesC);
+ CleanupStack::Pop(); //buf8
+ return narrow;
+ }
+
+EXPORT_C HBufC8* CVersitUnicodeUtils::NarrowLC(const TDesC& aDesC)
+/** Converts a string from Unicode to Code Page 1252.
+
+@param aDesC The Unicode string to be converted.
+@return A pointer to a Code Page 1252 string. The pointer is left on the cleanup
+stack. The caller takes ownership. */
+ {
+ HBufC8* buf8=HBufC8::NewLC(aDesC.Length());
+ TPtr8 temp = buf8->Des();
+ User::LeaveIfError(iUnicodeConverter->ConvertFromUnicode(temp, aDesC));
+ return buf8;
+ }
+
+EXPORT_C HBufC* CVersitUnicodeUtils::WidenL(const TDesC8& aDesC8)
+/** Converts a string from Code Page 1252 into Unicode.
+
+@param aDesC8 The Code Page 1252 string to be converted.
+@return Pointer to the string converted into Unicode. The caller takes ownership. */
+ {
+ HBufC* widen=WidenLC(aDesC8);
+ CleanupStack::Pop(); //buf
+ return widen;
+ }
+
+EXPORT_C HBufC* CVersitUnicodeUtils::WidenLC(const TDesC8& aDesC8)
+/** Converts a string from Code Page 1252 into Unicode.
+
+@param aDesC8 The Code Page 1252 string to be converted.
+@return Pointer to the string converted into Unicode. The pointer is left on the
+cleanup stack. The caller takes ownership. */
+ {
+ HBufC* buf=HBufC::NewLC(aDesC8.Length());
+ TInt state;
+ TPtr temp = buf->Des();
+ SetCurrentCharSetL(KCharacterSetIdentifierCodePage1252);
+ User::LeaveIfError(iUnicodeConverter->ConvertToUnicode(temp, aDesC8, state));
+ return buf;
+ }
+
+CCnvCharacterSetConverter::TAvailability CVersitUnicodeUtils::SetCurrentCharSetL(TUint aCharacterSet)
+ {
+ if (iCurrentConverterCharSet==aCharacterSet)
+ return CCnvCharacterSetConverter::EAvailable;
+ CCnvCharacterSetConverter::TAvailability avail=CCnvCharacterSetConverter::EAvailable;
+ TRAPD(err,iUnicodeConverter->PrepareToConvertToOrFromL(aCharacterSet,*iCharSetsAvailable,iFsSession));
+ if (err==KErrNotFound)
+ avail=CCnvCharacterSetConverter::ENotAvailable;
+ else
+ User::LeaveIfError(err);
+ if (avail==CCnvCharacterSetConverter::EAvailable)
+ iCurrentConverterCharSet=aCharacterSet;
+ return avail;
+ }
+
+TUint CVersitUnicodeUtils::AutoDetectCharSetL(const TDesC8& aSample
+ ,const CArrayFix<CCnvCharacterSetConverter::SCharacterSet>* aAutoDetectCharSets)
+ {
+ const CArrayFix<CCnvCharacterSetConverter::SCharacterSet>* charSets=(aAutoDetectCharSets ? aAutoDetectCharSets:iCharSetsAvailable);
+ TUint charSetId;
+ TInt confidenceLevel;
+
+ iUnicodeConverter->AutoDetectCharacterSetL(confidenceLevel,charSetId,*charSets,aSample);
+ return charSetId;
+ }