99 lines
3.2 KiB
C++
99 lines
3.2 KiB
C++
#ifndef _CHTBRKR_H__
|
|
#define _CHTBRKR_H__
|
|
|
|
extern "C" TCHAR g_tszModuleFileName[MAX_PATH];
|
|
extern "C" HINSTANCE g_hInstance;
|
|
|
|
class CCHTWordBreaker;
|
|
class CDefWordBreaker;
|
|
|
|
// {1680E7C3-9430-4a51-9B82-1E7E7AEE5258}
|
|
DEFINE_GUID(CLSID_CHTBRKR, 0x1680E7C3, 0x9430, 0x4A51, 0x9B, 0x82,
|
|
0x1E, 0x7E, 0x7A, 0xEE, 0x52, 0x58);
|
|
// {954F1760-C1BC-11D0-9692-00A0C908146E}
|
|
DEFINE_GUID(CLSID_WHISTLER_CHTBRKR, 0x954F1760, 0xC1BC, 0x11D0, 0x96, 0x92,
|
|
0x00, 0xA0, 0xC9, 0x08, 0x14, 0x6E);
|
|
|
|
DEFINE_GUID(IID_IWordBreaker, 0xD53552C8, 0x77E3, 0x101A, 0xB5, 0x52,
|
|
0x08, 0x0, 0x2B ,0x33 ,0xB0, 0xE6);
|
|
typedef SCODE ( __stdcall __RPC_FAR *PFNFILLTEXTBUFFER )(
|
|
struct tagTEXT_SOURCE __RPC_FAR *pTextSource);
|
|
typedef struct tagTEXT_SOURCE{
|
|
PFNFILLTEXTBUFFER pfnFillTextBuffer;
|
|
const WCHAR *awcBuffer;
|
|
ULONG iEnd;
|
|
ULONG iCur;
|
|
}TEXT_SOURCE;
|
|
|
|
typedef enum tagWORDREP_BREAK_TYPE{
|
|
WORDREP_BREAK_EOW = 0,
|
|
WORDREP_BREAK_EOS = 1,
|
|
WORDREP_BREAK_EOP = 2,
|
|
WORDREP_BREAK_EOC = 3
|
|
} WORDREP_BREAK_TYPE;
|
|
|
|
class IChtBrKrClassFactory: public IClassFactory
|
|
{
|
|
public:
|
|
IChtBrKrClassFactory();
|
|
~IChtBrKrClassFactory();
|
|
public:
|
|
// IUnknown members
|
|
STDMETHOD(QueryInterface) (THIS_ REFIID refiid, VOID **ppv);
|
|
STDMETHOD_(ULONG,AddRef) (THIS);
|
|
STDMETHOD_(ULONG,Release) (THIS);
|
|
|
|
// IFEClassFactory members
|
|
STDMETHOD(CreateInstance) (THIS_ LPUNKNOWN, REFIID, void **);
|
|
STDMETHOD(LockServer) (THIS_ BOOL);
|
|
private:
|
|
LONG m_lRefCnt;
|
|
};
|
|
|
|
DECLARE_INTERFACE_(IWordSink, IUnknown)
|
|
{
|
|
public:
|
|
STDMETHOD(PutWord) (THIS_ ULONG cwc, const WCHAR *pwcInBuf, ULONG cwcSrcLen, ULONG cwcSrcPos) PURE;
|
|
STDMETHOD(PutAltWord) (THIS_ ULONG cwc, const WCHAR *pwcInBuf, ULONG cwcSrcLen, ULONG cwcSrcPos) PURE;
|
|
STDMETHOD(StartAltPhrase) (THIS) PURE;
|
|
STDMETHOD(EndAltPhrase) (THIS) PURE;
|
|
STDMETHOD(PutBreak) (THIS_ WORDREP_BREAK_TYPE breakType) PURE;
|
|
};
|
|
|
|
DECLARE_INTERFACE_(IPhraseSink, IUnknown)
|
|
{
|
|
public:
|
|
STDMETHOD(PutSmallPhrase) (THIS_ const WCHAR *pwcNoun, ULONG cwcNoun, const WCHAR *pwcModifier,
|
|
ULONG cwcModifier, ULONG ulAttachmentType) PURE;
|
|
STDMETHOD(PutPhrase) (THIS_ const WCHAR *pwcPhrase, ULONG cwcPhrase) PURE;
|
|
};
|
|
|
|
|
|
class IWordBreaker: public IUnknown
|
|
{
|
|
public:
|
|
IWordBreaker();
|
|
~IWordBreaker();
|
|
public:
|
|
STDMETHOD(QueryInterface) (THIS_ REFIID refiid, VOID **ppv);
|
|
STDMETHOD_(ULONG,AddRef) (THIS);
|
|
STDMETHOD_(ULONG,Release) (THIS);
|
|
|
|
public:
|
|
STDMETHOD(Init) (THIS_ BOOL fQuery, ULONG ulMaxTokenSize, BOOL *pfLicense);
|
|
STDMETHOD(BreakText) (THIS_ TEXT_SOURCE *pTextSource, IWordSink *pWordSink, IPhraseSink *pPhraseSink);
|
|
STDMETHOD(ComposePhrase) (THIS_ const WCHAR *pwcNoun, ULONG cwcNoun, const WCHAR *pwcModifier,
|
|
ULONG cwcModifier, ULONG ulAttachmentType, WCHAR *pwcPhrase, ULONG *pcwcPhrase);
|
|
STDMETHOD(GetLicenseToUse) (THIS_ const WCHAR **ppwcsLicense);
|
|
private:
|
|
UINT m_uMaxCharNumberPerWord;
|
|
LONG m_lRefCnt;
|
|
CCHTWordBreaker* m_pcWordBreaker;
|
|
TEXT_SOURCE* m_pNonChineseTextSource;
|
|
IWordBreaker* m_pNonChineseWordBreaker;
|
|
CDefWordBreaker* m_pcDefWordBreaker;
|
|
BOOL m_fIsQueryTime;
|
|
};
|
|
|
|
#else
|
|
#endif //_CHTBRKR_H__
|