diff -r 000000000000 -r eb1f2e154e89 textinput/peninputhwrboxjp/src/peninputhwrboxrecognizer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputhwrboxjp/src/peninputhwrboxrecognizer.cpp Tue Feb 02 01:02:04 2010 +0200 @@ -0,0 +1,318 @@ +/* +* Copyright (c) 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: Implementation of peninput handwriting recognition +* +*/ + + +#include // ELowerCase +#include // ERangeHiraganaKanji, ... +#include +#include + +#include "peninputhwrboxrecognizer.h" + +// constant definition +const TInt KInvalidStrokeEndMarkX = -65536; +const TInt KInvalidStrokeEndMarkY = -65536; + +// --------------------------------------------------------- +// Symbian constructor +// --------------------------------------------------------- +// +CPeninputHwrBoxRecognizer* CPeninputHwrBoxRecognizer::NewL(CPtiEngine* aPtiEngine) + { + CPeninputHwrBoxRecognizer* self = new (ELeave) CPeninputHwrBoxRecognizer(); + + CleanupStack::PushL(self); + self->ConstructL(aPtiEngine); + CleanupStack::Pop(self);//self + + return self; + } + +// --------------------------------------------------------- +// destructor +// --------------------------------------------------------- +// +CPeninputHwrBoxRecognizer::~CPeninputHwrBoxRecognizer() + { + } + +// --------------------------------------------------------- +// Do recoginize by engine +// --------------------------------------------------------- +// +void CPeninputHwrBoxRecognizer::DoRecognize(const RArray& aTraceData, RPointerArray& aCandidates, RArray& aRangeStartPos) + { + if (iRecognizer != NULL) + { + aCandidates.ResetAndDestroy(); + + TInt primaryCount = iRecognizer->Recognize(aTraceData, aCandidates); + + // filter recognized candidate, remove unnecessary gesture when only number is permitted + + // filter recognized candidate, set start position for all ranges + aRangeStartPos.Reset(); + + _LIT(KSeparator,"\0"); + TPtrC ptr(KSeparator); + + if (primaryCount > 0) + { + // the start position of primary range is 0 + aRangeStartPos.Append(0); + + // remove uncessary primary candidate + TInt removePos = iTotalCandidateNum - (iRangeCount - 1); + TInt removeCount = primaryCount - removePos; + + if (removePos >= 0) + { + for (TInt i = 0; i < removeCount; i++) + { + delete aCandidates[removePos]; + aCandidates.Remove(removePos); + } + } + + // remove range separator + for (TInt i=0; iCompareC(ptr) == 0) + { + // remove separator from candidate list + delete aCandidates[i]; + aCandidates.Remove(i); + // the start position of next range is i + aRangeStartPos.Append(i); + } + } + } + } + } + + +// --------------------------------------------------------- +// Set primary and auxiliary ranges for hwr engine +// --------------------------------------------------------- +// +void CPeninputHwrBoxRecognizer::SetRanges(const RArray& aPermittedRanges) + { + if ((aPermittedRanges.Count() > 0) && (iRecognizer != NULL)) + { + iPremaryRange = aPermittedRanges[0]; + iRangeCount = aPermittedRanges.Count(); + + TRecognitionRange range; + + SetRecognitionRange(aPermittedRanges[0], range); + iRecognizer->SetRange(range); + + // set auxiliary ranges for hwr engine + for (TInt i=1; iAddAuxiliaryRange(range); + } + + SetCase(iCase); + } + } + +// --------------------------------------------------------- +// Set case +// --------------------------------------------------------- +// +void CPeninputHwrBoxRecognizer::SetCase(TInt aCase) + { + // set letter to lower first when LowerCase + // set letter to upper first when UpperCase and TextCase + if (iRecognizer != NULL) + { + if (ECaseLower == aCase || ECaseInverseText == aCase) + { + iRecognizer->SetFirstLetterOrder(ELowerFirst); + } + else if (ECaseUpper == aCase || ECaseText == aCase) + { + iRecognizer->SetFirstLetterOrder(EUpperFirst); + } + + iCase = aCase; + } + } + +// --------------------------------------------------------- +// Set number mode for hwr engine +// --------------------------------------------------------- +// +void CPeninputHwrBoxRecognizer::SetNumberMode(const TAknEditorNumericKeymap& aNumberMode) + { + if (iRecognizer != NULL) + { + iRecognizer->SetNumberMode(aNumberMode); + } + } + +// --------------------------------------------------------- +// Get stroke end mark from hwr engine +// --------------------------------------------------------- +// +TPoint CPeninputHwrBoxRecognizer::StrokeEndMark() const + { + if (iRecognizer != NULL) + { + return iRecognizer->StrokeEndMark(); + } + else + { + return TPoint(KInvalidStrokeEndMarkX, KInvalidStrokeEndMarkY); + } + } + +// --------------------------------------------------------- +// Set primary candidate num for hwr engine +// --------------------------------------------------------- +// +TInt CPeninputHwrBoxRecognizer::SetPrimaryCandidateNum(TInt aNum) + { + if (iRecognizer != NULL) + { + return iRecognizer->SetCandidateNum(aNum); + } + else + { + return KErrGeneral; + } + } + +// --------------------------------------------------------- +// Set total candidate num that should be shown +// --------------------------------------------------------- +// +TInt CPeninputHwrBoxRecognizer::SetCandidateNum(TInt aNum) + { + if (aNum > 0) + { + iTotalCandidateNum = aNum; + return KErrNone; + } + else + { + return KErrGeneral; + } + } + +// --------------------------------------------------------- +// Set language +// --------------------------------------------------------- +// +void CPeninputHwrBoxRecognizer::SetLanguageL(TInt aLanguage) + { + + iLanguage = aLanguage; + + // select suitable hwr recognizer according to language + iRecognizer = iPtiEngine->GetHwrRecognizerL(TLanguage(iLanguage)); + } + +// -------------------------------------------------------------------------- +// CPeninputHwrBoxRecognizer::SetInputAreaSize +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +void CPeninputHwrBoxRecognizer::SetInputAreaSize( TSize aSize ) + { + if ( iRecognizer ) + { + iRecognizer->SetInputAreaSize( aSize ); + } + } + +// --------------------------------------------------------- +// C++ constructor +// --------------------------------------------------------- +// +CPeninputHwrBoxRecognizer::CPeninputHwrBoxRecognizer() + { + } + +// --------------------------------------------------------- +// Second phase constructor +// --------------------------------------------------------- +// +void CPeninputHwrBoxRecognizer::ConstructL(CPtiEngine* aPtiEngine) + { + if (!aPtiEngine) + { + User::Leave(KErrArgument); + } + iPtiEngine = aPtiEngine; + } + +// --------------------------------------------------------- +// Set recognition range for hwr engine +// --------------------------------------------------------- +// +void CPeninputHwrBoxRecognizer::SetRecognitionRange(const TInt aRange, TRecognitionRange& aRecognitionRange) const + { + aRecognitionRange.iLanguage = TLanguage(iLanguage); + + switch (aRange) + { + case ERangeNative: + case ERangeHiraganaKanji: + aRecognitionRange.iSubRange = EPtiRangeHiraganaKanji; + break; + case ERangeKatakana: + aRecognitionRange.iSubRange = EPtiRangeKatakana; + break; + case ERangeFullWidthKatakana: + aRecognitionRange.iSubRange = EPtiRangeFullWidthKatakana; + break; + case ERangeFullWidthEnglish: + aRecognitionRange.iSubRange = EPtiRangeFullWidthEnglish; + break; + case ERangeFullWidthNumeric: + aRecognitionRange.iSubRange = EPtiRangeFullWidthNumeric; + break; + case ERangeHiraganaOnly: + aRecognitionRange.iSubRange = EPtiRangeHiraganaOnly; + break; + case ERangeEnglish: + aRecognitionRange.iSubRange = EPtiRangeLatin; + break; + case ERangeNumber: + aRecognitionRange.iSubRange = EPtiRangeNumber; + break; + case ERangeSymbol: + if (iPremaryRange == ERangeEnglish) + { + aRecognitionRange.iLanguage = ELangEnglish; + } + else + { + aRecognitionRange.iLanguage = TLanguage(iLanguage); + } + aRecognitionRange.iSubRange = EPtiRangeSymbol; + break; + default: + break; + } + } + +//End Of File