121 lines
3.9 KiB
C++
121 lines
3.9 KiB
C++
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
|
|
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
|
|
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
|
|
// PARTICULAR PURPOSE.
|
|
//
|
|
// Copyright (c) Microsoft Corporation. All rights reserved
|
|
|
|
#include "Private.h"
|
|
#include "TableDictionaryEngine.h"
|
|
#include "DictionarySearch.h"
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// CollectWord
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
VOID CTableDictionaryEngine::CollectWord(_In_ CStringRange *pKeyCode, _Inout_ CSampleImeArray<CStringRange> *pWordStrings)
|
|
{
|
|
CDictionaryResult* pdret = nullptr;
|
|
CDictionarySearch dshSearch(_locale, _pDictionaryFile, pKeyCode);
|
|
|
|
while (dshSearch.FindPhrase(&pdret))
|
|
{
|
|
for (UINT index = 0; index < pdret->_FindPhraseList.Count(); index++)
|
|
{
|
|
CStringRange* pPhrase = nullptr;
|
|
pPhrase = pWordStrings->Append();
|
|
if (pPhrase)
|
|
{
|
|
*pPhrase = *pdret->_FindPhraseList.GetAt(index);
|
|
}
|
|
}
|
|
|
|
delete pdret;
|
|
pdret = nullptr;
|
|
}
|
|
}
|
|
|
|
VOID CTableDictionaryEngine::CollectWord(_In_ CStringRange *pKeyCode, _Inout_ CSampleImeArray<CCandidateListItem> *pItemList)
|
|
{
|
|
CDictionaryResult* pdret = nullptr;
|
|
CDictionarySearch dshSearch(_locale, _pDictionaryFile, pKeyCode);
|
|
|
|
while (dshSearch.FindPhrase(&pdret))
|
|
{
|
|
for (UINT iIndex = 0; iIndex < pdret->_FindPhraseList.Count(); iIndex++)
|
|
{
|
|
CCandidateListItem* pLI = nullptr;
|
|
pLI = pItemList->Append();
|
|
if (pLI)
|
|
{
|
|
pLI->_ItemString.Set(*pdret->_FindPhraseList.GetAt(iIndex));
|
|
pLI->_FindKeyCode.Set(pdret->_FindKeyCode.Get(), pdret->_FindKeyCode.GetLength());
|
|
}
|
|
}
|
|
|
|
delete pdret;
|
|
pdret = nullptr;
|
|
}
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// CollectWordForWildcard
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
VOID CTableDictionaryEngine::CollectWordForWildcard(_In_ CStringRange *pKeyCode, _Inout_ CSampleImeArray<CCandidateListItem> *pItemList)
|
|
{
|
|
CDictionaryResult* pdret = nullptr;
|
|
CDictionarySearch dshSearch(_locale, _pDictionaryFile, pKeyCode);
|
|
|
|
while (dshSearch.FindPhraseForWildcard(&pdret))
|
|
{
|
|
for (UINT iIndex = 0; iIndex < pdret->_FindPhraseList.Count(); iIndex++)
|
|
{
|
|
CCandidateListItem* pLI = nullptr;
|
|
pLI = pItemList->Append();
|
|
if (pLI)
|
|
{
|
|
pLI->_ItemString.Set(*pdret->_FindPhraseList.GetAt(iIndex));
|
|
pLI->_FindKeyCode.Set(pdret->_FindKeyCode.Get(), pdret->_FindKeyCode.GetLength());
|
|
}
|
|
}
|
|
|
|
delete pdret;
|
|
pdret = nullptr;
|
|
}
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// CollectWordFromConvertedStringForWildcard
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
VOID CTableDictionaryEngine::CollectWordFromConvertedStringForWildcard(_In_ CStringRange *pString, _Inout_ CSampleImeArray<CCandidateListItem> *pItemList)
|
|
{
|
|
CDictionaryResult* pdret = nullptr;
|
|
CDictionarySearch dshSearch(_locale, _pDictionaryFile, pString);
|
|
|
|
while (dshSearch.FindConvertedStringForWildcard(&pdret)) // TAIL ALL CHAR MATCH
|
|
{
|
|
for (UINT index = 0; index < pdret->_FindPhraseList.Count(); index++)
|
|
{
|
|
CCandidateListItem* pLI = nullptr;
|
|
pLI = pItemList->Append();
|
|
if (pLI)
|
|
{
|
|
pLI->_ItemString.Set(*pdret->_FindPhraseList.GetAt(index));
|
|
pLI->_FindKeyCode.Set(pdret->_FindKeyCode.Get(), pdret->_FindKeyCode.GetLength());
|
|
}
|
|
}
|
|
|
|
delete pdret;
|
|
pdret = nullptr;
|
|
}
|
|
}
|
|
|