/*
 * Copyright (C) 2004 Mike McCormack
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#ifndef DO_NO_IMPORTS
import "unknwn.idl";
#endif

interface IStream;

/* FIXME: LANGID is defined in winnt.h and mlang.h in the platform SDK */
cpp_quote("#ifndef _WINNT_")
typedef WORD LANGID;
cpp_quote("#endif")

[
  object,
  uuid(359f3443-bd4a-11d0-b188-00aa0038c969),
  pointer_default(unique)
]
interface IMLangCodePages : IUnknown
{
    HRESULT GetCharCodePages(      
        [in] WCHAR chSrc,
        DWORD *pdwCodePages);
    HRESULT GetStrCodePages(      
        [in, size_is(cchSrc)] const WCHAR *pszSrc,
        [in] long cchSrc,
        [in] DWORD dwPriorityCodePages,
        [out] DWORD *pdwCodePages,
        [out] long *pcchCodePages);
    HRESULT CodePageToCodePages(      
        [in] UINT uCodePage,
        [out] DWORD *pdwCodePages);
    HRESULT CodePagesToCodePage(      
        [in] DWORD dwCodePages,
        [in] UINT uDefaultCodePage,
        [out] UINT *puCodePage);
}

[
  object,
  uuid(359f3441-bd4a-11d0-b188-00aa0038c969),
  pointer_default(unique)
]
interface IMLangFontLink : IMLangCodePages
{
    HRESULT GetFontCodePages(
        [in] HDC hDC,
        [in] HFONT hFont,
        [out] DWORD *pdwCodePages );

    HRESULT MapFont(      
        [in] HDC hDC,
        [in] DWORD dwCodePages,
        [in] HFONT hSrcFont,
        [out] HFONT *phDestFont);

    HRESULT ReleaseFont(      
        [in] HFONT hFont);

    HRESULT ResetFontMapping();
}

[
  object,
  uuid(ae5f1430-388b-11d2-8380-00c04f8f5da1),
  pointer_default(unique)
]
interface IEnumScript : IUnknown
{
    const USHORT MAX_SCRIPT_NAME = 48;
    const USHORT MAX_MIMEFACE_NAME = 32;

    typedef BYTE SCRIPT_ID;
    typedef __int64 SCRIPT_IDS;

    typedef enum tagSCRIPTCONTF
    {
        sidDefault = 0,
        sidMerge = sidDefault + 1,
        sidAsciiSym = sidMerge + 1,
        sidAsciiLatin = sidAsciiSym + 1,
        sidLatin = sidAsciiLatin + 1,
        sidGreek = sidLatin + 1,
        sidCyrillic = sidGreek + 1,
        sidArmenian = sidCyrillic + 1,
        sidHebrew = sidArmenian + 1,
        sidArabic = sidHebrew + 1,
        sidDevanagari = sidArabic + 1,
        sidBengali = sidDevanagari + 1,
        sidGurmukhi = sidBengali + 1,
        sidGujarati = sidGurmukhi + 1,
        sidOriya = sidGujarati + 1,
        sidTamil = sidOriya + 1,
        sidTelugu = sidTamil + 1,
        sidKannada = sidTelugu + 1,
        sidMalayalam = sidKannada + 1,
        sidThai = sidMalayalam + 1,
        sidLao = sidThai + 1,
        sidTibetan = sidLao + 1,
        sidGeorgian = sidTibetan + 1,
        sidHangul = sidGeorgian + 1,
        sidKana = sidHangul + 1,
        sidBopomofo = sidKana + 1,
        sidHan = sidBopomofo + 1,
        sidEthiopic = sidHan + 1,
        sidCanSyllabic = sidEthiopic + 1,
        sidCherokee = sidCanSyllabic + 1,
        sidYi = sidCherokee + 1,
        sidBraille = sidYi + 1,
        sidRunic = sidBraille + 1,
        sidOgham = sidRunic + 1,
        sidSinhala = sidOgham + 1,
        sidSyriac = sidSinhala + 1,
        sidBurmese = sidSyriac + 1,
        sidKhmer = sidBurmese + 1,
        sidThaana = sidKhmer + 1,
        sidMongolian = sidThaana + 1,
        sidUserDefined = sidMongolian + 1,
        sidLim = sidUserDefined + 1,
        sidFEFirst = sidHangul,
        sidFELast = sidHan
    } SCRIPTCONTF;

    typedef enum tagSCRIPTFONTCONTF
    {
        SCRIPTCONTF_FIXED_FONT = 0x1,
        SCRIPTCONTF_PROPORTIONAL_FONT = 0x2,
        SCRIPTCONTF_SCRIPT_USER = 0x10000,
        SCRIPTCONTF_SCRIPT_HIDE = 0x20000,
        SCRIPTCONTF_SCRIPT_SYSTEM = 0x40000
    } SCRIPTFONTCONTF;

    typedef struct tagSCRIPFONTINFO
    {
        SCRIPT_IDS scripts;
        WCHAR wszFont[MAX_MIMEFACE_NAME];
    } SCRIPTFONTINFO, *PSCRIPTFONTINFO;

    typedef struct tagSCRIPTINFO {
        SCRIPT_ID ScriptId;
        UINT uiCodePage;
        WCHAR wszDescription[MAX_SCRIPT_NAME];
        WCHAR wszFixedWidthFont[MAX_MIMEFACE_NAME];
        WCHAR wszProportionalFont[MAX_MIMEFACE_NAME];
    } SCRIPTINFO, *PSCRIPTINFO;

    HRESULT Clone( 
        [out] IEnumScript **ppEnum);

    HRESULT Next(      
        [in] ULONG celt,
        [out] PSCRIPTINFO rgelt,
        [out] ULONG *pceltFetched);

    HRESULT Reset();

    HRESULT Skip(      
        [in] ULONG celt);
}

[
  object,
  uuid(275c23e3-3747-11d0-9fea-00aa003f8646),
  pointer_default(unique)
]
interface IEnumCodePage : IUnknown
{
    const USHORT MAX_MIMECP_NAME = 64;
    const USHORT MAX_MIMECSET_NAME = 50;

    typedef enum tagMIMECONTF
    {
        MIMECONTF_MAILNEWS = 0x00000001,
        MIMECONTF_BROWSER = 0x00000002,
        MIMECONTF_MINIMAL = 0x00000004,
        MIMECONTF_IMPORT = 0x00000008,
        MIMECONTF_SAVABLE_MAILNEWS = 0x00000100,
        MIMECONTF_SAVABLE_BROWSER = 0x00000200,
        MIMECONTF_EXPORT = 0x00000400,
        MIMECONTF_PRIVCONVERTER = 0x00010000,
        MIMECONTF_VALID = 0x00020000,
        MIMECONTF_VALID_NLS = 0x00040000,
        MIMECONTF_MIME_IE4 = 0x10000000,
        MIMECONTF_MIME_LATEST = 0x20000000,
        MIMECONTF_MIME_REGISTRY = 0x40000000
    } MIMECONTF;

    typedef struct tagMIMECPINFO {
        DWORD dwFlags;
        UINT uiCodePage;
        UINT uiFamilyCodePage;
        WCHAR wszDescription[MAX_MIMECP_NAME];
        WCHAR wszWebCharset[MAX_MIMECSET_NAME];
        WCHAR wszHeaderCharset[MAX_MIMECSET_NAME];
        WCHAR wszBodyCharset[MAX_MIMECSET_NAME];
        WCHAR wszFixedWidthFont[MAX_MIMEFACE_NAME];
        WCHAR wszProportionalFont[MAX_MIMEFACE_NAME];
        BYTE bGDICharset;
    } MIMECPINFO, *PMIMECPINFO;

    typedef struct tagMIMECSETINFO
    {
        UINT uiCodePage;
        UINT uiInternetEncoding;
        WCHAR wszCharset[MAX_MIMECSET_NAME];
    } MIMECSETINFO, *PMIMECSETINFO;

    HRESULT Clone( 
        [out] IEnumCodePage **ppEnum);

    HRESULT Next(      
        [in] ULONG celt,
        [out] PMIMECPINFO rgelt,
        [out] ULONG *pceltFetched);

    HRESULT Reset();

    HRESULT Skip(      
        [in] ULONG celt);
}

[
  object,
  uuid(d66d6f98-cdaa-11d0-b822-00c04fc9b31f),
  pointer_default(unique)
]
interface IMLangConvertCharset : IUnknown
{
    HRESULT Initialize(      
        [in] UINT uiSrcCodePage,
        [in] UINT uiDstCodePage,
        [in] DWORD dwProperty);

    HRESULT GetSourceCodePage(      
        [out] UINT *puiSrcCodePage);

    HRESULT GetDestinationCodePage(      
        [out] UINT *puiDstCodePage);

    HRESULT GetProperty(      
        [out] DWORD *pdwProperty);

    HRESULT DoConversion(      
        [in] BYTE *pSrcStr,
        [in,out] UINT *pcSrcSize,
        [in] BYTE *pDstStr,
        [in,out] UINT *pcDstSize);

    HRESULT DoConversionToUnicode(      
        [in] CHAR *pSrcStr,
        [in,out] UINT *pcSrcSize,
        [in] WCHAR *pDstStr,
        [in,out] UINT *pcDstSize);

    HRESULT DoConversionFromUnicode(      
        [in] WCHAR *pSrcStr,
        [in,out] UINT *pcSrcSize,
        [in] CHAR *pDstStr,
        [in,out] UINT *pcDstSize);
}

[
    uuid(d66d6f99-cdaa-11d0-b822-00c04fc9b31f)
]
coclass CMLangConvertCharset
{
    [default] interface IMLangConvertCharset;
};

[
  object,
  uuid(3dc39d1d-c030-11d0-b81b-00c04fc9b31f),
  pointer_default(unique)
]
interface IEnumRfc1766 : IUnknown
{
    const USHORT MAX_RFC1766_NAME = 6;
    const USHORT MAX_LOCALE_NAME = 32;

    typedef struct tagRFC1766INFO
    {
        LCID lcid;
        WCHAR wszRfc1766[MAX_RFC1766_NAME];
        WCHAR wszLocaleName[MAX_LOCALE_NAME];
    } RFC1766INFO, *PRFC1766INFO;

    HRESULT Clone( 
        [out] IEnumRfc1766 **ppEnum);

    HRESULT Next(      
        [in] ULONG celt,
        [out] PRFC1766INFO rgelt,
        [out] ULONG *pceltFetched);

    HRESULT Reset();

    HRESULT Skip(      
        [in] ULONG celt);
}

[
  object,
  uuid(275c23e1-3747-11d0-9fea-00aa003f8646),
  pointer_default(unique)
]
interface IMultiLanguage : IUnknown
{
    HRESULT GetNumberOfCodePageInfo(      
        [out] UINT *pcCodePage);

    HRESULT GetCodePageInfo(      
        [in] UINT uiCodePage,
        [out] PMIMECPINFO pCodePageInfo);

    HRESULT GetFamilyCodePage(      
        [in] UINT uiCodePage,
        [out] UINT *puiFamilyCodePage);

    HRESULT EnumCodePages(      
        [in] DWORD grfFlags,
        [out] IEnumCodePage **ppEnumCodePage);

    HRESULT GetCharsetInfo(      
        [in] BSTR Charset,
        [in] PMIMECSETINFO pCharsetInfo);

    HRESULT IsConvertible(      
        [in] DWORD dwSrcEncoding,
        [in] DWORD dwDstEncoding);

    HRESULT ConvertString(      
        [in,out] DWORD *pdwMode,
        [in] DWORD dwSrcEncoding,
        [in] DWORD dwDstEncoding,
        [in] BYTE *pSrcStr,
        [in,out] UINT *pcSrcSize,
        [in] BYTE *pDstStr,
        [in,out] UINT *pcDstSize);

    HRESULT ConvertStringToUnicode(      
        [in,out] DWORD *pdwMode,
        [in] DWORD dwEncoding,
        [in] CHAR *pSrcStr,
        [in,out] UINT *pcSrcSize,
        [in] WCHAR *pDstStr,
        [in,out] UINT *pcDstSize);

    HRESULT ConvertStringFromUnicode(      
        [in,out] DWORD *pdwMode,
        [in] DWORD dwEncoding,
        [in] WCHAR *pSrcStr,
        [in,out] UINT *pcSrcSize,
        [in] CHAR *pDstStr,
        [in,out] UINT *pcDstSize);

    HRESULT ConvertStringReset();

    HRESULT GetRfc1766FromLcid(      
        [in] LCID Locale,
        [out] BSTR *pbstrRfc1766);

    HRESULT GetLcidFromRfc1766(      
        [out] LCID *pLocale,
        [in] BSTR bstrRfc1766);

    HRESULT EnumRfc1766(      
        [out] IEnumRfc1766 **ppEnumRfc1766);

    HRESULT GetRfc1766Info(      
        [in] LCID Locale,
        [out] PRFC1766INFO pRfc1766Info);

    HRESULT CreateConvertCharset(      
        [in] UINT uiSrcCodePage,
        [in] UINT uiDstCodePage,
        [in] DWORD dwProperty,
        [out] IMLangConvertCharset **ppMLangConvertCharset);

}

[
  object,
  uuid(dccfc164-2b38-11d2-b7ec-00c04f8f5d9a),
  pointer_default(unique)
]
interface IMultiLanguage2 : IUnknown
{
    typedef struct tagDetectEncodingInfo
    {
        UINT nLangID;
        UINT nCodePage;
        INT nDocPercent;
        INT nConfidence;
    } DetectEncodingInfo, *pDetectEncodingInfo;

    HRESULT GetNumberOfCodePageInfo(      
        [out] UINT *pcCodePage);

    HRESULT GetCodePageInfo(      
        [in] UINT uiCodePage,
        [in] LANGID LangId,
        [out] PMIMECPINFO pCodePageInfo);

    HRESULT GetFamilyCodePage(      
        [in] UINT uiCodePage,
        [out] UINT *puiFamilyCodePage);

    HRESULT EnumCodePages(      
        [in] DWORD grfFlags,
        [in] LANGID LangId,
        [out] IEnumCodePage **ppEnumCodePage);

    HRESULT GetCharsetInfo(      
        [in] BSTR Charset,
        [in] PMIMECSETINFO pCharsetInfo);

    HRESULT IsConvertible(      
        [in] DWORD dwSrcEncoding,
        [in] DWORD dwDstEncoding);

    HRESULT ConvertString(      
        [in,out] DWORD *pdwMode,
        [in] DWORD dwSrcEncoding,
        [in] DWORD dwDstEncoding,
        [in] BYTE *pSrcStr,
        [in,out] UINT *pcSrcSize,
        [in] BYTE *pDstStr,
        [in,out] UINT *pcDstSize);

    HRESULT ConvertStringToUnicode(      
        [in,out] DWORD *pdwMode,
        [in] DWORD dwEncoding,
        [in] CHAR *pSrcStr,
        [in,out] UINT *pcSrcSize,
        [in] WCHAR *pDstStr,
        [in,out] UINT *pcDstSize);

    HRESULT ConvertStringFromUnicode(      
        [in,out] DWORD *pdwMode,
        [in] DWORD dwEncoding,
        [in] WCHAR *pSrcStr,
        [in,out] UINT *pcSrcSize,
        [in] CHAR *pDstStr,
        [in,out] UINT *pcDstSize);

    HRESULT ConvertStringReset();

    HRESULT GetRfc1766FromLcid(      
        [in] LCID Locale,
        [out] BSTR *pbstrRfc1766);

    HRESULT GetLcidFromRfc1766(      
        [out] LCID *pLocale,
        [in] BSTR bstrRfc1766);

    HRESULT EnumRfc1766(      
        [in] LANGID LangId,
        [out] IEnumRfc1766 **ppEnumRfc1766);

    HRESULT GetRfc1766Info(      
        [in] LCID Locale,
        [in] LANGID LangId,
        [out] PRFC1766INFO pRfc1766Info);

    HRESULT CreateConvertCharset(      
        [in] UINT uiSrcCodePage,
        [in] UINT uiDstCodePage,
        [in] DWORD dwProperty,
        [out] IMLangConvertCharset **ppMLangConvertCharset);

    HRESULT ConvertStringInIStream(      
        [in,out] DWORD *pdwMode,
        [in] DWORD dwFlag,
        [in] WCHAR *lpFallBack,
        [in] DWORD dwSrcEncoding,
        [in] DWORD dwDstEncoding,
        [in] IStream *pstmIn,
        [in] IStream *pstmOut);

    HRESULT ConvertStringToUnicodeEx(      
        [in,out] DWORD *pdwMode,
        [in] DWORD dwEncoding,
        [in] CHAR *pSrcStr,
        [in,out] UINT *pcSrcSize,
        [in] WCHAR *pDstStr,
        [in,out] UINT *pcDstSize,
        [in] DWORD dwFlag,
        [in] WCHAR *lpFallBack);

    HRESULT ConvertStringFromUnicodeEx(
        [in,out] DWORD *pdwMode,
        [in] DWORD dwEncoding,
        [in] WCHAR *pSrcStr,
        [in,out] UINT *pcSrcSize,
        [in] CHAR *pDstStr,
        [in,out] UINT *pcDstSize,
        [in] DWORD dwFlag,
        [in] WCHAR *lpFallBack);

    HRESULT DetectCodepageInIStream(      
        [in] DWORD dwFlag,
        [in] DWORD dwPrefWinCodePage,
        [in] IStream *pstmIn,
        [in,out] DetectEncodingInfo *lpEncoding,
        [in,out] INT *pnScores);

    HRESULT DetectInputCodepage(      
        [in] DWORD dwFlag,
        [in] DWORD dwPrefWinCodePage,
        [in] CHAR *pSrcStr,
        [in,out] INT *pcSrcSize,
        [in,out] DetectEncodingInfo *lpEncoding,
        [in,out] INT *pnScores);

    HRESULT ValidateCodePage(
        [in] UINT uiCodePage,
        [in] HWND hwnd);

    HRESULT GetCodePageDescription(      
        [in] UINT uiCodePage,
        [in] LCID lcid,
        [in,out] LPWSTR lpWideCharStr,
        [in] int cchWideChar);

    HRESULT IsCodePageInstallable(
        [in] UINT uiCodePage);

    HRESULT SetMimeDBSource(      
        [in] MIMECONTF dwSource);

    HRESULT GetNumberOfScripts(      
        [out] UINT *pnScripts);

    HRESULT EnumScripts(      
        [in] DWORD dwFlags,
        [in] LANGID LangId,
        [out] IEnumScript **ppEnumScript);

    HRESULT ValidateCodePageEx( /* undocumented on MSDN */
        [in] UINT uiCodePage,
        [in] HWND hwnd,
        [in] DWORD dwfIODControl);
}

[
    object,
    uuid(4e5868ab-b157-4623-9acc-6a1d9caebe04),
    pointer_default(unique)
]
interface IMultiLanguage3 : IMultiLanguage2
{
    typedef [unique] IMultiLanguage3 *LPMULTILANGUAGE3;
    HRESULT DetectOutboundCodePage(
        [in] DWORD dwFlags,
        [in] LPCWSTR lpWideCharStr,
        [in] UINT cchWideChar,
        [in] UINT *puiPreferredCodePages,
        [in] UINT nPreferredCodePages,
        [in] UINT *puiDetectedCodePages,
        [in, out] UINT *pnDetectedCodePages,
        [in] WCHAR *lpSpecialChar);

    HRESULT DetectOutboundCodePageInIStream(
        [in] DWORD dwFlags,
        [in] IStream *pStrIn,
        [in] UINT *puiPreferredCodePages,
        [in] UINT nPreferredCodePages,
        [in] UINT *puiDetectedCodePages,
        [in, out] UINT *pnDetectedCodePages,
        [in] WCHAR *lpSpecialChar);
}

[
    uuid(275C23E2-3747-11d0-9FEA-00AA003f8646)
]
coclass CMultiLanguage
{
    [default] interface IMultiLanguage;
    interface IMLangCodePages;
    interface IMLangFontLink;
    /* interface IMLangLineBreakConsole; */
}

cpp_quote("STDAPI LcidToRfc1766A(LCID, LPSTR, INT);")
cpp_quote("STDAPI LcidToRfc1766W(LCID, LPWSTR, INT);")
cpp_quote("#define LcidToRfc1766 WINELIB_NAME_AW(LcidToRfc1766)")

cpp_quote("STDAPI Rfc1766ToLcidA(LCID *, LPCSTR);")
cpp_quote("STDAPI Rfc1766ToLcidW(LCID *, LPCWSTR);")
cpp_quote("#define Rfc1766ToLcid WINELIB_NAME_AW(Rfc1766ToLcid)")

cpp_quote("STDAPI GetGlobalFontLinkObject(void);")
cpp_quote("STDAPI IsConvertINetStringAvailable(DWORD, DWORD);")
cpp_quote("STDAPI ConvertINetString(LPDWORD, DWORD, DWORD, LPCSTR, LPINT, LPSTR, LPINT);")
cpp_quote("STDAPI ConvertINetMultiByteToUnicode(LPDWORD, DWORD, LPCSTR, LPINT, LPWSTR, LPINT);")
cpp_quote("STDAPI ConvertINetUnicodeToMultiByte(LPDWORD, DWORD, LPCWSTR, LPINT, LPSTR, LPINT);")
