244 lines
5.7 KiB
C++
244 lines
5.7 KiB
C++
|
|
// WrdBrk.h : Declaration of the CWrdBrk
|
|
|
|
#ifndef __WRDBRK_H_
|
|
#define __WRDBRK_H_
|
|
|
|
#include "resource.h"
|
|
#include "Query.h"
|
|
#include "autoptr.h"
|
|
#include "excption.h"
|
|
#include "tokenizer.h"
|
|
#include "FrenchTokenizer.h"
|
|
#include "SpanishTokenizer.h"
|
|
|
|
|
|
DECLARE_TAG(s_tagWordBreaker, "Word Breaker");
|
|
|
|
template <class T, const CLSID* pclsid, const long IDR, class Tokenizer>
|
|
class CBaseWrdBrk :
|
|
public CComObjectRootEx<CComMultiThreadModel>,
|
|
public CComCoClass<T, pclsid>,
|
|
public IWordBreaker
|
|
{
|
|
public:
|
|
CBaseWrdBrk(LCID lcid) :
|
|
m_fInitialize(FALSE),
|
|
m_lcid(lcid)
|
|
{
|
|
Trace(
|
|
elVerbose,
|
|
s_tagWordBreaker,
|
|
("WordBreaker constructed"));
|
|
|
|
m_pUnkMarshaler = NULL;
|
|
}
|
|
|
|
// IWordBreaker
|
|
public:
|
|
|
|
DECLARE_REGISTRY_RESOURCEID(IDR)
|
|
DECLARE_NOT_AGGREGATABLE(T)
|
|
DECLARE_GET_CONTROLLING_UNKNOWN()
|
|
|
|
BEGIN_COM_MAP(T)
|
|
COM_INTERFACE_ENTRY(IWordBreaker)
|
|
COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pUnkMarshaler.p)
|
|
END_COM_MAP()
|
|
|
|
HRESULT FinalConstruct()
|
|
{
|
|
return CoCreateFreeThreadedMarshaler(
|
|
GetControllingUnknown(), &m_pUnkMarshaler.p);
|
|
}
|
|
|
|
void FinalRelease()
|
|
{
|
|
m_pUnkMarshaler.Release();
|
|
}
|
|
|
|
STDMETHOD(Init)(
|
|
BOOL fQuery,
|
|
ULONG ulMaxTokenSize,
|
|
BOOL * pfLicense )
|
|
{
|
|
BEGIN_STDMETHOD(CWrdBrk::Init, s_tagWordBreaker);
|
|
|
|
Trace(
|
|
elVerbose,
|
|
s_tagWordBreaker,
|
|
("WordBreaker Init"));
|
|
|
|
if (NULL == pfLicense)
|
|
{
|
|
return E_INVALIDARG;
|
|
}
|
|
|
|
m_fInitialize = TRUE;
|
|
m_fQueryTime = fQuery;
|
|
m_ulMaxTokenSize = ulMaxTokenSize;
|
|
|
|
return S_OK;
|
|
END_STDMETHOD(CWrdBrk::Init, s_tagWordBreaker);
|
|
}
|
|
|
|
STDMETHOD(BreakText)(
|
|
TEXT_SOURCE * pTextSource,
|
|
IWordSink * pWordSink,
|
|
IPhraseSink * pPhraseSink )
|
|
{
|
|
|
|
BEGIN_STDMETHOD(CWrdBrk::BreakText, s_tagWordBreaker);
|
|
Trace(
|
|
elVerbose,
|
|
s_tagWordBreaker,
|
|
("WordBreaker Break Text, lcid - %x",
|
|
m_lcid));
|
|
|
|
if (NULL == pTextSource)
|
|
{
|
|
return E_INVALIDARG;
|
|
}
|
|
|
|
Tokenizer t(pTextSource,
|
|
pWordSink,
|
|
pPhraseSink,
|
|
m_lcid,
|
|
m_fQueryTime,
|
|
m_ulMaxTokenSize);
|
|
t.BreakText();
|
|
return S_OK;
|
|
|
|
END_STDMETHOD(CWrdBrk::BreakText, s_tagWordBreaker);
|
|
}
|
|
|
|
STDMETHOD(ComposePhrase)(
|
|
WCHAR const * pwcNoun,
|
|
ULONG cwcNoun,
|
|
WCHAR const * pwcModifier,
|
|
ULONG cwcModifier,
|
|
ULONG ulAttachmentType,
|
|
WCHAR * pwcPhrase,
|
|
ULONG * pcwcPhrase )
|
|
{
|
|
BEGIN_STDMETHOD(CWrdBrk::ComposePhrase, s_tagWordBreaker);
|
|
return E_NOTIMPL;
|
|
END_STDMETHOD(CWrdBrk::ComposePhrase, s_tagWordBreaker);
|
|
}
|
|
|
|
STDMETHOD(GetLicenseToUse)(
|
|
WCHAR const ** ppwcsLicense )
|
|
{
|
|
BEGIN_STDMETHOD(CWrdBrk::GetLicenseToUse, s_tagWordBreaker);
|
|
|
|
if ( NULL == ppwcsLicense )
|
|
return E_INVALIDARG;
|
|
|
|
static WCHAR const * wcsCopyright = L"Copyright Microsoft Inc.";
|
|
*ppwcsLicense = wcsCopyright;
|
|
|
|
return( S_OK );
|
|
END_STDMETHOD(CWrdBrk::GetLicenseToUse, s_tagWordBreaker);
|
|
}
|
|
|
|
protected:
|
|
|
|
BOOL m_fInitialize;
|
|
BOOL m_fQueryTime;
|
|
ULONG m_ulMaxTokenSize;
|
|
LCID m_lcid;
|
|
|
|
public:
|
|
|
|
CComPtr<IUnknown> m_pUnkMarshaler;
|
|
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CEngUSWrdBrk
|
|
class ATL_NO_VTABLE CEngUSWrdBrk :
|
|
public CBaseWrdBrk<CEngUSWrdBrk, &CLSID_EngUSWrdBrk, IDR_ENGUSWRDBRK, CTokenizer>
|
|
{
|
|
public:
|
|
CEngUSWrdBrk() :
|
|
CBaseWrdBrk<CEngUSWrdBrk, &CLSID_EngUSWrdBrk, IDR_ENGUSWRDBRK, CTokenizer>
|
|
(MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US),
|
|
SORT_DEFAULT ))
|
|
|
|
{
|
|
}
|
|
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CEngUKWrdBrk
|
|
|
|
class ATL_NO_VTABLE CEngUKWrdBrk :
|
|
public CBaseWrdBrk<CEngUKWrdBrk, &CLSID_EngUKWrdBrk, IDR_ENGUKWRDBRK, CTokenizer>
|
|
{
|
|
public:
|
|
CEngUKWrdBrk() :
|
|
CBaseWrdBrk<CEngUKWrdBrk, &CLSID_EngUKWrdBrk, IDR_ENGUKWRDBRK, CTokenizer>
|
|
(MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_UK),
|
|
SORT_DEFAULT ))
|
|
|
|
{
|
|
}
|
|
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CFrnFrnWrdBrk
|
|
|
|
class ATL_NO_VTABLE CFrnFrnWrdBrk :
|
|
public CBaseWrdBrk<CFrnFrnWrdBrk, &CLSID_FrnFrnWrdBrk, IDR_FRNFRNWRDBRK, CFrenchTokenizer>
|
|
{
|
|
public:
|
|
CFrnFrnWrdBrk() :
|
|
CBaseWrdBrk<CFrnFrnWrdBrk, &CLSID_FrnFrnWrdBrk, IDR_FRNFRNWRDBRK, CFrenchTokenizer>
|
|
(MAKELCID(MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH),
|
|
SORT_DEFAULT ))
|
|
|
|
{
|
|
}
|
|
|
|
};
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CItlItlWrdBrk
|
|
|
|
class ATL_NO_VTABLE CItlItlWrdBrk :
|
|
public CBaseWrdBrk<CItlItlWrdBrk, &CLSID_ItlItlWrdBrk, IDR_ITLITLWRDBRK, CTokenizer>
|
|
{
|
|
public:
|
|
CItlItlWrdBrk() :
|
|
CBaseWrdBrk<CItlItlWrdBrk, &CLSID_ItlItlWrdBrk, IDR_ITLITLWRDBRK, CTokenizer>
|
|
(MAKELCID(MAKELANGID(LANG_ITALIAN, SUBLANG_ITALIAN),
|
|
SORT_DEFAULT ))
|
|
|
|
{
|
|
}
|
|
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CSpnMdrWrdBrk
|
|
|
|
class ATL_NO_VTABLE CSpnMdrWrdBrk :
|
|
public CBaseWrdBrk<CSpnMdrWrdBrk, &CLSID_SpnMdrWrdBrk, IDR_SPNMDRWRDBRK, CSpanishTokenizer>
|
|
{
|
|
public:
|
|
CSpnMdrWrdBrk() :
|
|
CBaseWrdBrk<CSpnMdrWrdBrk, &CLSID_SpnMdrWrdBrk, IDR_SPNMDRWRDBRK, CSpanishTokenizer>
|
|
(MAKELCID(MAKELANGID(LANG_SPANISH , SUBLANG_SPANISH_MODERN),
|
|
SORT_DEFAULT ))
|
|
|
|
{
|
|
}
|
|
|
|
};
|
|
|
|
|
|
#endif //__WRDBRK_H_
|