diff -r a1caeb42b3a3 -r fcdfafb36fe7 uiutils/Findutil/src/FindUtilChinese.cpp --- a/uiutils/Findutil/src/FindUtilChinese.cpp Thu Jul 15 18:56:19 2010 +0300 +++ b/uiutils/Findutil/src/FindUtilChinese.cpp Thu Aug 19 10:11:06 2010 +0300 @@ -875,7 +875,7 @@ haschineseword = ETrue; ret = IncludeString(aItemString, tempBuf); - if (ret || ChineseWord( tempBuf )) + if (ret) { return ret; } @@ -905,45 +905,50 @@ if (haschineseword) { TInt ii=0; - TBuf tmpBuf; - tmpBuf.Zero(); - - ////translate the whole searchstring to spelllist + TBool leftDifferentChinese = EFalse; + //this is used for fixing for the issue of search string including Chinese characters while (ii< tempBuf.Length()) { - - //if it is a valid chinese character if ((TInt)tempBuf[ii]>= KMinUnicodeHz && (!InputMethodStroke ||(InputMethodStroke && !IsStrokeSymbol(tempBuf[ii])))) { - - RPointerArray spellList; - - //translate the chinese charater to spellList( pinyin or stroke ) - if( DoTranslationL(TInt16(tempBuf[ii]), spellList) - && ( tmpBuf.Length() + spellList[0]->Length() < KMaxWordLength) ) - { - tmpBuf.Append( spellList[0]->Des() ); + TInt Findcursor = itemString.Locate(tempBuf[ii]); + if (Findcursor != KErrNotFound) + { + if ((Findcursor == itemString.Length()-1)&& (ii + ==tempBuf.Length()-1)) + { + + if ( leftDifferentChinese || IsChineseWord( + itemString.Left( Findcursor ) ) ) + { + //if the different Chinese character at the left or middle, return false. + return EFalse; + } + + return ETrue; + } + itemString.Delete(0, Findcursor+1); + tempBuf.Delete(0, ii+1); + ii=0; } + else + { - spellList.ResetAndDestroy(); - spellList.Close(); - ii++; + if ( IsChineseWord( tempBuf.Left( ii + 1 ) ) ) + { + //flag the different Chinese character at the left. + leftDifferentChinese = ETrue; + } + + ii++; + } } - //if not, just append it else { - if( tmpBuf.Length() + 1 < KMaxWordLength ) - { - tmpBuf.Append( tempBuf[ii] ); - } - ii++; } } - - tempBuf.Zero(); - tempBuf.Copy(tmpBuf); } // Array for item string @@ -1481,32 +1486,6 @@ return IsChineseSearchStr; } - -// -------------------------------------------------------- -// Find pane text is just Chinese word -// -------------------------------------------------------- -// -TBool CFindUtilChinese::ChineseWord(const TDesC& aWord) - { - TBool isChineseWord = ETrue; - const TInt len = aWord.Length(); - - TBool InputMethodStroke = EFalse; - if(iLanguage == ELangHongKongChinese && iCurInputMode == 0x0020) - { - InputMethodStroke = ETrue; - } - - for( TInt i = 0; i < len; i++ ) - { - if( ( ( TInt )aWord[i] < KMinUnicodeHz ) || ( InputMethodStroke && IsStrokeSymbol(aWord[i]) ) ) - { - isChineseWord = EFalse; - break; - } - } - return isChineseWord; - } // --------------------------------------------------------- // Find pane text is including stroke symbol