fep/aknfep/src/AknFepUiInputStateCandidateBaseChinesePhrase.cpp
changeset 40 2cb9bae34d17
parent 31 f1bdd6b078d1
child 49 37f5d84451bd
--- a/fep/aknfep/src/AknFepUiInputStateCandidateBaseChinesePhrase.cpp	Tue Jul 06 14:38:41 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1120 +0,0 @@
-/*
-* Copyright (c) 2002-2005 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:            Implementation of candidate base chinese phrase state
-*
-*/
-
-
-
-
-
-
-
-
-
-
-
-
-#include "AknFepUiInputStateCandidateBaseChinesePhrase.h"
-#include "AknFepUiCtrlContainerChinese.h"
-#include "AknFepUICtrlCandidatePane.h"
-#include "AknFepUIManagerStateInterface.h"  //MAknFepUIManagerStateInterface
-#include "AknFepManagerUIInterface.h"
-#include "AknFepManager.h"                  //FepMan flag
-
-#include "AknFepUICtrlInputPane.h"
-#include "AknFepUICtrlPinyinPopup.h"
-#include <PtiEngine.h>                         //CPtiEngine
-
-#include <aknnotewrappers.h>                //CAknInformationNote 
-
-#include "AknFepUICtrlPinyinPopup.h"        //Pinyin phrase
-#include "aknfepuictrleditpane.h"           //pinyin phrase creation
-#include "aknfepzhuyinconvertion.h"
-#include "aknfepzhuyinkeyhandlerinterface.h"
-#include "AknFepZhuyinAnalyserDb.h"
-#include "AknFepZhuyinAnalyser.h"
-
-_LIT( KPinyinListSeparator, "'" );
-_LIT( KPinyinStar, "*" );
-_LIT( KPinyinTone0ValidStr, "\x02C9");
-_LIT( KPinyinTone1ValidStr, "\x02CA");
-_LIT( KPinyinTone2ValidStr, "\x02C7");
-_LIT( KPinyinTone3ValidStr, "\x02CB");
-_LIT( KPinyinTone4ValidStr, "\x02D9");
-
-const TText KPinyinTone0Valid = 0x02C9;
-const TText KPinyinTone1Valid = 0x02CA;
-const TText KPinyinTone2Valid = 0x02C7;
-const TText KPinyinTone3Valid = 0x02CB;
-const TText KPinyinTone4Valid = 0x02D9;
-const TInt KKey0Code = 48;
-const TInt KKey2Code = 50;
-const TInt KKey3Code = 51;
-const TInt KKey4Code = 52;
-const TInt KKey5Code = 53;
-const TInt KKey6Code = 54;
-const TInt KKey7Code = 55;
-const TInt KKey8Code = 56;
-const TInt KKey9Code = 57;
-
-const TInt KMaxKeystrokeCount = 100;
-const TInt KMaxPinyinLength = 60;
-
-const TInt KStarCount1 = 1;
-const TInt KStarCount2 = 2;
-const TInt KStarCount3 = 3;
-const TInt KStarCount4 = 4;
-const TInt KStarCount5 = 5;
-
-const TUint16 KSegment = 0x0020;
-
-_LIT( KKey0Num, "0");
-_LIT( KKey1Num, "1");
-_LIT( KKey2Num, "2");
-_LIT( KKey3Num, "3");
-_LIT( KKey4Num, "4");
-_LIT( KKey5Num, "5");
-_LIT( KKey6Num, "6");
-_LIT( KKey7Num, "7");
-_LIT( KKey8Num, "8");
-_LIT( KKey9Num, "9");
-_LIT( KPinyinSysSeparator, "\x002E");
-
-TAknFepInputStateCandidateBaseChinesePhrase::TAknFepInputStateCandidateBaseChinesePhrase(
-    MAknFepUIManagerStateInterface* aOwner,
-    MAknFepUICtrlContainerChinese* aUIContainer)
-    :TAknFepInputStateCandidateBase(aOwner, aUIContainer)
-    {
-    }
-
-void TAknFepInputStateCandidateBaseChinesePhrase::HandleCommandL(
-    TInt aCommandId )
-    {
-    MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
-    // it may be one of the 'valid' numbers..
-    MAknFepUICtrlCandidatePane* candidatePane =
-        UIContainer()->CandidatePane();
-    MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow();
-    TPtrC text = candidatePane->CurrentPhraseCandidate();
-    switch ( aCommandId )
-        {
-        // Handle the event frome command.
-        case EAknSoftkeyCancel:
-            //  case (TUint16)EAknSoftkeyCancel: //the Cancle in soft CBA
-            TAknFepInputStateChineseBase::HandleCommandL( aCommandId );
-            break;
-        case EAknSoftkeySelect:
-            //case (TUint16)EAknSoftkeySelect: //the Selected in soft CBA
-            HandleCommitL();
-            break;
-        default:
-            TAknFepInputStateCandidateBase::HandleCommandL( aCommandId );
-            break;
-        }
-    }
-
-TBool TAknFepInputStateCandidateBaseChinesePhrase::HandleKeyL( TInt aKey,
-    TKeyPressLength aLength )
-    {
-    MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
-    if ( aKey == EPtiKeyStar )
-        {
-        if ( fepMan->IsEnableKeyStar() )
-            {
-            iOwner->FepMan()->TryCloseUiL();
-            iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone );
-            return EFalse;
-            }
-        else
-            {
-            iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone );
-            return ETrue;
-            }
-        }
-    if ( !(HandleVerticalNavigation( aKey, aLength )
-        || HandleHorizontalNavigation( aKey )) )
-        {
-        // it may be one of the 'valid' numbers..
-        TInt index = MapKeyToIndex( aKey );
-        MAknFepUICtrlCandidatePane* candidatePane =
-            UIContainer()->CandidatePane();
-        MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow();
-
-        TBool state = ETrue;
-        if ( popup->IsChangeStatet() && aLength == ELongKeyPress )
-            {
-            state = EFalse;
-            }
-        else
-            {
-            popup->SetChangeState( EFalse );
-            }
-        if ( state )
-            {
-            if ( candidatePane->SelectIndex( index, EFalse ) || aKey
-                == EKeyOK || aKey == EKeyCBA1 )
-                {
-                HandleCommitL();
-                }
-            }
-        }
-    return ETrue;
-    }
-
-TBool TAknFepInputStateCandidateBaseChinesePhrase::HandleHorizontalNavigation(TInt aKey)
-    {
-    MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane();
-    TBool response = EFalse;
-
-    // Do navigation...
-    if (aKey == EKeyLeftArrow)
-        {
-//        if (candidatePane->SelectedIndex() == 0 && 
-//            candidatePane->IsFirstPage() )
-//            {
-//            return ETrue;
-//            }
-        
-        if(!candidatePane->SelectPrev())
-            {
-//            candidatePane->PreviousCandidatePage();
-            candidatePane->SetCandidateBuffer();
-            candidatePane->SelectLastPhrase();
-            }
-        response = ETrue;
-        }
-    else if (aKey == EKeyRightArrow)
-        {
-//        if (candidatePane->IsLastPage() && 
-//            (candidatePane->SelectedIndex() == candidatePane->VisibleCandidateCount() - 1))
-//            {
-//            return ETrue;
-//            }  
-                    
-        if(!candidatePane->SelectNext())
-            {
-//            candidatePane->NextCandidatePage();
-            candidatePane->SetCandidateBuffer();
-            candidatePane->SelectFirstPhrase();
-            }
-        response = ETrue;
-        }
-        
-    if (response)
-        {
-        UpdateIndicator();
-        }   
-             
-    return response;
-    }
-TBool TAknFepInputStateCandidateBaseChinesePhrase::HandleVerticalNavigation(TInt aKey)
-    {
-    MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane();
-    MZhuyinKeyHandler* zhuyinKeyHandler = iOwner->ZhuyinKeyHandler();
-    
-    if (aKey == EKeyDownArrow)
-        {
-        if (candidatePane->IsLastPage())
-            {
-            return ETrue;
-            }
-        if ( iState != EPredictiveCandidate &&
-        		iState != EPredictiveInput )
-			{
-			if (candidatePane->NeedGetNewCandidatePage() )
-				{
-				if ( !iOwner->PtiEngine()->NextCandidatePage() )
-                {
-                if ( candidatePane->IsLastPage() )
-                    {
-                    iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone );
-                    return ETrue;
-                    }
-                }
-				else
-					{
-					CDesCArrayFlat* phraseCandidates =
-							candidatePane->CandidateArray();
-					RPointerArray<HBufC> list;
-					TRAP_IGNORE(
-					GetNewCandidatesL(iOwner->PtiEngine()->CandidatePage(), list);
-					for (TInt i = 0; i < list.Count(); ++i)
-                        {
-						phraseCandidates->AppendL( *(list[i]));
-						}
-					list.ResetAndDestroy(););
-					}
-				}          
-        	}       
-        candidatePane->NextCandidatePage();
-        }
-    else if (aKey == EKeyUpArrow)
-        {
-        if ( candidatePane->IsFirstPage() && iState != EPredictiveCandidate )
-            {
-            zhuyinKeyHandler->SetState(0);
-            iOwner->ChangeState(EZhuyinSequenceEdit);
-            return EFalse;
-            }
-        else if ( candidatePane->IsFirstPage() )
-        	{
-        	return ETrue;
-        	}
-        candidatePane->PreviousCandidatePage();
-        }
-    else
-        {
-        return EFalse;
-        }
-    candidatePane->SetCandidateBuffer();
-    candidatePane->SelectFirstPhrase();
-    UpdateIndicator();    
-    return ETrue;
-    }
-
-TBool TAknFepInputStateCandidateBaseChinesePhrase::HandleVerticalNavigation(TInt aKey, TKeyPressLength aLength)
-    {
-    MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane();
-    MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow();
-    
-    if (aKey == EKeyDownArrow)
-        {
-        TBool state = ETrue;
-        if ( popup->IsChangeStatet() && aLength == ELongKeyPress )
-            {
-            state = EFalse;
-            }
-        else
-            {
-            popup->SetChangeState( EFalse );
-            }
-        if ( state )
-            {
-            if (candidatePane->IsLastPage())
-                {
-                return ETrue;
-                }       
-            if ( iState != EPredictiveCandidate &&
-            		iState != EPredictiveInput )
-            	{
-            	if (candidatePane->NeedGetNewCandidatePage() )
-					{
-                if ( !iOwner->PtiEngine()->NextCandidatePage( ) )
-                    {
-                    if ( candidatePane->IsLastPage() )
-                        {
-                        iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone );
-                        return ETrue;
-                        }
-                    }
-                else
-                    {
-                    CDesCArrayFlat* phraseCandidates =
-                        candidatePane->CandidateArray( );
-                    RPointerArray<HBufC> list;
-                    TRAP_IGNORE(
-                    GetNewCandidatesL( iOwner->PtiEngine()->CandidatePage( ), list );
-                    for (TInt i = 0; i < list.Count( ); ++i )
-                        {
-                        phraseCandidates->AppendL( *(list[i]) );
-                        }
-						list.ResetAndDestroy(););
-						}
-					}
-				}     
-            candidatePane->NextCandidatePage();
-            }
-        }
-    else if (aKey == EKeyUpArrow)
-        {
-        if (candidatePane->IsFirstPage() )
-            {
-            return ETrue;   
-            }       
-        candidatePane->PreviousCandidatePage();
-        }
-    else
-        {
-        return EFalse;
-        }
-    candidatePane->SetCandidateBuffer();
-    candidatePane->SelectFirstPhrase();
-    UpdateIndicator();    
-    return ETrue;
-    }
-
-void TAknFepInputStateCandidateBaseChinesePhrase::UpdateIndicator()
-    {
-    CPtiEngine* ptiengine = iOwner->PtiEngine();
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();        
-    MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane();
-        
-    if (candidatePane->IsFirstPage())
-        {
-        uiContainer->CandidatePane()->ShowUpScrollArrows(EFalse);    
-        }
-    else
-        {
-        uiContainer->CandidatePane()->ShowUpScrollArrows(ETrue);    
-        }
-   
-   if (candidatePane->IsLastPage())
-       {
-       uiContainer->CandidatePane()->ShowDownScrollArrows(EFalse);     
-       }
-   else
-   	   {
-   	   uiContainer->CandidatePane()->ShowDownScrollArrows(ETrue);      
-   	   }
-    }    
-        
-// ---------------------------------------------------------
-// get the valid keystroke
-// ---------------------------------------------------------
-//
-void TAknFepInputStateCandidateBaseChinesePhrase::GetValidkeystrokeL( )
-    {
-    TInt keyCode;
-    TInt stringBeforeLength = 0;
-    TInt stringAfterLength = 0;
-    TBuf<1> keystroke;
-    TBuf<1> keystrokeTmp;
-
-    CPtiEngine* ptiengine = iOwner->PtiEngine( );
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer( );
-    MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow( );
-
-    CDesCArrayFlat* keystrokeArray = popup->KeystrokeArray( );
-    CDesCArrayFlat* inEffectKeystrokeArray = popup->InEffectKeystrokeArray( );
-
-    inEffectKeystrokeArray->Reset( );
-    inEffectKeystrokeArray->Compress( );
-
-    for (TInt i = 0; i < keystrokeArray->Count( ); ++i )
-        {
-        stringBeforeLength = 0;
-        stringAfterLength = 0;
-        keystroke.Copy( keystrokeArray->MdcaPoint( i ) );
-        if ( 0 == i )
-            {
-            if ( ( 0 == keystroke.Compare( KPinyinStar ) ) || ( 0
-                == keystroke.Compare( KPinyinListSeparator ) ) )
-                {
-                return;
-                }
-            }
-        else
-            {
-            keystrokeTmp.Copy( keystrokeArray->MdcaPoint( i - 1 ) );
-            if ( 0 == keystroke.Compare( KPinyinListSeparator ) )
-                {
-                if ( ( 0 != keystrokeTmp.Compare( KPinyinListSeparator ) )
-                    && ( 0 != keystrokeTmp.Compare( KPinyinStar ) ) )
-                    {
-                    inEffectKeystrokeArray->AppendL( keystroke );
-                    }
-                return;
-                }
-            }
-
-        if ( i >= 1 )
-            {
-            keystrokeTmp.Copy( keystrokeArray->MdcaPoint( i - 1 ) );
-            if ( ( 0 == keystroke.Compare( KPinyinStar ) ) && ( 0
-                == keystrokeTmp.Compare( KPinyinStar ) ) )
-                {
-                inEffectKeystrokeArray->AppendL( keystroke );
-                ptiengine->IncrementToneMark( ETrue );
-                }
-            else if ( ( 0 != keystrokeTmp.Compare( KPinyinStar ) ) && ( 0
-                == keystroke.Compare( KPinyinStar ) ) )
-                {
-                inEffectKeystrokeArray->AppendL( keystroke );
-                ptiengine->IncrementToneMark( ETrue );
-                }
-            else if ( ( 0 != keystroke.Compare( KPinyinStar ) ) && ( 0
-                == keystrokeTmp.Compare( KPinyinStar ) ) )
-                {
-                if ( !CheckSpellingOfPtiEngine( ) )
-                    {
-                    ptiengine->DeleteKeyPress( );
-                    DeleteTonMarkFromInEffectKeytrokeArray( );
-                    }
-                return;
-                }
-            }
-
-        if ( 0 != keystroke.Compare( KPinyinStar ) )
-            {
-
-            inEffectKeystrokeArray->AppendL( keystrokeArray->MdcaPoint( i ) );
-            GetKeystrokeCode( keyCode, keystroke );
-            stringBeforeLength = ptiengine->GetPhoneticSpelling(1).Length( );
-            stringAfterLength = ptiengine->AppendKeyPress((TPtiKey)keyCode).Length( );
-            if ( stringBeforeLength == stringAfterLength )
-                {
-                inEffectKeystrokeArray->Delete( inEffectKeystrokeArray->Count( )
-                    - 1 );
-                inEffectKeystrokeArray->Compress( );
-                return;
-                }
-            if ( 0 == keystroke.Compare( KPinyinListSeparator ) )
-                {
-                return;
-                }
-
-            if ( !CheckSpellingOfPtiEngine( ) )
-                {
-                ptiengine->DeleteKeyPress( );
-                inEffectKeystrokeArray->Delete( i );
-                return;
-                }
-            }
-        else
-            {
-            if ( i == keystrokeArray->Count( ) - 1 )
-                {
-                if ( !CheckSpellingOfPtiEngine( ) )
-                    {
-                    ptiengine->DeleteKeyPress( );
-                    DeleteTonMarkFromInEffectKeytrokeArray( );
-                    return;
-                    }
-                }
-            }
-        }
-    }
-
-// ---------------------------------------------------------
-// Check the Spelling of PtiEngine.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStateCandidateBaseChinesePhrase::CheckSpellingOfPtiEngine( )
-    {
-    CPtiEngine* ptiengine = iOwner->PtiEngine( );
-    TInt count = ptiengine->PhoneticSpellingCount( );
-
-    for (TInt i = 1; i <= count; ++i )
-        {
-        TPtrC spelling = ptiengine->GetPhoneticSpelling( i );
-        if ( KErrNotFound == spelling.Find( KPinyinListSeparator ) )
-            {
-            return ETrue;
-            }
-        }
-
-    return EFalse;
-    }
-
-void TAknFepInputStateCandidateBaseChinesePhrase::GetKeystrokeCode(
-    TInt& aKey, const TDesC& aKeystroke )
-    {
-    if ( 0 == aKeystroke.Compare( KKey0Num ) )
-        {
-        aKey = KKey0Code;
-        }
-    else if ( 0 == aKeystroke.Compare( KKey1Num ) )
-        {
-        aKey = KKey0Code;
-        }
-    else if ( 0 == aKeystroke.Compare( KKey2Num ) )
-        {
-        aKey = KKey2Code;
-        }
-    else if ( 0 == aKeystroke.Compare( KKey3Num ) )
-        {
-        aKey = KKey3Code;
-        }
-    else if ( 0 == aKeystroke.Compare( KKey4Num ) )
-        {
-        aKey = KKey4Code;
-        }
-    else if ( 0 == aKeystroke.Compare( KKey5Num ) )
-        {
-        aKey = KKey5Code;
-        }
-    else if ( 0 == aKeystroke.Compare( KKey6Num ) )
-        {
-        aKey = KKey6Code;
-        }
-    else if ( 0 == aKeystroke.Compare( KKey7Num ) )
-        {
-        aKey = KKey7Code;
-        }
-    else if ( 0 == aKeystroke.Compare( KKey8Num ) )
-        {
-        aKey = KKey8Code;
-        }
-    else if ( 0 == aKeystroke.Compare( KKey9Num ) )
-        {
-        aKey = KKey9Code;
-        }
-    else if ( 0 == aKeystroke.Compare( KPinyinListSeparator ) )
-        {
-        aKey = KKey0Code;
-        }
-
-    }
-// ---------------------------------------------------------
-// clear the ptiengine keystroke;
-// ---------------------------------------------------------
-//
-void TAknFepInputStateCandidateBaseChinesePhrase::ClearPtiEngineKeystroke( )
-    {
-    CDesCArrayFlat* inEffectKeystrokeArray = UIContainer()->PinyinPopupWindow()->InEffectKeystrokeArray( );
-
-    for (TInt i = 0; i < KMaxKeystrokeCount; ++i )
-        {
-        iOwner->PtiEngine()->DeleteKeyPress( );
-        }
-    inEffectKeystrokeArray->Reset( );
-    inEffectKeystrokeArray->Compress( );
-    }
-
-// ---------------------------------------------------------
-// delete tonmark from in effect keystroke array
-// ---------------------------------------------------------
-//
-void TAknFepInputStateCandidateBaseChinesePhrase::DeleteTonMarkFromInEffectKeytrokeArray( )
-    {
-    MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow();
-    CDesCArrayFlat* inEffectKeystrokeArray = popup->InEffectKeystrokeArray();
-    TInt count = inEffectKeystrokeArray->Count() - 1;
-    TInt checkCount = 0;
-    for ( TInt i = count; i > 0 ; i-- )
-      {
-      if ( 0 == inEffectKeystrokeArray->MdcaPoint( i ).Compare( KPinyinStar ) )
-        {
-        inEffectKeystrokeArray->Delete( i );
-        inEffectKeystrokeArray->Compress();
-        checkCount = checkCount + 1;
-        }
-      else
-        {
-        break;
-        }
-      }
-    
-    if ( checkCount > 0 )
-        {
-        if ( inEffectKeystrokeArray->Count() > 0 )
-            {
-            inEffectKeystrokeArray->Delete( inEffectKeystrokeArray->Count() -1 );
-            }
-        iOwner->PtiEngine()->DeleteKeyPress();
-        }
-    }
-
-// ---------------------------------------------------------
-// get the valid keystroke
-// ---------------------------------------------------------
-//
-void TAknFepInputStateCandidateBaseChinesePhrase::CheckTonemarkL( )
-    {
-    CPtiEngine* ptiengine = iOwner->PtiEngine( );
-    MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow( );
-    CDesCArrayFlat* inEffectKeystrokeArray = popup->InEffectKeystrokeArray( );
-    CDesCArrayFlat* spelling = popup->OptimizeSpelling( );
-
-    TInt keystrokeStarCount = 0;
-    TInt validSpellCount = 0;
-    TInt i = 0;
-    TBuf<1> buf;
-
-    TBuf<1> lastSpellTonemark;
-    TBuf<1> tonmarkBuf0;
-    TBuf<1> tonmarkBuf1;
-    TBuf<1> tonmarkBuf2;
-    TBuf<1> tonmarkBuf3;
-    TBuf<1> tonmarkBuf4;
-    TBuf<KMaxPinyinLength> spellBuf;
-    tonmarkBuf0.Append( KPinyinTone0Valid );
-    tonmarkBuf1.Append( KPinyinTone1Valid );
-    tonmarkBuf2.Append( KPinyinTone2Valid );
-    tonmarkBuf3.Append( KPinyinTone3Valid );
-    tonmarkBuf4.Append( KPinyinTone4Valid );
-
-    if ( 0 == inEffectKeystrokeArray->Count( ) )
-        {
-        return;
-        }
-
-    for (i = inEffectKeystrokeArray->Count( ) - 1; i >= 0; i-- )
-        {
-        if ( 0 == inEffectKeystrokeArray->MdcaPoint( i ).Compare( KPinyinStar ) )
-            {
-            keystrokeStarCount = keystrokeStarCount + 1;
-            }
-        else
-            {
-            break;
-            }
-        }
-
-    if ( 0 == keystrokeStarCount )
-        {
-        return;
-        }
-
-    switch ( keystrokeStarCount )
-        {
-        case KStarCount1:
-            buf.Copy( tonmarkBuf0 );
-            break;
-        case KStarCount2:
-            buf.Copy( tonmarkBuf1 );
-            break;
-        case KStarCount3:
-            buf.Copy( tonmarkBuf2 );
-            break;
-        case KStarCount4:
-            buf.Copy( tonmarkBuf3 );
-            break;
-        case KStarCount5:
-            buf.Copy( tonmarkBuf4 );
-            break;
-        default:
-            break;
-        }
-
-    spelling->Reset( );
-    spelling->Compress( );
-
-    ptiengine->GetPhoneticSpellingsL( *spelling );
-
-    for (i = 0; i < spelling->Count( ); ++i )
-        {
-        spellBuf.Copy( spelling->MdcaPoint( i ) );
-        TInt position = spellBuf.Find( KPinyinListSeparator );
-        if ( KErrNotFound == position )
-            {
-            lastSpellTonemark.Copy( spellBuf.Mid( spellBuf.Length( ) - 1, 1 ) );
-            if ( 0 == lastSpellTonemark.Compare( buf ) )
-                {
-                validSpellCount = 1;
-                break;
-                }
-            }
-        }
-
-    spelling->Reset( );
-    spelling->Compress( );
-
-    if ( validSpellCount > 0 )
-        {
-        return;
-        }
-
-    for (i = 0; i < keystrokeStarCount; ++i )
-        {
-        inEffectKeystrokeArray->Delete( inEffectKeystrokeArray->Count( ) -1 );
-        }
-
-    ptiengine->DeleteKeyPress( );
-
-    if ( inEffectKeystrokeArray->Count( ) > 0 )
-        {
-        inEffectKeystrokeArray->Delete( inEffectKeystrokeArray->Count( ) - 1 );
-        }
-    inEffectKeystrokeArray->Compress( );
-
-    ptiengine->DeleteKeyPress( );
-
-    while (inEffectKeystrokeArray->Count( ) > 0 )
-        {
-        spelling->Reset( );
-        spelling->Compress( );
-        ptiengine->GetPhoneticSpellingsL( *spelling );
-
-        for (i = 0; i < spelling->Count( ); ++i )
-            {
-            if ( KErrNotFound == spelling->MdcaPoint( i ).Find( KPinyinListSeparator ) )
-                {
-                spelling->Reset( );
-                spelling->Compress( );
-                return;
-                }
-            }
-        ptiengine->DeleteKeyPress( );
-        inEffectKeystrokeArray->Delete( inEffectKeystrokeArray->Count( ) - 1 );
-        }
-
-    spelling->Reset( );
-    spelling->Compress( );
-    }
-
-TBool TAknFepInputStateCandidateBaseChinesePhrase::IsValid( const TDesC& aDesC, TInt aCount )
-    {
-    TBool lastIsToneMark = EFalse;
-    TBool ret = ETrue;
-    TInt charCount = aCount;
-    for ( TInt i = 0; i < aDesC.Length(); i++ )
-        {
-        if ( ( aDesC.Mid( i, 1 ) == KPinyinSysSeparator ) ||
-             ( aDesC.Mid( i, 1 ) == KPinyinListSeparator ) ||
-             ( *aDesC.Mid( i , 1 ).Ptr() == KPinyinTone0Valid ) ||
-             ( *aDesC.Mid( i , 1 ).Ptr() == KPinyinTone1Valid ) ||
-             ( *aDesC.Mid( i , 1 ).Ptr() == KPinyinTone2Valid ) ||
-             ( *aDesC.Mid( i , 1 ).Ptr() == KPinyinTone3Valid ) ||
-             ( *aDesC.Mid( i , 1 ).Ptr() == KPinyinTone4Valid ) )
-            {
-            if ( lastIsToneMark && charCount <= 0 )
-                {
-                ret = EFalse;
-                }
-            lastIsToneMark = ETrue;
-            charCount--;
-            }
-        else
-            {
-            lastIsToneMark = EFalse;
-            }
-        }
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// TAknFepInputStateCandidateBaseChinesePhrase::HandleCommitL
-// Handle CBA1 or select event.
-// ---------------------------------------------------------------------------
-//
-void TAknFepInputStateCandidateBaseChinesePhrase::HandleCommitL()
-    {
-    // it may be one of the 'valid' numbers..
-    MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
-    CPtiEngine* ptiengine = iOwner->PtiEngine();
-    MAknFepUICtrlCandidatePane* candidatePane =
-        UIContainer()->CandidatePane();
-    MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow();
-    TPtrC text = candidatePane->CurrentPhraseCandidate();
-    if ( text.Length() )
-        {
-        //commit and show char in editor
-        if ( fepMan->IsFlagSet( CAknFepManager::EFlagEditorFull ) )
-            {
-            fepMan->ClearFlag( CAknFepManager::EFlagEditorFull );
-            iOwner->FepMan()->TryCloseUiL();
-            }
-        else
-            {
-            TInt i = 0;
-            CDesCArrayFlat* keystroke =
-                UIContainer()->PinyinPopupWindow()->KeystrokeArray();
-            if ( keystroke->Count() != 0 && keystroke->Count()
-                > text.Length() )
-                {
-                TBuf<KMaxKeystrokeCount> seq;
-                for (i = 0; i < keystroke->Count(); ++i )
-                    {
-                    seq.Append( keystroke->MdcaPoint( i ) );
-                    }
-                TInt count = 0;
-
-                TBufC<KMaxKeystrokeCount> buf1;
-                TPtr ptr1 = buf1.Des();
-                TBufC<KMaxKeystrokeCount> keyseqBuf;
-                TPtr ptr2 = keyseqBuf.Des();
-                TBuf<KMaxKeystrokeCount> ptr2Left;
-                ptr2.Copy( seq );
-                if ( ptiengine->SelectedPhoneticSpelling() == 1 )
-                	{
-                    ptr1 = ptiengine->GetPhoneticSpelling(1);
-                	}
-                else
-                	{
-                    UIContainer()->InputPane()->GetText( ptr1 );
-                	}
-                TInt pos = 0;
-                TInt len = 0;
-
-                CDesCArray
-                    * chineseCharacterArrayKeystroke =
-                        UIContainer()->PinyinPopupWindow()->ChooseChineseCharacterArrayKeystroke();
-                chineseCharacterArrayKeystroke->Reset();
-                for (i = 0; i < ptr1.Length() && count < text.Length()
-                    && ptr2.Length() != 0; i++ )
-                    {
-                    if ( ptr1.Mid( i, 1 ) == KPinyinSysSeparator || ptr1.Mid(
-                        i, 1 ) == KPinyinListSeparator )
-                        {
-                        pos = i - len - count;
-                        if ( pos < 0 )
-                            {
-                            pos = 0;
-                            }
-
-                        if ( pos == ptr2.Length() )
-                            {
-                            pos = ptr2.Length() - 1;
-                            }
-
-                        if ( ptr2.Mid( pos, 1 ) == KPinyinListSeparator )
-                            {
-                            i++;
-                            pos += 1;
-                            chineseCharacterArrayKeystroke->AppendL(
-                                ptr2.Left( pos ) );
-                            ptr2 = ptr2.Mid( pos );
-                            }
-                        else
-                            {
-                            chineseCharacterArrayKeystroke->AppendL(
-                                ptr2.Left( pos ) );
-                            ptr2 = ptr2.Mid( pos );
-                            }
-                        len += pos;
-                        count++;
-                        }
-                    else if ( *ptr1.Mid( i, 1 ).Ptr() == KPinyinTone0Valid )
-                        {
-                        pos = i + 1 - len - count;
-                        len += pos;
-                        ptr2Left.Zero();
-                        ptr2Left.Copy( ptr2.Left( pos - 1 ) );
-                        ptr2Left.Append( KPinyinTone0ValidStr );
-                        chineseCharacterArrayKeystroke->AppendL( ptr2Left );
-                        ptr2 = ptr2.Mid( pos );
-                        count++;
-                        }
-                    else if ( *ptr1.Mid( i, 1 ).Ptr() == KPinyinTone1Valid )
-                        {
-                        pos = i + 2 - len - count;
-                        len += pos - 1;
-                        ptr2Left.Zero();
-                        ptr2Left.Copy( ptr2.Left( pos - 2 ) );
-                        ptr2Left.Append( KPinyinTone1ValidStr );
-                        chineseCharacterArrayKeystroke->AppendL( ptr2Left );
-                        ptr2 = ptr2.Mid( pos );
-                        count++;
-                        }
-                    else if ( *ptr1.Mid( i, 1 ).Ptr() == KPinyinTone2Valid )
-                        {
-                        pos = i + 3 - len - count;
-                        len += pos - 2;
-                        ptr2Left.Zero();
-                        ptr2Left.Copy( ptr2.Left( pos - 3 ) );
-                        ptr2Left.Append( KPinyinTone2ValidStr );
-                        chineseCharacterArrayKeystroke->AppendL( ptr2Left );
-                        ptr2 = ptr2.Mid( pos );
-                        count++;
-                        }
-                    else if ( *ptr1.Mid( i, 1 ).Ptr() == KPinyinTone3Valid )
-                        {
-                        pos = i + 4 - len - count;
-                        len += pos - 3;
-                        ptr2Left.Zero();
-                        ptr2Left.Copy( ptr2.Left( pos - 4 ) );
-                        ptr2Left.Append( KPinyinTone3ValidStr );
-                        chineseCharacterArrayKeystroke->AppendL( ptr2Left );
-                        ptr2 = ptr2.Mid( pos );
-                        count++;
-                        }
-                    else if ( *ptr1.Mid( i, 1 ).Ptr() == KPinyinTone4Valid )
-                        {
-                        pos = i + 5 - len - count;
-                        len += pos - 4;
-                        ptr2Left.Zero();
-                        ptr2Left.Copy( ptr2.Left( pos - 5 ) );
-                        ptr2Left.Append( KPinyinTone4ValidStr );
-                        chineseCharacterArrayKeystroke->AppendL( ptr2Left );
-                        ptr2 = ptr2.Mid( pos );
-                        count++;
-                        }
-                    }
-
-                TInt totalCount = 0;
-                for (i = 0; i < ptr1.Length(); i++ )
-                    {
-                    if ( (ptr1.Mid( i, 1 ) == KPinyinSysSeparator)
-                        || (ptr1.Mid( i, 1 ) == KPinyinListSeparator)
-                        || (*ptr1.Mid( i, 1 ).Ptr() == KPinyinTone0Valid)
-                        || (*ptr1.Mid( i, 1 ).Ptr() == KPinyinTone1Valid)
-                        || (*ptr1.Mid( i, 1 ).Ptr() == KPinyinTone2Valid)
-                        || (*ptr1.Mid( i, 1 ).Ptr() == KPinyinTone3Valid)
-                        || (*ptr1.Mid( i, 1 ).Ptr() == KPinyinTone4Valid) )
-                        {
-                        totalCount++;
-                        }
-                    }
-
-                if ( !((ptr1.Right( 1 ) == KPinyinListSeparator)
-                    || (*ptr1.Right( 1 ).Ptr() == KPinyinTone0Valid)
-                    || (*ptr1.Right( 1 ).Ptr() == KPinyinTone1Valid)
-                    || (*ptr1.Right( 1 ).Ptr() == KPinyinTone2Valid)
-                    || (*ptr1.Right( 1 ).Ptr() == KPinyinTone3Valid)
-                    || (*ptr1.Right( 1 ).Ptr() == KPinyinTone4Valid)) )
-                    {
-                    totalCount++;
-                    }
-
-                if ( totalCount > text.Length() )
-                    {
-                    CDesCArray
-                        * chineseCharacterArray =
-                            UIContainer()->PinyinPopupWindow()->ChooseChineseCharacterArray();
-                    chineseCharacterArray->Reset();
-                    for (i = 0; i < text.Length(); i++ )
-                        {
-                        chineseCharacterArray->AppendL( text.Mid( i, 1 ) );
-                        }
-                    //set key stroke
-                    CDesCArray* keyStroke =
-                        UIContainer()->PinyinPopupWindow()->KeystrokeArray();
-                    keyStroke->Reset();
-                    for (i = 0; i < ptr2.Length(); i++ )
-                        {
-                        keyStroke->AppendL( ptr2.Mid( i, 1 ) );
-                        }
-                    //set show stroke                               
-                    CDesCArray
-                        * showStroke =
-                            UIContainer()->PinyinPopupWindow()->ShowKeystrokeArray();
-                    showStroke->Reset();
-                    TInt pinyinStarCount = 0;
-                    for (i = 0; i < ptr2.Length(); )
-                        {
-                        pinyinStarCount = 0;
-                        if ( ptr2.Mid( i, 1 ) == KPinyinStar )
-                            {
-                            while (i < ptr2.Length() && ptr2.Mid( i, 1 )
-                                == KPinyinStar )
-                                {
-                                pinyinStarCount++;
-                                i++;
-                                }
-                            switch ( pinyinStarCount )
-                                {
-                                case 1:
-                                    showStroke->AppendL( KPinyinTone0ValidStr );
-                                    break;
-                                case 2:
-                                    showStroke->AppendL( KPinyinTone1ValidStr );
-                                    break;
-                                case 3:
-                                    showStroke->AppendL( KPinyinTone2ValidStr );
-                                    break;
-                                case 4:
-                                    showStroke->AppendL( KPinyinTone3ValidStr );
-                                    break;
-                                case 5:
-                                    showStroke->AppendL( KPinyinTone4ValidStr );
-                                    break;
-                                default:
-                                    break;
-                                }
-                            }
-                        else
-                            {
-                            showStroke->AppendL( ptr2.Mid( i, 1 ) );
-                            i++;
-                            }
-                        }
-                    fepMan->PinyinPhraseCreation( ETrue );
-                    ClearPtiEngineKeystroke();
-                    GetValidkeystrokeL();
-                    CheckTonemarkL();
-
-                    CDesCArrayFlat* inEffectKeystrokeArray =
-                        popup->InEffectKeystrokeArray();
-
-                    if ( inEffectKeystrokeArray->Count() == 0 || !IsValid(
-                        ptr1, text.Length() ) )
-                        {
-                        UIContainer()->SetControlInVisible( EFalse );
-                        popup->SetPhraseCreationState( ETrue );
-                        iOwner->ChangeState( EKeySequenceEdit );
-                        }
-                    else
-                        {
-                        popup->SetPhraseCreationState( ETrue );
-                        iOwner->ChangeState( ESpellingSelection );
-                        }
-                    }
-                else
-                    {
-                    CDesCArray* keyStroke =
-                        UIContainer()->PinyinPopupWindow()->KeystrokeArray();
-                    keyStroke->Reset();
-                    //commit and show char in editor
-                    fepMan->NewTextL( text );
-                    fepMan->CommitInlineEditL();
-                    fepMan->PinyinPhraseCreation( EFalse );
-                    if ( fepMan->IsFlagSet( CAknFepManager::EFlagEditorFull ) )
-                        {
-                        fepMan->ClearFlag( CAknFepManager::EFlagEditorFull );
-                        iOwner->FepMan()->TryCloseUiL();
-                        }
-                    else
-                        {
-                        iOwner->ChangeState( EPredictiveCandidate );
-                        }
-                    }
-                }
-            else
-                {
-                CDesCArray* keyStroke =
-                    UIContainer()->PinyinPopupWindow()->KeystrokeArray();
-                keyStroke->Reset();
-                //commit and show char in editor
-                fepMan->NewTextL( text );
-                fepMan->CommitInlineEditL();
-                fepMan->PinyinPhraseCreation( EFalse );
-                if ( fepMan->IsFlagSet( CAknFepManager::EFlagEditorFull ) )
-                    {
-                    fepMan->ClearFlag( CAknFepManager::EFlagEditorFull );
-                    iOwner->FepMan()->TryCloseUiL();
-                    }
-                else
-                    {
-                    iOwner->ChangeState( EPredictiveCandidate );
-                    }
-                }
-            }
-        }
-    else
-        {
-        // No candidates available. Back to Entry state.
-        iOwner->ChangeState( EEntry );
-        }
-    }
-
-void TAknFepInputStateCandidateBaseChinesePhrase::GetNewCandidatesL(const TDesC& aSource, 
-                                                    RPointerArray<HBufC>& aList)
-    {
-    TInt start = 0;
-    TInt length = 0;
-
-    for (TInt ii = 0; ii < aSource.Length(); ii++)
-        {
-        if (aSource[ii] == KSegment)
-            {
-            TPtrC segment(aSource.Ptr() + start, length);
-            aList.AppendL(segment.AllocL());
-            start += (length + 1);
-            length = 0;
-            }
-        else
-            {
-            length++;
-            }
-        }
-
-    if (length)
-        {
-        TPtrC segm(aSource.Ptr() + start, length);
-        aList.AppendL(segm.AllocL());
-        }
-    }
-// End of file