textinput/ptienginev2/inc/PtiEngineImpl.h
changeset 0 eb1f2e154e89
child 8 4eb1ae11334f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/ptienginev2/inc/PtiEngineImpl.h	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,362 @@
+/*
+* Copyright (c) 2003-2008 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:   Predective text input engine implementation class header
+*
+*/
+
+
+
+#ifndef _PTI_ENGINE_IMPL_H
+#define _PTI_ENGINE_IMPL_H
+
+// INCLUDES
+#include <e32base.h>
+#include <badesca.h> 
+#include "PtiDefs.h"
+#include "PtiObserver.h"
+
+// FORWARD DECLARATIONS
+class CPtiCore;
+class MPtiLanguage;
+class CPtiCoreLanguage;
+class CPtiUserDictionary;
+class MPtiUserDictionary;
+class MPtiEngineCompositionDataInterface;
+class MPtiUserDictionaryEntry;
+class CPtiEngine;
+class CPtiMappings;
+class MPtiHwrRecognizer;
+class CHwrRecognizer;
+class CPtiHwrRecognizer;
+class MPtiKeyMappings;
+const TInt KPtiMaxKeymappingsLength = 32;
+/**
+* CPtiEngineImpl class.
+* Implementation class for main PtiEngine API. See file PtiEngine.h for actual documentation.
+*/
+NONSHARABLE_CLASS(CPtiEngineImpl) : public CBase
+	{
+	public:
+	    /**
+		* Two phase constructor.
+		*
+		* @param  aUseDefaultUserDictionary
+		* @return 
+		*/
+		static CPtiEngineImpl* NewL(CPtiEngine* aFrontEnd);		
+
+		/**
+		* Destructor.
+		*/
+		~CPtiEngineImpl();
+
+        // The PtiEngine API.
+        // See the description of corresponding method in PtiEngine.h
+		TInt ActivateLanguageL(TInt aEpocLanguageID, TPtiEngineInputMode aMode);
+		void CloseCurrentLanguageL();
+		IMPORT_C MPtiCoreInfo* CoreInfo(TPtiEngineInputMode aMode) const;
+		inline MPtiLanguage* CurrentLanguage();
+		MPtiLanguage* GetLanguage(TInt aCode) const;
+		TInt NumberOfCandidates();
+		TPtrC AppendKeyPress(TPtiKey aKey);
+		TPtrC DeleteKeyPress();
+		TInt AddCoreL(const TUid aCoreUid, TBool aUseDefaultUserDictionary);
+		TInt GetCandidateListL(CDesCArray& aList);
+		TInt GetNextWordCandidateListL(CDesCArray& aList);
+		TPtrC FirstCandidate();		
+		TPtrC NextCandidate();
+		TPtrC PreviousCandidate();
+		TInt SetInputMode(TPtiEngineInputMode aMode);
+		inline TPtiEngineInputMode InputMode() const;
+		TInt SetReordering(TBool aStatus);
+		TInt SetCurrentWord(TPtrC aWord);
+		inline TPtrC CurrentWord();
+		void ClearCurrentWord();
+		inline void SetCase(TPtiTextCase aCase);
+		inline TPtiTextCase Case() const;	
+		void GetAvailableLanguagesL(CArrayFix<TInt>* aResult);
+		void GetAvailableLanguagesL(RArray<TInt>& aResult);
+		inline TInt NumberOfLanguages() const;
+		TInt CreateUserDictionaryL(TDesC& aFileName, CDesCArrayFlat* aWords,
+		                           TPtiEngineInputMode aMode); 
+		MPtiUserDictionary* AttachUserDictionaryL(TDesC& aFileName);	
+		MPtiUserDictionary* AttachDefaultUserDictionaryL(TUid aCoreUid, TInt aSymbolClass);		
+		TInt DetachUserDictionary(TDesC& aFileName);
+		TInt DetachUserDictionary(TInt aId);
+		void GetLocalizedLanguageNameL(TInt aLangCode, TDes& aResult);
+		TInt CommitCurrentWord();
+		TInt CharConversion(TPtiCharConversion aType,
+		               TAny* aInput,
+		  			   TInt aInputLength,
+					   TAny* aOutput);
+		TUint32 AvailableCharConversions() const;
+		TInt SetExternalKeyMapL(TPtiEngineInputMode aMode,
+		                        TPtiKey aKey,
+						  	    TDesC& aKeyMap,
+								TPtiTextCase aCase);
+		inline TPtiKey LastEnteredKey() const;
+		inline TPtrC8 CurrentInputSequence() const;
+		TInt GetSpelling(TUint16 aInput, TDes& aOutput, TPtiSpelling aType);
+		TInt CancelTimerActivity();
+		TPtiKey CharacterToKey(TUint16 aChar);
+		TInt AddUserDictionaryEntry(MPtiUserDictionaryEntry& aEntry);
+		TInt AddUserDictionaryEntry(MPtiUserDictionaryEntry& aEntry, TInt aId);
+		TInt RemoveEntryFromUserDictionary(MPtiUserDictionaryEntry& aEntry);
+		TInt RemoveEntryFromUserDictionary(MPtiUserDictionaryEntry& aEntry, TInt aId);
+		TInt NumberOfEntriesInUserDictionary();
+		TInt GetUserDictionaryEntry(TInt aIndex, MPtiUserDictionaryEntry& aResult);
+		MPtiUserDictionary* DefaultUserDictionary(TPtiEngineInputMode aMode);
+		inline void SetObserver(MPtiObserver* aObserver);
+		inline MPtiObserver* Observer();
+		TInt HandleCommandL(TPtiEngineCommand aCommand, TAny* aParams);
+		TPtrC CandidatePage();
+		TBool NextCandidatePage();
+		TBool PreviousCandidatePage();
+		TBool MoreCandidatePages();
+		void SetCandidatePageLength(TInt aLength);
+	    TPtrC GetPhoneticSpelling(TInt aIndex) const; 
+		TInt PhoneticSpellingCount() const;	
+	    TBool SelectPhoneticSpelling(TInt aIndex);
+	    TInt SelectedPhoneticSpelling() const; 
+		void EnableToneMarks(TBool aValue);
+		void ResetToneMark();
+		TBool ToneMark(TText& aToneMark) const;
+		TBool IsToneMarkValidForSpelling() const;
+		TBool IncrementToneMark(TBool aOverrideInvalid);
+		TBool SetPredictiveChineseChar(const TDesC& aChar);
+		MPtiEngineCompositionDataInterface* CompositionData();
+		TPtrC ReadingTextL();
+		void GetModeNameIndexL(TPtiChineseVariant aVariant, RArray<TInt>& aResult);
+		TInt GetPhoneticSpellingsL(CDesCArray& aList);
+		TInt GetChinesePhraseCandidatesL(CDesCArray& aList);
+		TBool SetToneMark(TInt aToneMark);	
+		void CreateDefaultUserDictionaryFileL(TUid aCoreUid, TInt aSymbolClass);					
+		void WriteSecondaryDataFileL(TUid aCoreUid, TInt aIndexNumber, HBufC8* aData);		
+		HBufC8* ReadSecondaryDataFileL(TUid aCoreUid, TInt aIndexNumber);			
+		void MappingDataForKey(TPtiKey aKey, TDes& aResult, TPtiTextCase aCase);		
+		void GetNumericModeKeysForQwertyL(TInt aLanguage, RArray<TPtiNumericKeyBinding>& aResult);                        								
+    IMPORT_C HBufC* GetCandidatesByInputString(const TDesC& aInputString, 
+                                                RPointerArray<HBufC>& aList, 
+                                                const TBool aIsPredictive);		
+		void InitializeL(TBool aUseDefaultUserDictionary);
+        MPtiHwrRecognizer* GetHwrRecognizerL(TLanguage aLanguage);
+        MPtiHwrRecognizer* GetHwrRecognizerL(TInt aImpId);		   
+        RArray<TUid>& ListHwrRecognizerL(TLanguage aLanguage);
+        void GetHwrAvailableLanguagesL(RArray<TInt>& aResult);
+
+ 	    const RArray<TPtiNumericKeyBinding>& ExtendedNumericModeKeysForQwertyL(TInt aLanguage);
+        TInt SetAutoSubstitution(TBool aStatus); 
+        TInt AddAutoSubstitutionEntry(const TDesC& aShortcut, const TDesC& aSubstituition);     
+        TInt DeleteAutoSubstitutionEntry(const TDesC& aShortcut);     
+        TInt NumberOfAutoSubstitutionEntries() const;     
+        TInt GetAutoSubstitutionEntry(TInt aIndex, TDes& aShortcut,
+                                      TDes& aSubstitution);                                           
+        TPtiKeyboardType KeyboardType() const;     
+        TInt SetKeyboardType(TPtiKeyboardType aType);   
+        void KeyboardTypesSupportedByLanguageL(TInt aLanguage,
+                                               RArray<TPtiKeyboardType>& aResult);                       
+        void GetNumericModeKeysForQwertyL(TInt aLanguage,
+ 	                                      RArray<TPtiNumericKeyBinding>& aResult,
+ 	                                   TPtiKeyboardType aKeyboardType);                                                                             
+        const RArray<TPtiNumericKeyBinding>& ExtendedNumericModeKeysForQwertyL(TInt aLanguage,                                                                            TPtiKeyboardType aKeyboardType);
+        TInt SetNumberCandidateStatus(TBool aStatus);                                                                               
+  	    TBool IsValidKey(TPtiKey aKey) const;
+  	    TInt SetMaxLengthForAutoCompletedCandidates(TInt aMaxLenght); 
+        void MarkAutoCapitalized(); 
+        inline TPtrC8 CaseSequence();   
+        TInt AddPhrase(const TDesC& aNewPhrase);                	                                                                                                
+#ifdef FF_DUAL_LANGUAGE_SUPPORT
+        TInt SetSecondaryInputL(TInt aEpocLanguageID);
+        MPtiKeyMappings* GetCombinedKeyMappings(TPtiKeyboardType aKeyboardType);
+#endif //FF_DUAL_LANGUAGE_SUPPORT
+                                        
+	private:
+		enum
+			{
+			KPtiMaxWordSize = 255
+			};
+						
+	private:
+		CPtiEngineImpl();
+		void ConstructL(CPtiEngine* aFrontEnd);
+		CArrayFixFlat<TPtiLangName>* CreateLanguageNamesListLC();
+		void FindLanguageName(CArrayFixFlat<TPtiLangName>*aList, TDes& aResult, TInt aLangCode);
+		void RefreshLanguageNamesL();
+		inline TBool IsCoreForInputMode(TPtiEngineInputMode aMode) const;
+		inline TBool IsCore() const;
+		inline CPtiCore* Core() const;
+		inline CPtiCore* CoreForInputMode(TPtiEngineInputMode aMode) const;		
+		void DetachUserDictionaries();
+		CPtiCore* FindCoreByUid(TInt32 aUid);
+		void ConvertToKeySequence(TPtrC aIn, TDes8& aOut);
+		inline void ClearBuffers();
+		void Capitalize(TDes& aTextBuffer);
+		void MakeCaseSequence(TPtrC aWord);
+		void LoadCoresInDefaultDirL(TBool aUseDefaultUserDictionary);
+		CPtiUserDictionary* DefaultUserDictForCore(CPtiCore* aCore);
+		TInt ReadUidFromUserDictionaryFileL(const TDesC& aFileName);
+		CPtiCoreLanguage* CreateNumericLanguageL(CPtiCore* aCore);
+		inline TBool IsChinese() const;
+		TInt CountToneMarks(TPtrC aSpelling) const;
+		inline TBool SupportsUserDictionaries(CPtiCore* aCore);
+		inline TBool IsToneMarkOrSeparator(TInt aChar) const;
+		inline TBool IsModeChineseQwerty(TPtiEngineInputMode aMode) const;
+		TPtrC RedirectKeyForChineseQwerty(TPtiKey aKey, TBool& aRedirected);
+		void CreateUserDictName(TDes& aResult, TUid aCoreUid, TInt aSymbolClass);	
+		void CreateSecondaryDataFileName(TDes& aResult, TUid aCoreUid, TInt aIndex);				
+        TBool MapNumericChar(CPtiMappings* aMaps, TPtiNumericKeyBinding& aBinding,
+                             TPtiKey aKey, TPtiTextCase aCase, TBool aUseExtendedSet,
+                             TPtiEngineInputMode aMode);	
+   		inline TBool AllowCapitalize(TUint16 aChar) const;
+		void NumericModeKeysForQwertyL(TInt aLanguage,
+                                       RArray<TPtiNumericKeyBinding>& aResult,
+                                       TBool aUseExtendedSet,
+                                       TPtiKeyboardType aKeyboardtype = EPtiKeyboardNone);	
+        TPtiKeyboardType ActiveKeyboardTypeL();
+        TPtiKeyboardType FindFirstAvailableQwertyKeyboardType(TInt aLang) const;                                              	
+        TPtiTextCase CaseForMappedCharacter(TChar aCharacter);
+        void RemoveTrailingPunctuations();
+        void RemoveTrailingPunctuations12Key();
+#ifdef FF_DUAL_LANGUAGE_SUPPORT
+        void  SearchKeySequenceInSecLang(TPtrC aIn, TDes8& aOut);
+#endif // FF_DUAL_LANGUAGE_SUPPORT        
+	private:	
+	    /*
+	    * Pointer to PtiEngine front end.
+	    */
+		CPtiEngine*              iFrontEnd;
+		
+		/*
+		* Primary text buffer.
+		*/
+		TBuf<KPtiMaxWordSize>    iTextBuffer;
+		
+		TBuf<KPtiMaxKeymappingsLength>    iPunctuationCharacters;
+		
+		/*
+		* Input sequence buffer. Holds scan codes for
+		* each key press for current word.
+		*/
+		TBuf8<KPtiMaxWordSize>   iInputSequence;
+		
+		/*
+		* Case buffer. Holds the shift status for each key press.
+		*/
+		TBuf8<KPtiMaxWordSize>   iCaseBuffer;
+		
+		/*
+		* Current input mode.
+		*/
+		TPtiEngineInputMode      iInputMode;	
+		
+		/*
+		* Pointer to currently active language.
+		*/	
+		CPtiCoreLanguage*        iCurrentLanguage;
+		
+		/*
+		* Current text case.
+		*/
+		TPtiTextCase             iCase;
+		
+		/*
+		* The language list. 
+		*/
+		CArrayPtrFlat<CPtiCoreLanguage>* iLanguages;
+		
+		/*
+		* Candidate buffer.
+		*/
+		TBuf<KPtiMaxWordSize>    iCandidateBuffer;
+		
+		/*
+		* Core object array.
+		*/ 
+		CArrayPtrFlat<CPtiCore>* iCores;
+
+        /*
+        * User dictionary array.
+        */
+		RPointerArray<CPtiUserDictionary> iUserDictionaries;		
+		
+		/*
+		* Pointer to registered PtiEngine observer.
+		*/
+		MPtiObserver*            iObserver;
+			
+		/* 
+		* Language for current extended numeric mode set.
+		*/	
+		TInt                     iExtendedNumricSetLang;
+		
+		/*
+		* Extended numeric mode characters. 
+		*/
+		RArray<TPtiNumericKeyBinding> iExtendedNumricSet;
+
+        /**
+        * The array used to store hwr implementation uid list
+        */      
+        RArray<TUid> iImpIdList; 
+		
+        /**
+        * The pointer points current active hwr implementation
+        */
+        CPtiHwrRecognizer* iCurrentHwrImpl;                
+#ifdef FF_DUAL_LANGUAGE_SUPPORT
+        /*
+        * Pointer to currently active language.
+        */  
+        CPtiCoreLanguage*        iSecondaryLanguage;
+        
+        /**
+        * The pointer used to store current combined keymapping class
+        */
+        MPtiKeyMappings* iCombinedKeyMappings;
+#endif //FF_DUAL_LANGUAGE_SUPPORT
+#ifdef RD_INTELLIGENT_TEXT_INPUT
+        /*
+        * Pointer to currently active language.
+        */        
+        TBuf16<4>     iZhuyinSymbols;
+        /*
+        * current key inputted.
+        */ 
+        TPtiKey       iKeyMuliTap;
+        /*
+        * index in zhuyin symbol array for mini qwerty zhuyin multi-tap .
+        */ 
+        TInt8         iIndex;
+#endif //RD_INTELLIGENT_TEXT_INPUT
+
+        /*
+         * When cursor position in editor crossed max length in editor then set this flag
+        */
+        TBool iMaxEditorLengthCrossed;
+        /*
+         * Keeps count of the punctuation keys entered simultaneously
+         */
+        TInt iPunctuationsEntered;
+        
+        /*
+         * Keeps track of the location of start of punct symbol
+         */
+        TInt iPunctuationLocation;
+	};
+
+#include "PtiEngine.inl"
+
+#endif  _PTI_ENGINE_H
+
+// End of file