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