//+-------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (C) Microsoft Corporation, 1992-1998
//
//  File:       ifilt.idl
//
//  Contents:   IFilter interface definition
//
//  History:    12-Jul-93   AmyA        Created
//
//--------------------------------------------------------------------------

import "unknwn.idl";
import "objidl.idl";
import "propidl.idl";

cpp_quote("//+-------------------------------------------------------------------------")
cpp_quote("//")
cpp_quote("//  Microsoft Windows")
cpp_quote("//  Copyright (C) Microsoft Corporation, 1993-1998.")
cpp_quote("//")
cpp_quote("//--------------------------------------------------------------------------")

cpp_quote("#if !defined(_TAGFULLPROPSPEC_DEFINED_)")
cpp_quote("#define _TAGFULLPROPSPEC_DEFINED_")
typedef struct tagFULLPROPSPEC
{
    GUID         guidPropSet;
    PROPSPEC psProperty;
} FULLPROPSPEC;
cpp_quote("#endif // #if !defined(_TAGFULLPROPSPEC_DEFINED_)")

[
    object,
    uuid(89BCB740-6119-101A-BCB7-00DD010655AF),
    pointer_default(unique)
]

interface IFilter : IUnknown
{
    cpp_quote("#ifndef _tagIFILTER_INIT_DEFINED")
    typedef enum tagIFILTER_INIT
    {
        IFILTER_INIT_CANON_PARAGRAPHS        = 1,
        IFILTER_INIT_HARD_LINE_BREAKS        = 2,
        IFILTER_INIT_CANON_HYPHENS           = 4,
        IFILTER_INIT_CANON_SPACES            = 8,

        IFILTER_INIT_APPLY_INDEX_ATTRIBUTES  = 16,
        IFILTER_INIT_APPLY_OTHER_ATTRIBUTES  = 32,
        IFILTER_INIT_APPLY_CRAWL_ATTRIBUTES  = 256,

        IFILTER_INIT_INDEXING_ONLY           = 64,

        IFILTER_INIT_SEARCH_LINKS            = 128,

        IFILTER_INIT_FILTER_OWNED_VALUE_OK   = 512,
        
        IFILTER_INIT_FILTER_AGGRESSIVE_BREAK = 1024,
        
        IFILTER_INIT_DISABLE_EMBEDDED        = 2048,
        
        IFILTER_INIT_EMIT_FORMATTING         = 4096

    } IFILTER_INIT;
    cpp_quote("#define _tagIFILTER_INIT_DEFINED")
    cpp_quote("#define _IFILTER_INIT_DEFINED")
    cpp_quote("#endif")

    cpp_quote("#ifndef _tagIFILTER_FLAGS_DEFINED")
    typedef enum tagIFILTER_FLAGS
    {
        IFILTER_FLAGS_OLE_PROPERTIES        = 1
    } IFILTER_FLAGS;
    cpp_quote("#define _tagIFILTER_FLAGS_DEFINED")
    cpp_quote("#define _IFILTER_FLAGS_DEFINED")
    cpp_quote("#endif")

    cpp_quote("#ifndef _tagCHUNKSTATE_DEFINED")
    typedef enum tagCHUNKSTATE
    {
        CHUNK_TEXT               = 0x1,
        CHUNK_VALUE              = 0x2,
        CHUNK_FILTER_OWNED_VALUE = 0x4
    } CHUNKSTATE;
    cpp_quote("#define _tagCHUNKSTATE_DEFINED")
    cpp_quote("#define _CHUNKSTATE_DEFINED")
    cpp_quote("#endif")

    cpp_quote("#ifndef _tagCHUNK_BREAKTYPE_DEFINED")
    typedef enum tagCHUNK_BREAKTYPE
    {
        CHUNK_NO_BREAK  = 0,
        CHUNK_EOW       = 1,
        CHUNK_EOS       = 2,
        CHUNK_EOP       = 3,
        CHUNK_EOC       = 4
    } CHUNK_BREAKTYPE;
    cpp_quote("#define _tagCHUNK_BREAKTYPE_DEFINED")
    cpp_quote("#define _CHUNK_BREAKTYPE_DEFINED")
    cpp_quote("#endif")

    cpp_quote("#ifndef _tagFILTERREGION_DEFINED")
    typedef struct tagFILTERREGION
    {
        ULONG idChunk;
        ULONG cwcStart;
        ULONG cwcExtent;
    } FILTERREGION;
    cpp_quote("#define _tagFILTERREGION_DEFINED")
    cpp_quote("#define _FILTERREGION_DEFINED")
    cpp_quote("#endif")

    cpp_quote("#ifndef _tagSTAT_CHUNK_DEFINED")
    typedef struct tagSTAT_CHUNK
    {
        ULONG           idChunk;
        CHUNK_BREAKTYPE breakType;
        CHUNKSTATE      flags;
        LCID            locale;
        FULLPROPSPEC    attribute;
        ULONG           idChunkSource;
        ULONG           cwcStartSource;
        ULONG           cwcLenSource;
    } STAT_CHUNK;

    cpp_quote("#define _tagSTAT_CHUNK_DEFINED")
    cpp_quote("#define _STAT_CHUNK_DEFINED")
    cpp_quote("#endif")

    SCODE Init([in] ULONG grfFlags,
               [in] ULONG cAttributes,
               [in, size_is(cAttributes), unique] FULLPROPSPEC const * aAttributes,
               [out] ULONG * pFlags );

    SCODE GetChunk([out] STAT_CHUNK * pStat );

    SCODE GetText([in, out] ULONG * pcwcBuffer,
                  [out, size_is(*pcwcBuffer)] WCHAR * awcBuffer );

    SCODE GetValue([out] PROPVARIANT ** ppPropValue );

    [local]
    SCODE BindRegion([in] FILTERREGION origPos,
                     [in] REFIID riid,
                     [out] void ** ppunk );

}


