//+----------------------------------------------------------------------------
//
//    Copyright (c) 2005 Microsoft Corporation.
//
//    File:     SearchLanguageSupport.idl
//
//    Purpose:  Search Catalog Interface Description
//
//    History:  12/02/2005     jonasbar      New
//
//-----------------------------------------------------------------------------

import "oaidl.idl";
import "ocidl.idl";

// 6A68CC80-4337-4dbc-BD27-FBFB1053820B
cpp_quote("EXTERN_C const CLSID CLSID_CSearchLanguageSupport;")
cpp_quote("#ifdef __cplusplus")
cpp_quote("class DECLSPEC_UUID(\"6A68CC80-4337-4dbc-BD27-FBFB1053820B\")")
cpp_quote("CSearchLanguageSupport;")
cpp_quote("#endif")

[
    object,
    uuid(24C3CBAA-EBC1-491a-9EF1-9F6D8DEB1B8F),
    pointer_default(unique)
]
interface ISearchLanguageSupport : IUnknown
{
#if 0
    //**********************************************************************
    // Get thesaurus information
    //
    // A thesaurus file contains a word and a list of words to
    // substitute when querying.  It is specific to a catalog and can
    // be defined in more than one file.
    //
    //**********************************************************************

    // Thesaurus terms for word.
    // Permitted IID: IEnumString
    // Returns S_OK on success; no other success value.
    // Various failure return values.
    HRESULT EnumerateExpandedTerms([in] LPCWSTR pszWord,
                                   [in] LCID lcid,
                                   [in] REFIID riid,
                                   [out, iid_is(riid)] void** ppWords);
#endif

    //
    // Sensitivity to diacritics
    // Both methods return S_OK on success; no other success value.
    // Various failure return values.
    // A newly created CSearchLanguageSupport will be insensitive to diacritics.
    HRESULT SetDiacriticSensitivity([in] BOOL fDiacriticSensitive);
    HRESULT GetDiacriticSensitivity([out, retval] BOOL* pfDiacriticSensitive);

#if 0
    //**********************************************************************
    // Access to noise list
    //
    // A noise list contains words that are not indexed substitute
    // when querying.  It is specific to a catalog and can be defined
    // in more than one file.
    //
    //**********************************************************************

    // Test a word to see if it is a noise word
    // Returns S_OK on success; no other success value.
    // Various failure return values.
    HRESULT IsNoiseWord([in] LPCWSTR pszWord,
                        [in] LCID lcid,
                        [out, retval] BOOL* pfIsNoise);
#endif

    //**********************************************************************
    //
    // Word breakers/stemmers
    //
    //**********************************************************************

    // Return an interface to the word breaker registered for a
    // specific language.
    // Returns S_OK on success; no other success value.
    // Various failure return values.
    HRESULT LoadWordBreaker([in] LCID lcid,
                            [in] REFIID riid,
                            [out, iid_is(riid)] void** ppWordBreaker,
                            [out] LCID* pLcidUsed);

    // Return an interface to the stemmer registered for a specific
    // language.
    // Returns S_OK on success; no other success value.
    // Various failure return values.
    HRESULT LoadStemmer([in] LCID lcid,
                        [in] REFIID riid,
                        [out, iid_is(riid)] void** ppStemmer,
                        [out] LCID* pLcidUsed);

    // Ask whether the query token is a prefix of the document token,
    // when disregarding case, width and (optionally) diacritics.
    // If this is the case, S_OK is returned and *pulPrefixLength is set to the number
    // of characters that were matched in the document token (this is typically
    // but not necessarily the same as the number of characters in the query token).
    // If the (whole) query token is not a prefix of the document token,
    // S_FALSE is returned and *pulPrefixLength is set to zero.
    // Various failure return values.
    HRESULT IsPrefixNormalized([in, size_is(cwcQueryToken)] LPCWSTR pwcsQueryToken,
                               [in] ULONG cwcQueryToken,
                               [in, size_is(cwcDocumentToken)] LPCWSTR pwcsDocumentToken,
                               [in] ULONG cwcDocumentToken,
                               [out] ULONG* pulPrefixLength);
}

