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