|
|
#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__
|