Create a branch for network fixes.
[reactos.git] / include / psdk / 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 import "unknwn.idl";
20
21 interface IStream;
22
23 /* FIXME: LANGID is defined in winnt.h and mlang.h in the platform SDK */
24 cpp_quote("#ifndef _WINNT_")
25 typedef WORD LANGID;
26 cpp_quote("#endif")
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 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(275c23e3-3747-11d0-9fea-00aa003f8646),
178 pointer_default(unique)
179 ]
180 interface IEnumCodePage : IUnknown
181 {
182 const USHORT MAX_MIMECP_NAME = 64;
183 const USHORT MAX_MIMECSET_NAME = 50;
184
185 typedef enum tagMIMECONTF
186 {
187 MIMECONTF_MAILNEWS = 0x00000001,
188 MIMECONTF_BROWSER = 0x00000002,
189 MIMECONTF_MINIMAL = 0x00000004,
190 MIMECONTF_IMPORT = 0x00000008,
191 MIMECONTF_SAVABLE_MAILNEWS = 0x00000100,
192 MIMECONTF_SAVABLE_BROWSER = 0x00000200,
193 MIMECONTF_EXPORT = 0x00000400,
194 MIMECONTF_PRIVCONVERTER = 0x00010000,
195 MIMECONTF_VALID = 0x00020000,
196 MIMECONTF_VALID_NLS = 0x00040000,
197 MIMECONTF_MIME_IE4 = 0x10000000,
198 MIMECONTF_MIME_LATEST = 0x20000000,
199 MIMECONTF_MIME_REGISTRY = 0x40000000
200 } MIMECONTF;
201
202 typedef struct tagMIMECPINFO {
203 DWORD dwFlags;
204 UINT uiCodePage;
205 UINT uiFamilyCodePage;
206 WCHAR wszDescription[MAX_MIMECP_NAME];
207 WCHAR wszWebCharset[MAX_MIMECSET_NAME];
208 WCHAR wszHeaderCharset[MAX_MIMECSET_NAME];
209 WCHAR wszBodyCharset[MAX_MIMECSET_NAME];
210 WCHAR wszFixedWidthFont[MAX_MIMEFACE_NAME];
211 WCHAR wszProportionalFont[MAX_MIMEFACE_NAME];
212 BYTE bGDICharset;
213 } MIMECPINFO, *PMIMECPINFO;
214
215 typedef struct tagMIMECSETINFO
216 {
217 UINT uiCodePage;
218 UINT uiInternetEncoding;
219 WCHAR wszCharset[MAX_MIMECSET_NAME];
220 } MIMECSETINFO, *PMIMECSETINFO;
221
222 HRESULT Clone(
223 [out] IEnumCodePage **ppEnum);
224
225 HRESULT Next(
226 [in] ULONG celt,
227 [out] PMIMECPINFO rgelt,
228 [out] ULONG *pceltFetched);
229
230 HRESULT Reset();
231
232 HRESULT Skip(
233 [in] ULONG celt);
234 }
235
236 [
237 object,
238 uuid(d66d6f98-cdaa-11d0-b822-00c04fc9b31f),
239 pointer_default(unique)
240 ]
241 interface IMLangConvertCharset : IUnknown
242 {
243 HRESULT Initialize(
244 [in] UINT uiSrcCodePage,
245 [in] UINT uiDstCodePage,
246 [in] DWORD dwProperty);
247
248 HRESULT GetSourceCodePage(
249 [out] UINT *puiSrcCodePage);
250
251 HRESULT GetDestinationCodePage(
252 [out] UINT *puiDstCodePage);
253
254 HRESULT GetProperty(
255 [out] DWORD *pdwProperty);
256
257 HRESULT DoConversion(
258 [in] BYTE *pSrcStr,
259 [in,out] UINT *pcSrcSize,
260 [in] BYTE *pDstStr,
261 [in,out] UINT *pcDstSize);
262
263 HRESULT DoConversionToUnicode(
264 [in] CHAR *pSrcStr,
265 [in,out] UINT *pcSrcSize,
266 [in] WCHAR *pDstStr,
267 [in,out] UINT *pcDstSize);
268
269 HRESULT DoConversionFromUnicode(
270 [in] WCHAR *pSrcStr,
271 [in,out] UINT *pcSrcSize,
272 [in] CHAR *pDstStr,
273 [in,out] UINT *pcDstSize);
274 }
275
276 [
277 uuid(d66d6f99-cdaa-11d0-b822-00c04fc9b31f)
278 ]
279 coclass CMLangConvertCharset
280 {
281 [default] interface IMLangConvertCharset;
282 };
283
284 [
285 object,
286 uuid(3dc39d1d-c030-11d0-b81b-00c04fc9b31f),
287 pointer_default(unique)
288 ]
289 interface IEnumRfc1766 : IUnknown
290 {
291 const USHORT MAX_RFC1766_NAME = 6;
292 const USHORT MAX_LOCALE_NAME = 32;
293
294 typedef struct tagRFC1766INFO
295 {
296 LCID lcid;
297 WCHAR wszRfc1766[MAX_RFC1766_NAME];
298 WCHAR wszLocaleName[MAX_LOCALE_NAME];
299 } RFC1766INFO, *PRFC1766INFO;
300
301 HRESULT Clone(
302 [out] IEnumRfc1766 **ppEnum);
303
304 HRESULT Next(
305 [in] ULONG celt,
306 [out] PRFC1766INFO rgelt,
307 [out] ULONG *pceltFetched);
308
309 HRESULT Reset();
310
311 HRESULT Skip(
312 [in] ULONG celt);
313 }
314
315 [
316 object,
317 uuid(275c23e1-3747-11d0-9fea-00aa003f8646),
318 pointer_default(unique)
319 ]
320 interface IMultiLanguage : IUnknown
321 {
322 HRESULT GetNumberOfCodePageInfo(
323 [out] UINT *pcCodePage);
324
325 HRESULT GetCodePageInfo(
326 [in] UINT uiCodePage,
327 [out] PMIMECPINFO pCodePageInfo);
328
329 HRESULT GetFamilyCodePage(
330 [in] UINT uiCodePage,
331 [out] UINT *puiFamilyCodePage);
332
333 HRESULT EnumCodePages(
334 [in] DWORD grfFlags,
335 [out] IEnumCodePage **ppEnumCodePage);
336
337 HRESULT GetCharsetInfo(
338 [in] BSTR Charset,
339 [in] PMIMECSETINFO pCharsetInfo);
340
341 HRESULT IsConvertible(
342 [in] DWORD dwSrcEncoding,
343 [in] DWORD dwDstEncoding);
344
345 HRESULT ConvertString(
346 [in,out] DWORD *pdwMode,
347 [in] DWORD dwSrcEncoding,
348 [in] DWORD dwDstEncoding,
349 [in] BYTE *pSrcStr,
350 [in,out] UINT *pcSrcSize,
351 [in] BYTE *pDstStr,
352 [in,out] UINT *pcDstSize);
353
354 HRESULT ConvertStringToUnicode(
355 [in,out] DWORD *pdwMode,
356 [in] DWORD dwEncoding,
357 [in] CHAR *pSrcStr,
358 [in,out] UINT *pcSrcSize,
359 [in] WCHAR *pDstStr,
360 [in,out] UINT *pcDstSize);
361
362 HRESULT ConvertStringFromUnicode(
363 [in,out] DWORD *pdwMode,
364 [in] DWORD dwEncoding,
365 [in] WCHAR *pSrcStr,
366 [in,out] UINT *pcSrcSize,
367 [in] CHAR *pDstStr,
368 [in,out] UINT *pcDstSize);
369
370 HRESULT ConvertStringReset();
371
372 HRESULT GetRfc1766FromLcid(
373 [in] LCID Locale,
374 [out] BSTR *pbstrRfc1766);
375
376 HRESULT GetLcidFromRfc1766(
377 [out] LCID *pLocale,
378 [in] BSTR bstrRfc1766);
379
380 HRESULT EnumRfc1766(
381 [out] IEnumRfc1766 **ppEnumRfc1766);
382
383 HRESULT GetRfc1766Info(
384 [in] LCID Locale,
385 [out] PRFC1766INFO pRfc1766Info);
386
387 HRESULT CreateConvertCharset(
388 [in] UINT uiSrcCodePage,
389 [in] UINT uiDstCodePage,
390 [in] DWORD dwProperty,
391 [out] IMLangConvertCharset **ppMLangConvertCharset);
392
393 }
394
395 [
396 object,
397 uuid(dccfc164-2b38-11d2-b7ec-00c04f8f5d9a),
398 pointer_default(unique)
399 ]
400 interface IMultiLanguage2 : IUnknown
401 {
402 typedef struct tagDetectEncodingInfo
403 {
404 UINT nLangID;
405 UINT nCodePage;
406 INT nDocPercent;
407 INT nConfidence;
408 } DetectEncodingInfo, *pDetectEncodingInfo;
409
410 HRESULT GetNumberOfCodePageInfo(
411 [out] UINT *pcCodePage);
412
413 HRESULT GetCodePageInfo(
414 [in] UINT uiCodePage,
415 [in] LANGID LangId,
416 [out] PMIMECPINFO pCodePageInfo);
417
418 HRESULT GetFamilyCodePage(
419 [in] UINT uiCodePage,
420 [out] UINT *puiFamilyCodePage);
421
422 HRESULT EnumCodePages(
423 [in] DWORD grfFlags,
424 [in] LANGID LangId,
425 [out] IEnumCodePage **ppEnumCodePage);
426
427 HRESULT GetCharsetInfo(
428 [in] BSTR Charset,
429 [in] PMIMECSETINFO pCharsetInfo);
430
431 HRESULT IsConvertible(
432 [in] DWORD dwSrcEncoding,
433 [in] DWORD dwDstEncoding);
434
435 HRESULT ConvertString(
436 [in,out] DWORD *pdwMode,
437 [in] DWORD dwSrcEncoding,
438 [in] DWORD dwDstEncoding,
439 [in] BYTE *pSrcStr,
440 [in,out] UINT *pcSrcSize,
441 [in] BYTE *pDstStr,
442 [in,out] UINT *pcDstSize);
443
444 HRESULT ConvertStringToUnicode(
445 [in,out] DWORD *pdwMode,
446 [in] DWORD dwEncoding,
447 [in] CHAR *pSrcStr,
448 [in,out] UINT *pcSrcSize,
449 [in] WCHAR *pDstStr,
450 [in,out] UINT *pcDstSize);
451
452 HRESULT ConvertStringFromUnicode(
453 [in,out] DWORD *pdwMode,
454 [in] DWORD dwEncoding,
455 [in] WCHAR *pSrcStr,
456 [in,out] UINT *pcSrcSize,
457 [in] CHAR *pDstStr,
458 [in,out] UINT *pcDstSize);
459
460 HRESULT ConvertStringReset();
461
462 HRESULT GetRfc1766FromLcid(
463 [in] LCID Locale,
464 [out] BSTR *pbstrRfc1766);
465
466 HRESULT GetLcidFromRfc1766(
467 [out] LCID *pLocale,
468 [in] BSTR bstrRfc1766);
469
470 HRESULT EnumRfc1766(
471 [in] LANGID LangId,
472 [out] IEnumRfc1766 **ppEnumRfc1766);
473
474 HRESULT GetRfc1766Info(
475 [in] LCID Locale,
476 [in] LANGID LangId,
477 [out] PRFC1766INFO pRfc1766Info);
478
479 HRESULT CreateConvertCharset(
480 [in] UINT uiSrcCodePage,
481 [in] UINT uiDstCodePage,
482 [in] DWORD dwProperty,
483 [out] IMLangConvertCharset **ppMLangConvertCharset);
484
485 HRESULT ConvertStringInIStream(
486 [in,out] DWORD *pdwMode,
487 [in] DWORD dwFlag,
488 [in] WCHAR *lpFallBack,
489 [in] DWORD dwSrcEncoding,
490 [in] DWORD dwDstEncoding,
491 [in] IStream *pstmIn,
492 [in] IStream *pstmOut);
493
494 HRESULT ConvertStringToUnicodeEx(
495 [in,out] DWORD *pdwMode,
496 [in] DWORD dwEncoding,
497 [in] CHAR *pSrcStr,
498 [in,out] UINT *pcSrcSize,
499 [in] WCHAR *pDstStr,
500 [in,out] UINT *pcDstSize,
501 [in] DWORD dwFlag,
502 [in] WCHAR *lpFallBack);
503
504 HRESULT ConvertStringFromUnicodeEx(
505 [in,out] DWORD *pdwMode,
506 [in] DWORD dwEncoding,
507 [in] WCHAR *pSrcStr,
508 [in,out] UINT *pcSrcSize,
509 [in] CHAR *pDstStr,
510 [in,out] UINT *pcDstSize,
511 [in] DWORD dwFlag,
512 [in] WCHAR *lpFallBack);
513
514 HRESULT DetectCodepageInIStream(
515 [in] DWORD dwFlag,
516 [in] DWORD dwPrefWinCodePage,
517 [in] IStream *pstmIn,
518 [in,out] DetectEncodingInfo *lpEncoding,
519 [in,out] INT *pnScores);
520
521 HRESULT DetectInputCodepage(
522 [in] DWORD dwFlag,
523 [in] DWORD dwPrefWinCodePage,
524 [in] CHAR *pSrcStr,
525 [in,out] INT *pcSrcSize,
526 [in,out] DetectEncodingInfo *lpEncoding,
527 [in,out] INT *pnScores);
528
529 HRESULT ValidateCodePage(
530 [in] UINT uiCodePage,
531 [in] HWND hwnd);
532
533 HRESULT GetCodePageDescription(
534 [in] UINT uiCodePage,
535 [in] LCID lcid,
536 [in,out] LPWSTR lpWideCharStr,
537 [in] int cchWideChar);
538
539 HRESULT IsCodePageInstallable(
540 [in] UINT uiCodePage);
541
542 HRESULT SetMimeDBSource(
543 [in] MIMECONTF dwSource);
544
545 HRESULT GetNumberOfScripts(
546 [out] UINT *pnScripts);
547
548 HRESULT EnumScripts(
549 [in] DWORD dwFlags,
550 [in] LANGID LangId,
551 [out] IEnumScript **ppEnumScript);
552
553 HRESULT ValidateCodePageEx( /* undocumented on MSDN */
554 [in] UINT uiCodePage,
555 [in] HWND hwnd,
556 [in] DWORD dwfIODControl);
557 }
558
559 [
560 object,
561 uuid(4e5868ab-b157-4623-9acc-6a1d9caebe04),
562 pointer_default(unique)
563 ]
564 interface IMultiLanguage3 : IMultiLanguage2
565 {
566 typedef [unique] IMultiLanguage3 *LPMULTILANGUAGE3;
567 HRESULT DetectOutboundCodePage(
568 [in] DWORD dwFlags,
569 [in] LPCWSTR lpWideCharStr,
570 [in] UINT cchWideChar,
571 [in] UINT *puiPreferredCodePages,
572 [in] UINT nPreferredCodePages,
573 [in] UINT *puiDetectedCodePages,
574 [in, out] UINT *pnDetectedCodePages,
575 [in] WCHAR *lpSpecialChar);
576
577 HRESULT DetectOutboundCodePageInIStream(
578 [in] DWORD dwFlags,
579 [in] IStream *pStrIn,
580 [in] UINT *puiPreferredCodePages,
581 [in] UINT nPreferredCodePages,
582 [in] UINT *puiDetectedCodePages,
583 [in, out] UINT *pnDetectedCodePages,
584 [in] WCHAR *lpSpecialChar);
585 }
586
587 [
588 uuid(275C23E2-3747-11d0-9FEA-00AA003f8646)
589 ]
590 coclass CMultiLanguage
591 {
592 [default] interface IMultiLanguage;
593 interface IMLangCodePages;
594 interface IMLangFontLink;
595 /* interface IMLangLineBreakConsole; */
596 }
597
598 cpp_quote("STDAPI LcidToRfc1766A(LCID, LPSTR, INT);")
599 cpp_quote("STDAPI LcidToRfc1766W(LCID, LPWSTR, INT);")
600 cpp_quote("#define LcidToRfc1766 WINELIB_NAME_AW(LcidToRfc1766)")
601
602 cpp_quote("STDAPI Rfc1766ToLcidA(LCID *, LPCSTR);")
603 cpp_quote("STDAPI Rfc1766ToLcidW(LCID *, LPCWSTR);")
604 cpp_quote("#define Rfc1766ToLcid WINELIB_NAME_AW(Rfc1766ToLcid)")
605
606 cpp_quote("STDAPI GetGlobalFontLinkObject(void);")
607 cpp_quote("STDAPI IsConvertINetStringAvailable(DWORD, DWORD);")
608 cpp_quote("STDAPI ConvertINetString(LPDWORD, DWORD, DWORD, LPCSTR, LPINT, LPSTR, LPINT);")
609 cpp_quote("STDAPI ConvertINetMultiByteToUnicode(LPDWORD, DWORD, LPCSTR, LPINT, LPWSTR, LPINT);")
610 cpp_quote("STDAPI ConvertINetUnicodeToMultiByte(LPDWORD, DWORD, LPCWSTR, LPINT, LPSTR, LPINT);")