phoneengine/PhoneCntFinder/ContactService/src/tphcnttxttospeech.cpp
changeset 0 5f000ab63145
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneengine/PhoneCntFinder/ContactService/src/tphcnttxttospeech.cpp	Mon Jan 18 20:18:27 2010 +0200
@@ -0,0 +1,219 @@
+/*
+* Copyright (c) 2006 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:  Constructs text to speech descriptor.
+*
+*/
+
+
+#include "tphcnttxttospeech.h"
+#include "mphcntcontactfields.h"
+
+// Separator between lastname/firstname for TTS text.
+_LIT( KPhCntTtsNamesDelimeter, " " );
+
+// Number of languages that use lastname-firstname order
+const TInt KPhCntTtsNumberOfSwappedLanguages = 7;
+
+// Languages which use lastname-firstname order
+const TLanguage KPhCntTtsSwappedLanguages[KPhCntTtsNumberOfSwappedLanguages] = 
+    {
+    ELangHungarian,       // 17
+    ELangTaiwanChinese,   // 29
+    ELangHongKongChinese, // 30
+    ELangPrcChinese,      // 31
+    ELangJapanese,		  // 32
+    ELangKorean,          // 65
+    ELangVietnamese       // 96
+    };
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+TPhCntTxtToSpeech::TPhCntTxtToSpeech(
+    const TDesC& aFirstName,
+    const TDesC& aSecondName,
+    const TDesC& aLastName,
+    const TDesC& aCompanyName,
+    const TDesC& aFirstNamePronunciation,
+    const TDesC& aLastNamePronunciation,
+    const TDesC& aCompanyNamePronunciation,
+    TLanguage aCurrentLanguage ) :
+    iFirstName( aFirstName ),
+    iSecondName( aSecondName ),
+    iLastName( aLastName ),
+    iCompanyName( aCompanyName ),
+    iFirstNamePronunciation( aFirstNamePronunciation ),
+    iLastNamePronunciation( aLastNamePronunciation ),
+    iCompanyNamePronunciation( aCompanyNamePronunciation ),
+    iCurrentLanguage( aCurrentLanguage )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// Constructs text to speech descriptor.
+// ---------------------------------------------------------------------------
+//
+void TPhCntTxtToSpeech::GetTextToSpeechL( HBufC*& aTxtToSpeech ) const
+    {
+    aTxtToSpeech = AllocAndTrimL( iSecondName );
+    
+    // Try contact name (first & last name).
+    if ( !aTxtToSpeech )
+        {
+        HBufC* trimmedFirstName = GetTrimmedNameLC( 
+            iFirstName, iFirstNamePronunciation );
+            
+        HBufC* trimmedLastName = GetTrimmedNameLC( 
+            iLastName, iLastNamePronunciation );
+
+        // Determine order.
+        const TBool swapNameOrder = SwapNameOrder();
+
+        HBufC* firstComponent = trimmedFirstName;
+        HBufC* lastComponent = trimmedLastName;
+        if ( swapNameOrder )
+            {
+            firstComponent = trimmedLastName;
+            lastComponent = trimmedFirstName;
+            }
+
+        // Calculate length.
+        const TInt totalLength( 
+            CalculateTxtToSpeechLength( firstComponent, lastComponent ) );
+        
+        // Compose.
+        if ( totalLength )
+            {
+            aTxtToSpeech = HBufC::NewL( totalLength );
+            TPtr ptr = aTxtToSpeech->Des();
+
+            if ( firstComponent )
+                {
+                ptr.Append( *firstComponent );
+                if ( lastComponent )
+                    {
+                    ptr.Append( KPhCntTtsNamesDelimeter );
+                    }
+                }
+            if ( lastComponent )
+                {
+                ptr.Append( *lastComponent );
+                }
+            }
+
+        CleanupStack::PopAndDestroy( trimmedLastName );
+        CleanupStack::PopAndDestroy( trimmedFirstName );
+        }
+
+    // Try company name.
+    if ( !aTxtToSpeech )
+        {
+        aTxtToSpeech = AllocAndTrimL( iCompanyNamePronunciation );
+        if( !aTxtToSpeech ) 
+            {
+            aTxtToSpeech = AllocAndTrimL( iCompanyName );
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Copies the text and trims it.
+// ---------------------------------------------------------------------------
+//    
+HBufC* TPhCntTxtToSpeech::AllocAndTrimL( const TDesC& aText ) const
+    {
+    HBufC* result = NULL;
+
+    if( aText.Length() > 0 )
+        {
+        result = aText.AllocL();
+        TPtr ptr = result->Des();
+        ptr.Trim();
+        if ( !ptr.Length() )
+            {
+            delete result;
+            result = NULL;
+            }
+        }
+        
+    return result;
+    }
+    
+// -----------------------------------------------------------------------------
+// Swaps name order depending on current language.
+// -----------------------------------------------------------------------------
+//
+TBool TPhCntTxtToSpeech::SwapNameOrder() const
+    {
+    TBool result = EFalse;
+    for ( TInt index = 0; index < KPhCntTtsNumberOfSwappedLanguages; index++ )
+        {
+        if ( KPhCntTtsSwappedLanguages[ index ] == iCurrentLanguage )
+            {
+            result = ETrue;
+            index = KPhCntTtsNumberOfSwappedLanguages;
+            }
+        }
+
+    return result;
+    }
+    
+// -----------------------------------------------------------------------------
+// Takes suitable name, copies and trims it.
+// -----------------------------------------------------------------------------
+//  
+HBufC* TPhCntTxtToSpeech::GetTrimmedNameLC( 
+    const TDesC& aWritenName, 
+    const TDesC& aNamePronunciation ) const
+    {
+    HBufC* trimmedName = AllocAndTrimL( aNamePronunciation );
+    if ( !trimmedName )
+        {
+        trimmedName = AllocAndTrimL( aWritenName );
+        }
+    CleanupStack::PushL( trimmedName );
+    return trimmedName;
+    }
+
+// -----------------------------------------------------------------------------
+// Calculates the length of text to speech string.
+// -----------------------------------------------------------------------------
+//
+TInt TPhCntTxtToSpeech::CalculateTxtToSpeechLength( 
+    const HBufC* const aFirstComponent, 
+    const HBufC* const aLastComponent ) const
+    {
+    TInt totalLength = 0;
+    if( aFirstComponent && aLastComponent ) 
+        {
+        totalLength += KPhCntTtsNamesDelimeter().Length();
+        }
+    
+    if( aFirstComponent )
+        {
+        totalLength += aFirstComponent->Length();
+        }
+        
+    if( aLastComponent )
+        {
+        totalLength += aLastComponent->Length();
+        }
+        
+    return totalLength;
+    }
+
+//  End of File