Leaked source code of windows server 2003
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

//
// 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
}