Windows2003-3790/inetsrv/query/h/defbreak.hxx
2020-09-30 16:53:55 +02:00

148 lines
4.3 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1991 - 1992.
//
// File: DefBreak.hxx
//
// Contents: 'Default' Word Breaker
//
// Classes: CDefWordBreaker
//
// History: 08-May-91 t-WadeR Created
// 06-Jun-91 t-WadeR changed for input-based pipeline
// 11-Apr-94 KyleP Sync with spec
//
//----------------------------------------------------------------------------
#pragma once
const WCHAR ZERO_WIDTH_SPACE = 0x200B; // Unicode zero width space
//+---------------------------------------------------------------------------
//
// Class: CDefWordBreaker
//
// Purpose: Break text into phrases and words (default wordbreaker)
//
// History: 02-May-91 BartoszM Created.
// 13-May-91 t-WadeR Changed to use CWordItr.
// 06-June-91 t-WadeR changed for input-based pipeline
// 12-Oct-92 AmyA Added Unicode support
// 18-Nov-92 AmyA Overloaded BreakText
// 11-Apr-94 KyleP Sync with spec
//
//----------------------------------------------------------------------------
class CDefWordBreaker : public IWordBreaker
{
public:
//
// From IUnknown
//
virtual SCODE STDMETHODCALLTYPE QueryInterface( REFIID riid,
void **ppvObject );
virtual ULONG STDMETHODCALLTYPE AddRef();
virtual ULONG STDMETHODCALLTYPE Release();
//
// From IWordBreaker
//
virtual SCODE STDMETHODCALLTYPE Init( BOOL fQuery,
ULONG ulMaxTokenSize,
BOOL *pfLicense );
virtual SCODE STDMETHODCALLTYPE BreakText( TEXT_SOURCE *pTextSource,
IWordSink *pWordSink,
IPhraseSink *pPhraseSink );
virtual SCODE STDMETHODCALLTYPE ComposePhrase( WCHAR const *pwcNoun,
ULONG cwcNoun,
WCHAR const *pwcModifier,
ULONG cwcModifier,
ULONG ulAttachmentType,
WCHAR *pwcPhrase,
ULONG *pcwcPhrase );
virtual SCODE STDMETHODCALLTYPE GetLicenseToUse( const WCHAR **ppwcsLicense );
//
// Local methods
//
CDefWordBreaker();
private:
BOOL IsWordChar (int i) const;
BOOL ScanChunk ();
void Tokenize( TEXT_SOURCE *pTextSource, ULONG cwc, IWordSink *pWordSink, ULONG& cwcProcd );
~CDefWordBreaker();
enum _EBufSize
{
ccCompare = 500
};
// These variables describe current chunk
ULONG _cMapped;
const WCHAR* _pwcChunk;
// Leave space for one (dummy) lookahead
WORD _aCharInfo1[CDefWordBreaker::ccCompare+1];
WORD _aCharInfo3[CDefWordBreaker::ccCompare+1];
WCHAR _awcBufZWS[CDefWordBreaker::ccCompare]; // temp buffer for a word having zero-width space
long _cRefs;
};
//+---------------------------------------------------------------------------
//
// Class: CDefWordBreakerCF
//
// Purpose: Class factory for default word breaker
//
// History: 07-Feb-95 SitaramR Created
//
//----------------------------------------------------------------------------
class CDefWordBreakerCF : public IClassFactory
{
public:
CDefWordBreakerCF();
//
// From IUnknown
//
virtual SCODE STDMETHODCALLTYPE QueryInterface( REFIID riid,
void ** ppvObject);
virtual ULONG STDMETHODCALLTYPE AddRef();
virtual ULONG STDMETHODCALLTYPE Release();
//
// From IClassFactory
//
virtual SCODE STDMETHODCALLTYPE CreateInstance( IUnknown * pUnkOuter,
REFIID riid, void * * ppvObject );
virtual SCODE STDMETHODCALLTYPE LockServer( BOOL fLock );
protected:
virtual ~CDefWordBreakerCF();
long _cRefs;
};