You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
2.6 KiB
82 lines
2.6 KiB
//
|
|
// LMOBJ.CPP
|
|
//
|
|
// implements a wrapper for external LM that we use for
|
|
// pre-processing SR lattice
|
|
//
|
|
//
|
|
|
|
#include "private.h"
|
|
#include "globals.h"
|
|
#include "sapilayr.h"
|
|
#include "fnrecon.h"
|
|
//#include "lmobj.h"
|
|
//#include "catutil.h"
|
|
|
|
//
|
|
// CMasterLMWrap implementation
|
|
//
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// CMasterLMWrap::_EnsureMasterLM
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
void CMasterLMWrap::_EnsureMasterLM(LANGID langidRequested)
|
|
{
|
|
// langidRequested is given based on langid of reconversion range
|
|
// m_langidMasterLM is based on the last master LMTIP we worked with
|
|
//
|
|
if (TRUE == m_fLMInited)
|
|
return;
|
|
|
|
if (!m_psi->_MasterLMEnabled())
|
|
return;
|
|
|
|
if ( !m_cpMasterLM || m_langidMasterLM != langidRequested )
|
|
{
|
|
m_cpMasterLM.Release();
|
|
|
|
CComPtr<IEnumGUID> cpEnum;
|
|
HRESULT hr = LibEnumItemsInCategory(m_psi->_GetLibTLS(), GUID_TFCAT_TIP_MASTERLM, &cpEnum);
|
|
if (S_OK == hr)
|
|
{
|
|
GUID guidLMTIP;
|
|
BOOL fLangOK = FALSE;
|
|
while(cpEnum->Next(1, &guidLMTIP, NULL) == S_OK && !fLangOK)
|
|
{
|
|
ITfFunctionProvider *pFuncPrv = NULL;
|
|
|
|
// check if the TIP can accomodate the language
|
|
Assert(m_psi->_tim);
|
|
hr = m_psi->_tim->GetFunctionProvider(guidLMTIP, &pFuncPrv);
|
|
if (S_OK == hr)
|
|
{
|
|
CComPtr<IUnknown> cpunk;
|
|
CComPtr<ITfFnLMProcessor> cpLMTIP;
|
|
hr = pFuncPrv->GetFunction(GUID_NULL, IID_ITfFnLMProcessor, &cpunk);
|
|
if (S_OK == hr)
|
|
{
|
|
hr = cpunk->QueryInterface(IID_ITfFnLMProcessor, (void **)&cpLMTIP);
|
|
}
|
|
|
|
if (S_OK == hr)
|
|
{
|
|
hr = cpLMTIP->QueryLangID(langidRequested, &fLangOK);
|
|
}
|
|
|
|
if (fLangOK == TRUE)
|
|
{
|
|
m_cpMasterLM = cpLMTIP;
|
|
m_langidMasterLM = langidRequested;
|
|
}
|
|
|
|
SafeReleaseClear(pFuncPrv);
|
|
} // if S_OK == GetFunctionProvider()
|
|
|
|
} // while next
|
|
|
|
} // if LibEnumItemsInCategory() == S_OK
|
|
m_fLMInited = TRUE;
|
|
} // if !m_cpMasterLM
|
|
}
|