telephonyprotocols/csdagt/script/SCHCONV.CPP
branchopencode
changeset 24 6638e7f4bd8f
parent 0 3553901f7fa8
--- a/telephonyprotocols/csdagt/script/SCHCONV.CPP	Mon May 03 13:37:20 2010 +0300
+++ b/telephonyprotocols/csdagt/script/SCHCONV.CPP	Thu May 06 15:10:38 2010 +0100
@@ -1,294 +1,294 @@
-// Copyright (c) 2003-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:
-// Character conversion class definitions
-// 
-//
-
-/**
- @file Schconv.cpp 
-*/
-
-#include "SCHCONV.H"	
-#include <utf.h>
-#include "ND_STD.H"
-
-_LIT(KUnicodeType1,"ISO-10646-UCS-2");	//< 3 names for UNICODE
-_LIT(KUnicodeType2,"csUnicode");
-_LIT(KUnicodeType3,"UNICODE-1-1");
-_LIT(KIso88591Type1,"ISO-8859-1");	//< 3 name for ISO-8859-1
-
-/*
-_LIT(KIso88591Type2,"ISO_8859-1");
-_LIT(KIso88591Type3,"latin1");
-*/
-
-// CScriptCharacterConverter definitions 
-
-CScriptCharacterConverter* CScriptCharacterConverter::NewL()
-/**
-2 phased constructor for CScriptCharacterConverter, first phase.
-
-@exception Leaves if ConstructL() leaves, or not enough memory is available.
-@return a new CScriptCharacterConverter object.
-*/
-	{
-	CScriptCharacterConverter* r=new(ELeave) CScriptCharacterConverter();
-	CleanupStack::PushL(r);
-	r->ConstructL();
-	CleanupStack::Pop();
-	return r;
-	}
-
-CScriptCharacterConverter::CScriptCharacterConverter()
-	: iDefaultCharSet(KIso88591Type1)
-/**
-Private constructor for CScriptCharacterConverter, used in the first phase of construction.
-*/
-	{}
-
-void CScriptCharacterConverter::ConstructL()
-/**
-Instantiates member variables.
-
-@exception Leaves if file server Connect() fails or CCnvCharacterSetConverter::NewL() leaves.
-*/
-	{
-	User::LeaveIfError(iFs.Connect());
-	iConverter=CCnvCharacterSetConverter::NewL();
-	}
-
-CScriptCharacterConverter::~CScriptCharacterConverter()
-/**
-Destructor.
-Closes file server.
-Deletes iConverter.
-*/
-	{
-	iFs.Close();
-	delete iConverter;
-	}
-
-HBufC8* CScriptCharacterConverter::ConvertL(const TDesC8& aString, const TDesC& aCharSet)
-/**
-Calls ConvertLC.
-*/
-	{
-	HBufC8* buf;
-	buf=ConvertLC(aString,aCharSet);
-	CleanupStack::Pop(); //buf
-	return buf;
-	}
-
-HBufC8* CScriptCharacterConverter::ConvertL(const TDesC16& aString, const TDesC& aCharSet)
-/**
-Calls ConvertLC.
-*/
-	{
-	HBufC8* buf;
-	buf=ConvertLC(aString,aCharSet);
-	CleanupStack::Pop(); //buf
-	return buf;
-	}
-
-HBufC8* CScriptCharacterConverter::ConvertLC(const TDesC8& aString, const TDesC& aCharSet)
-/**
-Converts from ISO-8859-1 to aCharSet or if aCharSet is empty to the default
-character set. Returns the result in the form of an 8-bit buffer ready for sending
-to comm port. Leaves with KErrCharacterConversionError if there is an error in
-conversion.
-*/
-	{
-	TBuf<KMaxCharacterTypeLength> type=aCharSet;
-	if (type.Length()==0)
-		type.Copy(iDefaultCharSet);
-	
-	HBufC8* buf=HBufC8::NewLC(aString.Length()); // must put this on the cleanup stack first as we're leaving it there
-
-// first convert to unicode
-	if (iConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierIso88591,iFs)!=CCnvCharacterSetConverter::EAvailable)
-		User::Leave(KErrCharacterSetDoesNotExist);
-	HBufC16* buf16=HBufC16::NewLC(aString.Length());
-	TPtr16 unicode(buf16->Des());
-	TInt state=CCnvCharacterSetConverter::KStateDefault;
-	TInt ret=iConverter->ConvertToUnicode(unicode,aString,state);
-	if (ret!=KErrNone)	// this conversion is from ISO-8859-1 to unicode, so we know the length
-		User::Leave(KErrCharacterConversionError);	
-
-	if (IsUnicode(type))
-		{
-		TPtr8 resString(buf->Des());
-		CopyToEightBitDataL(resString,unicode);
-		}
-	else
-		{
-		PrepareToConvertL(type);
-		TPtrC16 remainingUnicode(unicode);
-		TInt state=CCnvCharacterSetConverter::KStateDefault;
-		FOREVER
-			{
-			TPtr8 resString(buf->Des());
-			ret=iConverter->ConvertFromUnicode(resString,remainingUnicode,state);
-			if (ret<KErrNone)
-				{
-				User::Leave(KErrCharacterConversionError);	
-				break;
-				}
-			else
-				{
-				if (ret==KErrNone)
-					break;
-				buf->ReAllocL(buf->Length()+ret);
-				}
-			remainingUnicode.Set(remainingUnicode.Right(ret));
-			}
-		}
-
-	CleanupStack::PopAndDestroy();						// buf16
-	return buf;
-	}
-		
-HBufC8* CScriptCharacterConverter::ConvertLC(const TDesC16& aString, const TDesC& aCharSet)
-/**
-Converts from UNICODE to aCharSet or if aCharSet is empty to the default
-character set. Returns the result in th form of an 8-bit buffer ready for sending
-to comm port. Leaves with KErrCharacterConversionError if there is an error in
-conversion.
-*/
-	{
-	TBuf<KMaxCharacterTypeLength> type=aCharSet;
-	if (type.Length()==0)
-		type.Copy(iDefaultCharSet);
-	
-	HBufC8* buf=HBufC8::NewLC(aString.Length());;
-	TPtrC16 remainingUnicode(aString);
-	TInt ret=KErrNone;
-	
-	if (IsUnicode(type))
-		{
-		TPtr8 resString(buf->Des());
-		CopyToEightBitDataL(resString,aString);
-		}
-	else	// other types
-		{ 
-		PrepareToConvertL(type);
-		TInt state=CCnvCharacterSetConverter::KStateDefault;
-		FOREVER
-			{
-			TPtr8 resString(buf->Des());
-			ret=iConverter->ConvertFromUnicode(resString,remainingUnicode,state);
-			if (ret<KErrNone)
-				{
-				User::Leave(KErrCharacterConversionError);	
-				break;
-				}
-			else
-				{
-				if (ret==KErrNone)
-					break;
-				buf->ReAllocL(buf->Length()+ret);
-				}
-			remainingUnicode.Set(remainingUnicode.Right(ret));
-			}
-		}
-
-	return buf;
-	}
-
-void CScriptCharacterConverter::ConvertFromDefaultL(const TDesC8& aSrc,TDes16& aTrg)
-/**
-Converts aString from the default character to set to Unicode
-Should have been passed a big enough buffer for the conversion to happen in one go
-so leaves if the return value from the conversion is not 0
-*/
-	{
-	DoConvertFromDefaultToUnicodeL(aSrc,aTrg);
-	}
-
-void CScriptCharacterConverter::SetDefaultCharSet(const TDesC& aCharSet)
-/**
-Sets default character set.
-*/
-	{
-	iDefaultCharSet=aCharSet;
-	}
-
-void CScriptCharacterConverter::PrepareToConvertL(const TDesC& aNameToMatch)
-/**
-Prepares to convert.
-*/
-	{
-	TBuf8<KMaxCharacterTypeLength> type;
-	type.Copy(aNameToMatch);
-	const TInt charSetId=iConverter->ConvertStandardNameOfCharacterSetToIdentifierL(type,iFs);
-	if ((charSetId==0) || (iConverter->PrepareToConvertToOrFromL(charSetId,iFs)!=CCnvCharacterSetConverter::EAvailable))
-		User::Leave(KErrCharacterSetDoesNotExist);
-	}
-
-void CScriptCharacterConverter::CopyToEightBitDataL(TDes8& aTrg, const TDesC16& aSrc)
-/**
-Copies to eight bit.
-*/
-	{
-	TInt len=aSrc.Length()*2;
-	if (len>aTrg.MaxLength())
-		User::Leave(KErrOverflow);
-	TUint8* ptrToBuf=(TUint8*)aSrc.Ptr();
-	aTrg.Copy(ptrToBuf,len);
-	}	
-
-void CScriptCharacterConverter::CopyFromEightBitDataL(TDes16& aTrg, const TDesC8& aSrc)
-
-	{
-	TInt len=aSrc.Length()/2;	// if source length is odd then we can't use the last 8 bits anyway
-	if (len>aTrg.MaxLength())
-		User::Leave(KErrOverflow);
-	TUint16* ptrToBuf=(TUint16*)aSrc.Ptr();
-	aTrg.Copy(ptrToBuf,len);
-	}	
-
-void CScriptCharacterConverter::DoConvertFromDefaultToUnicodeL(const TDesC8& aSrc,TDes16& aTrg)
-/**
-Converts aString from the default character to set to unicode
-*/
-	{
-	__ASSERT_DEBUG(aSrc.Length()<=KRxBufferSize, User::Invariant());
-	__ASSERT_DEBUG(aTrg.MaxLength()>=KRxBufferSize, User::Invariant());
-
-	TInt state=CnvUtfConverter::KStateDefault;
-	TInt ret=KErrNone;
-	aTrg.SetLength(0);
-
-	if (IsUnicode(iDefaultCharSet))
-		CopyFromEightBitDataL(aTrg,aSrc);
-	else
-		{
-		PrepareToConvertL(iDefaultCharSet);
-		ret=iConverter->ConvertToUnicode(aTrg,aSrc,state);
-		}
-
-	if (ret!=KErrNone)
-		User::Leave(KErrCharacterConversionError);
-	}
-
-TBool CScriptCharacterConverter::IsUnicode(const TDesC& aType) const
-/**
-Checks if type is unicode.
-*/
-	{
-	if ((aType.CompareF(KUnicodeType1)==KErrNone) 
-		|| (aType.CompareF(KUnicodeType2)==KErrNone)
-		|| (aType.CompareF(KUnicodeType3)==KErrNone))
-		return ETrue;
-	return EFalse;
-	}
+// Copyright (c) 2003-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:
+// Character conversion class definitions
+// 
+//
+
+/**
+ @file Schconv.cpp 
+*/
+
+#include "SCHCONV.H"	
+#include <utf.h>
+#include "ND_STD.H"
+
+_LIT(KUnicodeType1,"ISO-10646-UCS-2");	//< 3 names for UNICODE
+_LIT(KUnicodeType2,"csUnicode");
+_LIT(KUnicodeType3,"UNICODE-1-1");
+_LIT(KIso88591Type1,"ISO-8859-1");	//< 3 name for ISO-8859-1
+
+/*
+_LIT(KIso88591Type2,"ISO_8859-1");
+_LIT(KIso88591Type3,"latin1");
+*/
+
+// CScriptCharacterConverter definitions 
+
+CScriptCharacterConverter* CScriptCharacterConverter::NewL()
+/**
+2 phased constructor for CScriptCharacterConverter, first phase.
+
+@exception Leaves if ConstructL() leaves, or not enough memory is available.
+@return a new CScriptCharacterConverter object.
+*/
+	{
+	CScriptCharacterConverter* r=new(ELeave) CScriptCharacterConverter();
+	CleanupStack::PushL(r);
+	r->ConstructL();
+	CleanupStack::Pop();
+	return r;
+	}
+
+CScriptCharacterConverter::CScriptCharacterConverter()
+	: iDefaultCharSet(KIso88591Type1)
+/**
+Private constructor for CScriptCharacterConverter, used in the first phase of construction.
+*/
+	{}
+
+void CScriptCharacterConverter::ConstructL()
+/**
+Instantiates member variables.
+
+@exception Leaves if file server Connect() fails or CCnvCharacterSetConverter::NewL() leaves.
+*/
+	{
+	User::LeaveIfError(iFs.Connect());
+	iConverter=CCnvCharacterSetConverter::NewL();
+	}
+
+CScriptCharacterConverter::~CScriptCharacterConverter()
+/**
+Destructor.
+Closes file server.
+Deletes iConverter.
+*/
+	{
+	iFs.Close();
+	delete iConverter;
+	}
+
+HBufC8* CScriptCharacterConverter::ConvertL(const TDesC8& aString, const TDesC& aCharSet)
+/**
+Calls ConvertLC.
+*/
+	{
+	HBufC8* buf;
+	buf=ConvertLC(aString,aCharSet);
+	CleanupStack::Pop(); //buf
+	return buf;
+	}
+
+HBufC8* CScriptCharacterConverter::ConvertL(const TDesC16& aString, const TDesC& aCharSet)
+/**
+Calls ConvertLC.
+*/
+	{
+	HBufC8* buf;
+	buf=ConvertLC(aString,aCharSet);
+	CleanupStack::Pop(); //buf
+	return buf;
+	}
+
+HBufC8* CScriptCharacterConverter::ConvertLC(const TDesC8& aString, const TDesC& aCharSet)
+/**
+Converts from ISO-8859-1 to aCharSet or if aCharSet is empty to the default
+character set. Returns the result in the form of an 8-bit buffer ready for sending
+to comm port. Leaves with KErrCharacterConversionError if there is an error in
+conversion.
+*/
+	{
+	TBuf<KMaxCharacterTypeLength> type=aCharSet;
+	if (type.Length()==0)
+		type.Copy(iDefaultCharSet);
+	
+	HBufC8* buf=HBufC8::NewLC(aString.Length()); // must put this on the cleanup stack first as we're leaving it there
+
+// first convert to unicode
+	if (iConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierIso88591,iFs)!=CCnvCharacterSetConverter::EAvailable)
+		User::Leave(KErrCharacterSetDoesNotExist);
+	HBufC16* buf16=HBufC16::NewLC(aString.Length());
+	TPtr16 unicode(buf16->Des());
+	TInt state=CCnvCharacterSetConverter::KStateDefault;
+	TInt ret=iConverter->ConvertToUnicode(unicode,aString,state);
+	if (ret!=KErrNone)	// this conversion is from ISO-8859-1 to unicode, so we know the length
+		User::Leave(KErrCharacterConversionError);	
+
+	if (IsUnicode(type))
+		{
+		TPtr8 resString(buf->Des());
+		CopyToEightBitDataL(resString,unicode);
+		}
+	else
+		{
+		PrepareToConvertL(type);
+		TPtrC16 remainingUnicode(unicode);
+		TInt state=CCnvCharacterSetConverter::KStateDefault;
+		FOREVER
+			{
+			TPtr8 resString(buf->Des());
+			ret=iConverter->ConvertFromUnicode(resString,remainingUnicode,state);
+			if (ret<KErrNone)
+				{
+				User::Leave(KErrCharacterConversionError);	
+				break;
+				}
+			else
+				{
+				if (ret==KErrNone)
+					break;
+				buf->ReAllocL(buf->Length()+ret);
+				}
+			remainingUnicode.Set(remainingUnicode.Right(ret));
+			}
+		}
+
+	CleanupStack::PopAndDestroy();						// buf16
+	return buf;
+	}
+		
+HBufC8* CScriptCharacterConverter::ConvertLC(const TDesC16& aString, const TDesC& aCharSet)
+/**
+Converts from UNICODE to aCharSet or if aCharSet is empty to the default
+character set. Returns the result in th form of an 8-bit buffer ready for sending
+to comm port. Leaves with KErrCharacterConversionError if there is an error in
+conversion.
+*/
+	{
+	TBuf<KMaxCharacterTypeLength> type=aCharSet;
+	if (type.Length()==0)
+		type.Copy(iDefaultCharSet);
+	
+	HBufC8* buf=HBufC8::NewLC(aString.Length());;
+	TPtrC16 remainingUnicode(aString);
+	TInt ret=KErrNone;
+	
+	if (IsUnicode(type))
+		{
+		TPtr8 resString(buf->Des());
+		CopyToEightBitDataL(resString,aString);
+		}
+	else	// other types
+		{ 
+		PrepareToConvertL(type);
+		TInt state=CCnvCharacterSetConverter::KStateDefault;
+		FOREVER
+			{
+			TPtr8 resString(buf->Des());
+			ret=iConverter->ConvertFromUnicode(resString,remainingUnicode,state);
+			if (ret<KErrNone)
+				{
+				User::Leave(KErrCharacterConversionError);	
+				break;
+				}
+			else
+				{
+				if (ret==KErrNone)
+					break;
+				buf->ReAllocL(buf->Length()+ret);
+				}
+			remainingUnicode.Set(remainingUnicode.Right(ret));
+			}
+		}
+
+	return buf;
+	}
+
+void CScriptCharacterConverter::ConvertFromDefaultL(const TDesC8& aSrc,TDes16& aTrg)
+/**
+Converts aString from the default character to set to Unicode
+Should have been passed a big enough buffer for the conversion to happen in one go
+so leaves if the return value from the conversion is not 0
+*/
+	{
+	DoConvertFromDefaultToUnicodeL(aSrc,aTrg);
+	}
+
+void CScriptCharacterConverter::SetDefaultCharSet(const TDesC& aCharSet)
+/**
+Sets default character set.
+*/
+	{
+	iDefaultCharSet=aCharSet;
+	}
+
+void CScriptCharacterConverter::PrepareToConvertL(const TDesC& aNameToMatch)
+/**
+Prepares to convert.
+*/
+	{
+	TBuf8<KMaxCharacterTypeLength> type;
+	type.Copy(aNameToMatch);
+	const TInt charSetId=iConverter->ConvertStandardNameOfCharacterSetToIdentifierL(type,iFs);
+	if ((charSetId==0) || (iConverter->PrepareToConvertToOrFromL(charSetId,iFs)!=CCnvCharacterSetConverter::EAvailable))
+		User::Leave(KErrCharacterSetDoesNotExist);
+	}
+
+void CScriptCharacterConverter::CopyToEightBitDataL(TDes8& aTrg, const TDesC16& aSrc)
+/**
+Copies to eight bit.
+*/
+	{
+	TInt len=aSrc.Length()*2;
+	if (len>aTrg.MaxLength())
+		User::Leave(KErrOverflow);
+	TUint8* ptrToBuf=(TUint8*)aSrc.Ptr();
+	aTrg.Copy(ptrToBuf,len);
+	}	
+
+void CScriptCharacterConverter::CopyFromEightBitDataL(TDes16& aTrg, const TDesC8& aSrc)
+
+	{
+	TInt len=aSrc.Length()/2;	// if source length is odd then we can't use the last 8 bits anyway
+	if (len>aTrg.MaxLength())
+		User::Leave(KErrOverflow);
+	TUint16* ptrToBuf=(TUint16*)aSrc.Ptr();
+	aTrg.Copy(ptrToBuf,len);
+	}	
+
+void CScriptCharacterConverter::DoConvertFromDefaultToUnicodeL(const TDesC8& aSrc,TDes16& aTrg)
+/**
+Converts aString from the default character to set to unicode
+*/
+	{
+	__ASSERT_DEBUG(aSrc.Length()<=KRxBufferSize, User::Invariant());
+	__ASSERT_DEBUG(aTrg.MaxLength()>=KRxBufferSize, User::Invariant());
+
+	TInt state=CnvUtfConverter::KStateDefault;
+	TInt ret=KErrNone;
+	aTrg.SetLength(0);
+
+	if (IsUnicode(iDefaultCharSet))
+		CopyFromEightBitDataL(aTrg,aSrc);
+	else
+		{
+		PrepareToConvertL(iDefaultCharSet);
+		ret=iConverter->ConvertToUnicode(aTrg,aSrc,state);
+		}
+
+	if (ret!=KErrNone)
+		User::Leave(KErrCharacterConversionError);
+	}
+
+TBool CScriptCharacterConverter::IsUnicode(const TDesC& aType) const
+/**
+Checks if type is unicode.
+*/
+	{
+	if ((aType.CompareF(KUnicodeType1)==KErrNone) 
+		|| (aType.CompareF(KUnicodeType2)==KErrNone)
+		|| (aType.CompareF(KUnicodeType3)==KErrNone))
+		return ETrue;
+	return EFalse;
+	}