windows-nt/Source/XPSP1/NT/inetsrv/intlwb/enu/wordbreaker/wrdbrk.h
2020-09-26 16:20:57 +08:00

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_