xref: /reactos/sdk/include/psdk/mlang.idl (revision 40462c92)
1/*
2 * Copyright (C) 2004 Mike McCormack
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17 */
18
19#ifndef DO_NO_IMPORTS
20import "unknwn.idl";
21#endif
22
23interface IStream;
24
25cpp_quote("#define CPIOD_PEEK          0x40000000")
26cpp_quote("#define CPIOD_FORCE_PROMPT  0x80000000")
27
28[
29    uuid(275c23e0-3747-11d0-9fea-00aa003f8646),
30    lcid(0x0000),
31    version(0.2)
32]
33library MultiLanguage
34{
35    importlib("stdole2.tlb");
36
37[
38  object,
39  uuid(359f3443-bd4a-11d0-b188-00aa0038c969),
40  pointer_default(unique)
41]
42interface IMLangCodePages : IUnknown
43{
44    HRESULT GetCharCodePages(
45        [in] WCHAR chSrc,
46        [out] DWORD *pdwCodePages);
47    HRESULT GetStrCodePages(
48        [in, size_is(cchSrc)] const WCHAR *pszSrc,
49        [in] LONG cchSrc,
50        [in] DWORD dwPriorityCodePages,
51        [out] DWORD *pdwCodePages,
52        [out] LONG *pcchCodePages);
53    HRESULT CodePageToCodePages(
54        [in] UINT uCodePage,
55        [out] DWORD *pdwCodePages);
56    HRESULT CodePagesToCodePage(
57        [in] DWORD dwCodePages,
58        [in] UINT uDefaultCodePage,
59        [out] UINT *puCodePage);
60}
61
62[
63  object,
64  uuid(359f3441-bd4a-11d0-b188-00aa0038c969),
65  pointer_default(unique)
66]
67interface IMLangFontLink : IMLangCodePages
68{
69    HRESULT GetFontCodePages(
70        [in] HDC hDC,
71        [in] HFONT hFont,
72        [out] DWORD *pdwCodePages );
73
74    HRESULT MapFont(
75        [in] HDC hDC,
76        [in] DWORD dwCodePages,
77        [in] HFONT hSrcFont,
78        [out] HFONT *phDestFont);
79
80    HRESULT ReleaseFont(
81        [in] HFONT hFont);
82
83    HRESULT ResetFontMapping();
84}
85
86[
87  object,
88  uuid(ae5f1430-388b-11d2-8380-00c04f8f5da1),
89  pointer_default(unique)
90]
91interface IEnumScript : IUnknown
92{
93    const USHORT MAX_SCRIPT_NAME = 48;
94    const USHORT MAX_MIMEFACE_NAME = 32;
95
96    typedef BYTE SCRIPT_ID;
97    typedef __int64 SCRIPT_IDS;
98
99    typedef enum tagSCRIPTCONTF
100    {
101        sidDefault = 0,
102        sidMerge = sidDefault + 1,
103        sidAsciiSym = sidMerge + 1,
104        sidAsciiLatin = sidAsciiSym + 1,
105        sidLatin = sidAsciiLatin + 1,
106        sidGreek = sidLatin + 1,
107        sidCyrillic = sidGreek + 1,
108        sidArmenian = sidCyrillic + 1,
109        sidHebrew = sidArmenian + 1,
110        sidArabic = sidHebrew + 1,
111        sidDevanagari = sidArabic + 1,
112        sidBengali = sidDevanagari + 1,
113        sidGurmukhi = sidBengali + 1,
114        sidGujarati = sidGurmukhi + 1,
115        sidOriya = sidGujarati + 1,
116        sidTamil = sidOriya + 1,
117        sidTelugu = sidTamil + 1,
118        sidKannada = sidTelugu + 1,
119        sidMalayalam = sidKannada + 1,
120        sidThai = sidMalayalam + 1,
121        sidLao = sidThai + 1,
122        sidTibetan = sidLao + 1,
123        sidGeorgian = sidTibetan + 1,
124        sidHangul = sidGeorgian + 1,
125        sidKana = sidHangul + 1,
126        sidBopomofo = sidKana + 1,
127        sidHan = sidBopomofo + 1,
128        sidEthiopic = sidHan + 1,
129        sidCanSyllabic = sidEthiopic + 1,
130        sidCherokee = sidCanSyllabic + 1,
131        sidYi = sidCherokee + 1,
132        sidBraille = sidYi + 1,
133        sidRunic = sidBraille + 1,
134        sidOgham = sidRunic + 1,
135        sidSinhala = sidOgham + 1,
136        sidSyriac = sidSinhala + 1,
137        sidBurmese = sidSyriac + 1,
138        sidKhmer = sidBurmese + 1,
139        sidThaana = sidKhmer + 1,
140        sidMongolian = sidThaana + 1,
141        sidUserDefined = sidMongolian + 1,
142        sidLim = sidUserDefined + 1,
143        sidFEFirst = sidHangul,
144        sidFELast = sidHan
145    } SCRIPTCONTF;
146
147    typedef enum tagSCRIPTFONTCONTF
148    {
149        SCRIPTCONTF_FIXED_FONT = 0x1,
150        SCRIPTCONTF_PROPORTIONAL_FONT = 0x2,
151        SCRIPTCONTF_SCRIPT_USER = 0x10000,
152        SCRIPTCONTF_SCRIPT_HIDE = 0x20000,
153        SCRIPTCONTF_SCRIPT_SYSTEM = 0x40000
154    } SCRIPTFONTCONTF;
155
156    typedef struct tagSCRIPFONTINFO
157    {
158        SCRIPT_IDS scripts;
159        WCHAR wszFont[MAX_MIMEFACE_NAME];
160    } SCRIPTFONTINFO, *PSCRIPTFONTINFO;
161
162    typedef struct tagSCRIPTINFO {
163        SCRIPT_ID ScriptId;
164        UINT uiCodePage;
165        WCHAR wszDescription[MAX_SCRIPT_NAME];
166        WCHAR wszFixedWidthFont[MAX_MIMEFACE_NAME];
167        WCHAR wszProportionalFont[MAX_MIMEFACE_NAME];
168    } SCRIPTINFO, *PSCRIPTINFO;
169
170    HRESULT Clone(
171        [out] IEnumScript **ppEnum);
172
173    HRESULT Next(
174        [in] ULONG celt,
175        [out] PSCRIPTINFO rgelt,
176        [out] ULONG *pceltFetched);
177
178    HRESULT Reset();
179
180    HRESULT Skip(
181        [in] ULONG celt);
182}
183
184[
185  object,
186  uuid(dccfc162-2b38-11d2-b7ec-00c04f8f5d9a),
187  pointer_default(unique)
188]
189interface IMLangFontLink2 : IMLangCodePages
190{
191    typedef struct tagUNICODERANGE
192    {
193        WCHAR wcFrom;
194        WCHAR wcTo;
195    } UNICODERANGE;
196
197    typedef [unique] IMLangFontLink2 *PMLANGFONTLINK2;
198
199    HRESULT GetFontCodePages(
200        [in] HDC hDC,
201        [in] HFONT hFont,
202        [out] DWORD *pdwCodePages );
203
204    HRESULT ReleaseFont(
205        [in] HFONT hFont);
206
207    HRESULT ResetFontMapping();
208
209    HRESULT MapFont(
210        [in] HDC hDC,
211        [in] DWORD dwCodePages,
212        [in] WCHAR chSrc,
213        [out] HFONT *pFont);
214
215    HRESULT GetFontUnicodeRanges(
216        [in] HDC hDC,
217        [in,out] UINT *puiRanges,
218        [out] UNICODERANGE* pUranges);
219
220    HRESULT GetScriptFontInfo(
221        [in] SCRIPT_ID sid,
222        [in] DWORD dwFlags,
223        [in,out] UINT *puiFonts,
224        [out] SCRIPTFONTINFO* pScriptFont);
225
226    HRESULT CodePageToScriptID(
227        [in] UINT uiCodePage,
228        [out] SCRIPT_ID *pSid);
229}
230
231[
232 object,
233 uuid(c04d65ce-b70d-11d0-b188-00aa0038c969),
234 pointer_default(unique)
235]
236interface IMLangString : IUnknown
237{
238#ifdef NEWMLSTR
239    HRESULT LockMLStr(
240        [in] LONG lPos,
241        [in] DWORD dwFlags,
242        [out] DWORD* pdwCookie,
243        [out] LONG* plActualPos,
244        [out] LONG* plActualLen);
245
246    HRESULT UnlockMLStr(
247        [in] DWORD dwCookie);
248#else
249    HRESULT Sync(
250        [in] BOOL fNoAccess);
251#endif
252    HRESULT GetLength(
253        [out, retval] LONG* plLen);
254    HRESULT SetMLStr(
255        [in] LONG lDestPos,
256        [in] LONG lDestLen,
257        [in] IUnknown *pSrcMLStr,
258        [in] LONG lSrcPos,
259        [in] LONG lSrcLen);
260#ifdef NEWMLSTR
261    HRESULT RegisterAttr(
262        [in] IUnknown *pUnk,
263        [out] DWORD* pdwCookie);
264    HRESULT UnregisterAttr(
265        [in] DWORD dwCookie);
266    HRESULT EnumAttr(
267        [out] IEnumUnknown **ppEnumUnk);
268    HRESULT FindAttr(
269        [in] REFIID riid,
270        [in] LPARAM lParam,
271        [out] IUnknown **ppUnk);
272#else
273    HRESULT GetMLStr(
274        [in] LONG lSrcPos,
275        [in] LONG lSrcLen,
276        [in] IUnknown *pUnkOuter,
277        [in] DWORD dwClsContext,
278        [in] const IID* piid,
279        [out] IUnknown** ppDestMLStr,
280        [out] LONG* plDestPos,
281        [out] LONG* plDestLen);
282#endif
283}
284
285[
286 object,
287 uuid(f5be2ee1-bfd7-11d0-b188-00aa0038c969),
288 pointer_default(unique)
289]
290interface IMLangLineBreakConsole : IUnknown
291{
292    HRESULT BreakLineML(
293        [in] IMLangString* pSrcMLStr,
294        [in] LONG lSrcPos,
295        [in] LONG lSrcLen,
296        [in] LONG cMinColumns,
297        [in] LONG cMaxColumns,
298        [out] LONG* plLineLen,
299        [out] LONG* plSkipLen);
300
301    HRESULT BreakLineW(
302        [in] LCID locale,
303        [in, size_is(cchSrc)] const WCHAR* pszSrc,
304        [in] LONG cchSrc,
305        [in] LONG cMaxColumns,
306        [out] LONG* pcchLine,
307        [out] LONG* pcchSkip );
308
309    HRESULT BreakLineA(
310        [in] LCID locale,
311        [in] UINT uCodePage,
312        [in, size_is(cchSrc)] const CHAR* pszSrc,
313        [in] LONG cchSrc,
314        [in] LONG cMaxColumns,
315        [out] LONG* pcchLine,
316        [out] LONG* pcchSkip);
317}
318
319[
320      object,
321      uuid(275c23e3-3747-11d0-9fea-00aa003f8646),
322      pointer_default(unique)
323]
324interface IEnumCodePage : IUnknown
325{
326    const USHORT MAX_MIMECP_NAME = 64;
327    const USHORT MAX_MIMECSET_NAME = 50;
328
329        typedef enum tagMIMECONTF
330        {
331        MIMECONTF_MAILNEWS = 0x00000001,
332        MIMECONTF_BROWSER = 0x00000002,
333        MIMECONTF_MINIMAL = 0x00000004,
334        MIMECONTF_IMPORT = 0x00000008,
335        MIMECONTF_SAVABLE_MAILNEWS = 0x00000100,
336        MIMECONTF_SAVABLE_BROWSER = 0x00000200,
337        MIMECONTF_EXPORT = 0x00000400,
338        MIMECONTF_PRIVCONVERTER = 0x00010000,
339        MIMECONTF_VALID = 0x00020000,
340        MIMECONTF_VALID_NLS = 0x00040000,
341        MIMECONTF_MIME_IE4 = 0x10000000,
342        MIMECONTF_MIME_LATEST = 0x20000000,
343        MIMECONTF_MIME_REGISTRY = 0x40000000
344        } MIMECONTF;
345
346    typedef struct tagMIMECPINFO {
347        DWORD dwFlags;
348        UINT uiCodePage;
349        UINT uiFamilyCodePage;
350        WCHAR wszDescription[MAX_MIMECP_NAME];
351        WCHAR wszWebCharset[MAX_MIMECSET_NAME];
352        WCHAR wszHeaderCharset[MAX_MIMECSET_NAME];
353        WCHAR wszBodyCharset[MAX_MIMECSET_NAME];
354        WCHAR wszFixedWidthFont[MAX_MIMEFACE_NAME];
355        WCHAR wszProportionalFont[MAX_MIMEFACE_NAME];
356        BYTE bGDICharset;
357    } MIMECPINFO, *PMIMECPINFO;
358
359        typedef struct tagMIMECSETINFO
360        {
361        UINT uiCodePage;
362        UINT uiInternetEncoding;
363        WCHAR wszCharset[MAX_MIMECSET_NAME];
364        } MIMECSETINFO, *PMIMECSETINFO;
365
366    HRESULT Clone(
367        [out] IEnumCodePage **ppEnum);
368
369    HRESULT Next(
370        [in] ULONG celt,
371        [out] PMIMECPINFO rgelt,
372        [out] ULONG *pceltFetched);
373
374        HRESULT Reset();
375
376    HRESULT Skip(
377        [in] ULONG celt);
378}
379
380[
381      object,
382      uuid(d66d6f98-cdaa-11d0-b822-00c04fc9b31f),
383      pointer_default(unique)
384]
385interface IMLangConvertCharset : IUnknown
386{
387    typedef enum tagMLCONVCHARF
388    {
389        MLCONVCHARF_AUTODETECT      = 1,
390        MLCONVCHARF_ENTITIZE        = 2,
391        MLCONVCHARF_NCR_ENTITIZE    = 2,
392        MLCONVCHARF_NAME_ENTITIZE   = 4,
393        MLCONVCHARF_USEDEFCHAR      = 8,
394        MLCONVCHARF_NOBESTFITCHARS  = 16,
395        MLCONVCHARF_DETECTJPN       = 32
396    } MLCONVCHAR;
397
398    typedef enum tagMLCPF
399    {
400        MLDETECTF_MAILNEWS              = 0x0001,
401        MLDETECTF_BROWSER               = 0x0002,
402        MLDETECTF_VALID                 = 0x0004,
403        MLDETECTF_VALID_NLS             = 0x0008,
404        MLDETECTF_PRESERVE_ORDER        = 0x0010,
405        MLDETECTF_PREFERRED_ONLY        = 0x0020,
406        MLDETECTF_FILTER_SPECIALCHAR    = 0x0040,
407        MLDETECTF_EURO_UTF8             = 0x0080
408    } MLCP;
409
410    HRESULT Initialize(
411        [in] UINT uiSrcCodePage,
412        [in] UINT uiDstCodePage,
413        [in] DWORD dwProperty);
414
415    HRESULT GetSourceCodePage(
416        [out] UINT *puiSrcCodePage);
417
418    HRESULT GetDestinationCodePage(
419        [out] UINT *puiDstCodePage);
420
421    HRESULT GetProperty(
422        [out] DWORD *pdwProperty);
423
424    HRESULT DoConversion(
425        [in] BYTE *pSrcStr,
426        [in,out] UINT *pcSrcSize,
427        [in] BYTE *pDstStr,
428        [in,out] UINT *pcDstSize);
429
430    HRESULT DoConversionToUnicode(
431        [in] CHAR *pSrcStr,
432        [in,out] UINT *pcSrcSize,
433        [in] WCHAR *pDstStr,
434        [in,out] UINT *pcDstSize);
435
436    HRESULT DoConversionFromUnicode(
437        [in] WCHAR *pSrcStr,
438        [in,out] UINT *pcSrcSize,
439        [in] CHAR *pDstStr,
440        [in,out] UINT *pcDstSize);
441}
442
443[
444    uuid(d66d6f99-cdaa-11d0-b822-00c04fc9b31f)
445]
446coclass CMLangConvertCharset
447{
448    [default] interface IMLangConvertCharset;
449};
450
451[
452      object,
453      uuid(3dc39d1d-c030-11d0-b81b-00c04fc9b31f),
454      pointer_default(unique)
455]
456interface IEnumRfc1766 : IUnknown
457{
458    const USHORT MAX_RFC1766_NAME = 6;
459    const USHORT MAX_LOCALE_NAME = 32;
460
461        typedef struct tagRFC1766INFO
462        {
463        LCID lcid;
464        WCHAR wszRfc1766[MAX_RFC1766_NAME];
465        WCHAR wszLocaleName[MAX_LOCALE_NAME];
466        } RFC1766INFO, *PRFC1766INFO;
467
468    HRESULT Clone(
469        [out] IEnumRfc1766 **ppEnum);
470
471    HRESULT Next(
472        [in] ULONG celt,
473        [out] PRFC1766INFO rgelt,
474        [out] ULONG *pceltFetched);
475
476    HRESULT Reset();
477
478    HRESULT Skip(
479        [in] ULONG celt);
480}
481
482[
483      object,
484      uuid(275c23e1-3747-11d0-9fea-00aa003f8646),
485      pointer_default(unique)
486]
487interface IMultiLanguage : IUnknown
488{
489    HRESULT GetNumberOfCodePageInfo(
490        [out] UINT *pcCodePage);
491
492    HRESULT GetCodePageInfo(
493        [in] UINT uiCodePage,
494        [out] PMIMECPINFO pCodePageInfo);
495
496    HRESULT GetFamilyCodePage(
497        [in] UINT uiCodePage,
498        [out] UINT *puiFamilyCodePage);
499
500    HRESULT EnumCodePages(
501        [in] DWORD grfFlags,
502        [out] IEnumCodePage **ppEnumCodePage);
503
504    HRESULT GetCharsetInfo(
505        [in] BSTR Charset,
506        [in] PMIMECSETINFO pCharsetInfo);
507
508    HRESULT IsConvertible(
509        [in] DWORD dwSrcEncoding,
510        [in] DWORD dwDstEncoding);
511
512    HRESULT ConvertString(
513        [in,out] DWORD *pdwMode,
514        [in] DWORD dwSrcEncoding,
515        [in] DWORD dwDstEncoding,
516        [in] BYTE *pSrcStr,
517        [in,out] UINT *pcSrcSize,
518        [in] BYTE *pDstStr,
519        [in,out] UINT *pcDstSize);
520
521    HRESULT ConvertStringToUnicode(
522        [in,out] DWORD *pdwMode,
523        [in] DWORD dwEncoding,
524        [in] CHAR *pSrcStr,
525        [in,out] UINT *pcSrcSize,
526        [in] WCHAR *pDstStr,
527        [in,out] UINT *pcDstSize);
528
529    HRESULT ConvertStringFromUnicode(
530        [in,out] DWORD *pdwMode,
531        [in] DWORD dwEncoding,
532        [in] WCHAR *pSrcStr,
533        [in,out] UINT *pcSrcSize,
534        [in] CHAR *pDstStr,
535        [in,out] UINT *pcDstSize);
536
537    HRESULT ConvertStringReset();
538
539    HRESULT GetRfc1766FromLcid(
540        [in] LCID Locale,
541        [out] BSTR *pbstrRfc1766);
542
543    HRESULT GetLcidFromRfc1766(
544        [out] LCID *pLocale,
545        [in] BSTR bstrRfc1766);
546
547    HRESULT EnumRfc1766(
548        [out] IEnumRfc1766 **ppEnumRfc1766);
549
550    HRESULT GetRfc1766Info(
551        [in] LCID Locale,
552        [out] PRFC1766INFO pRfc1766Info);
553
554    HRESULT CreateConvertCharset(
555        [in] UINT uiSrcCodePage,
556        [in] UINT uiDstCodePage,
557        [in] DWORD dwProperty,
558        [out] IMLangConvertCharset **ppMLangConvertCharset);
559
560}
561
562[
563      object,
564  uuid(dccfc164-2b38-11d2-b7ec-00c04f8f5d9a),
565  pointer_default(unique)
566]
567interface IMultiLanguage2 : IUnknown
568{
569        typedef struct tagDetectEncodingInfo
570        {
571        UINT nLangID;
572        UINT nCodePage;
573        INT nDocPercent;
574        INT nConfidence;
575        } DetectEncodingInfo, *pDetectEncodingInfo;
576
577    HRESULT GetNumberOfCodePageInfo(
578        [out] UINT *pcCodePage);
579
580    HRESULT GetCodePageInfo(
581        [in] UINT uiCodePage,
582        [in] LANGID LangId,
583        [out] PMIMECPINFO pCodePageInfo);
584
585    HRESULT GetFamilyCodePage(
586        [in] UINT uiCodePage,
587        [out] UINT *puiFamilyCodePage);
588
589    HRESULT EnumCodePages(
590        [in] DWORD grfFlags,
591        [in] LANGID LangId,
592        [out] IEnumCodePage **ppEnumCodePage);
593
594    HRESULT GetCharsetInfo(
595        [in] BSTR Charset,
596        [in] PMIMECSETINFO pCharsetInfo);
597
598    HRESULT IsConvertible(
599        [in] DWORD dwSrcEncoding,
600        [in] DWORD dwDstEncoding);
601
602    HRESULT ConvertString(
603        [in,out] DWORD *pdwMode,
604        [in] DWORD dwSrcEncoding,
605        [in] DWORD dwDstEncoding,
606        [in] BYTE *pSrcStr,
607        [in,out] UINT *pcSrcSize,
608        [in] BYTE *pDstStr,
609        [in,out] UINT *pcDstSize);
610
611    HRESULT ConvertStringToUnicode(
612        [in,out] DWORD *pdwMode,
613        [in] DWORD dwEncoding,
614        [in] CHAR *pSrcStr,
615        [in,out] UINT *pcSrcSize,
616        [in] WCHAR *pDstStr,
617        [in,out] UINT *pcDstSize);
618
619    HRESULT ConvertStringFromUnicode(
620        [in,out] DWORD *pdwMode,
621        [in] DWORD dwEncoding,
622        [in] WCHAR *pSrcStr,
623        [in,out] UINT *pcSrcSize,
624        [in] CHAR *pDstStr,
625        [in,out] UINT *pcDstSize);
626
627    HRESULT ConvertStringReset();
628
629    HRESULT GetRfc1766FromLcid(
630        [in] LCID Locale,
631        [out] BSTR *pbstrRfc1766);
632
633    HRESULT GetLcidFromRfc1766(
634        [out] LCID *pLocale,
635        [in] BSTR bstrRfc1766);
636
637    HRESULT EnumRfc1766(
638        [in] LANGID LangId,
639        [out] IEnumRfc1766 **ppEnumRfc1766);
640
641    HRESULT GetRfc1766Info(
642        [in] LCID Locale,
643        [in] LANGID LangId,
644        [out] PRFC1766INFO pRfc1766Info);
645
646    HRESULT CreateConvertCharset(
647        [in] UINT uiSrcCodePage,
648        [in] UINT uiDstCodePage,
649        [in] DWORD dwProperty,
650        [out] IMLangConvertCharset **ppMLangConvertCharset);
651
652    HRESULT ConvertStringInIStream(
653        [in,out] DWORD *pdwMode,
654        [in] DWORD dwFlag,
655        [in] WCHAR *lpFallBack,
656        [in] DWORD dwSrcEncoding,
657        [in] DWORD dwDstEncoding,
658        [in] IStream *pstmIn,
659        [in] IStream *pstmOut);
660
661    HRESULT ConvertStringToUnicodeEx(
662        [in,out] DWORD *pdwMode,
663        [in] DWORD dwEncoding,
664        [in] CHAR *pSrcStr,
665        [in,out] UINT *pcSrcSize,
666        [in] WCHAR *pDstStr,
667        [in,out] UINT *pcDstSize,
668        [in] DWORD dwFlag,
669        [in] WCHAR *lpFallBack);
670
671    HRESULT ConvertStringFromUnicodeEx(
672        [in,out] DWORD *pdwMode,
673        [in] DWORD dwEncoding,
674        [in] WCHAR *pSrcStr,
675        [in,out] UINT *pcSrcSize,
676        [in] CHAR *pDstStr,
677        [in,out] UINT *pcDstSize,
678        [in] DWORD dwFlag,
679        [in] WCHAR *lpFallBack);
680
681    HRESULT DetectCodepageInIStream(
682        [in] DWORD dwFlag,
683        [in] DWORD dwPrefWinCodePage,
684        [in] IStream *pstmIn,
685        [in,out] DetectEncodingInfo *lpEncoding,
686        [in,out] INT *pnScores);
687
688    HRESULT DetectInputCodepage(
689        [in] DWORD dwFlag,
690        [in] DWORD dwPrefWinCodePage,
691        [in] CHAR *pSrcStr,
692        [in,out] INT *pcSrcSize,
693        [in,out] DetectEncodingInfo *lpEncoding,
694        [in,out] INT *pnScores);
695
696    HRESULT ValidateCodePage(
697        [in] UINT uiCodePage,
698        [in] HWND hwnd);
699
700    HRESULT GetCodePageDescription(
701        [in] UINT uiCodePage,
702        [in] LCID lcid,
703        [in,out,size_is(cchWideChar)] LPWSTR lpWideCharStr,
704        [in] int cchWideChar);
705
706    HRESULT IsCodePageInstallable(
707        [in] UINT uiCodePage);
708
709    HRESULT SetMimeDBSource(
710        [in] MIMECONTF dwSource);
711
712    HRESULT GetNumberOfScripts(
713        [out] UINT *pnScripts);
714
715    HRESULT EnumScripts(
716        [in] DWORD dwFlags,
717        [in] LANGID LangId,
718        [out] IEnumScript **ppEnumScript);
719
720    HRESULT ValidateCodePageEx( /* undocumented on MSDN */
721        [in] UINT uiCodePage,
722        [in] HWND hwnd,
723        [in] DWORD dwfIODControl);
724}
725
726[
727      object,
728      uuid(4e5868ab-b157-4623-9acc-6a1d9caebe04),
729      pointer_default(unique)
730]
731interface IMultiLanguage3 : IMultiLanguage2
732{
733       typedef [unique] IMultiLanguage3 *LPMULTILANGUAGE3;
734       HRESULT DetectOutboundCodePage(
735        [in] DWORD dwFlags,
736        [in] LPCWSTR lpWideCharStr,
737        [in] UINT cchWideChar,
738        [in] UINT *puiPreferredCodePages,
739        [in] UINT nPreferredCodePages,
740        [in] UINT *puiDetectedCodePages,
741        [in, out] UINT *pnDetectedCodePages,
742        [in] WCHAR *lpSpecialChar);
743
744       HRESULT DetectOutboundCodePageInIStream(
745        [in] DWORD dwFlags,
746        [in] IStream *pStrIn,
747        [in] UINT *puiPreferredCodePages,
748        [in] UINT nPreferredCodePages,
749        [in] UINT *puiDetectedCodePages,
750        [in, out] UINT *pnDetectedCodePages,
751        [in] WCHAR *lpSpecialChar);
752}
753
754[
755    uuid(275C23E2-3747-11d0-9FEA-00AA003f8646)
756]
757coclass CMultiLanguage
758{
759        [default] interface IMultiLanguage;
760        interface IMLangCodePages;
761        interface IMLangFontLink;
762    /* interface IMLangLineBreakConsole; */
763        interface IMLangFontLink2;
764};
765
766} // library MultiLanguage
767
768cpp_quote("STDAPI LcidToRfc1766A(LCID, LPSTR, INT);")
769cpp_quote("STDAPI LcidToRfc1766W(LCID, LPWSTR, INT);")
770cpp_quote("#define LcidToRfc1766 WINELIB_NAME_AW(LcidToRfc1766)")
771
772cpp_quote("STDAPI Rfc1766ToLcidA(LCID *, LPCSTR);")
773cpp_quote("STDAPI Rfc1766ToLcidW(LCID *, LPCWSTR);")
774cpp_quote("#define Rfc1766ToLcid WINELIB_NAME_AW(Rfc1766ToLcid)")
775
776cpp_quote("STDAPI GetGlobalFontLinkObject(void **unknown);")
777cpp_quote("STDAPI IsConvertINetStringAvailable(DWORD, DWORD);")
778cpp_quote("STDAPI ConvertINetString(LPDWORD, DWORD, DWORD, LPCSTR, LPINT, LPSTR, LPINT);")
779cpp_quote("STDAPI ConvertINetMultiByteToUnicode(LPDWORD, DWORD, LPCSTR, LPINT, LPWSTR, LPINT);")
780cpp_quote("STDAPI ConvertINetUnicodeToMultiByte(LPDWORD, DWORD, LPCWSTR, LPINT, LPSTR, LPINT);")
781