2 * Copyright (C) 2004 Mike McCormack
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.
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.
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
25 cpp_quote("#define CPIOD_PEEK 0x40000000")
26 cpp_quote("#define CPIOD_FORCE_PROMPT 0x80000000")
29 uuid(275c23e0-3747-11d0-9fea-00aa003f8646),
35 importlib("stdole2.tlb");
39 uuid(359f3443-bd4a-11d0-b188-00aa0038c969),
40 pointer_default(unique)
42 interface IMLangCodePages : IUnknown
44 HRESULT GetCharCodePages(
46 [out] DWORD *pdwCodePages);
47 HRESULT GetStrCodePages(
48 [in, size_is(cchSrc)] const WCHAR *pszSrc,
50 [in] DWORD dwPriorityCodePages,
51 [out] DWORD *pdwCodePages,
52 [out] LONG *pcchCodePages);
53 HRESULT CodePageToCodePages(
55 [out] DWORD *pdwCodePages);
56 HRESULT CodePagesToCodePage(
57 [in] DWORD dwCodePages,
58 [in] UINT uDefaultCodePage,
59 [out] UINT *puCodePage);
64 uuid(359f3441-bd4a-11d0-b188-00aa0038c969),
65 pointer_default(unique)
67 interface IMLangFontLink : IMLangCodePages
69 HRESULT GetFontCodePages(
72 [out] DWORD *pdwCodePages );
76 [in] DWORD dwCodePages,
78 [out] HFONT *phDestFont);
83 HRESULT ResetFontMapping();
88 uuid(ae5f1430-388b-11d2-8380-00c04f8f5da1),
89 pointer_default(unique)
91 interface IEnumScript : IUnknown
93 const USHORT MAX_SCRIPT_NAME = 48;
94 const USHORT MAX_MIMEFACE_NAME = 32;
96 typedef BYTE SCRIPT_ID;
97 typedef __int64 SCRIPT_IDS;
99 typedef enum tagSCRIPTCONTF
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,
147 typedef enum tagSCRIPTFONTCONTF
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
156 typedef struct tagSCRIPFONTINFO
159 WCHAR wszFont[MAX_MIMEFACE_NAME];
160 } SCRIPTFONTINFO, *PSCRIPTFONTINFO;
162 typedef struct tagSCRIPTINFO {
165 WCHAR wszDescription[MAX_SCRIPT_NAME];
166 WCHAR wszFixedWidthFont[MAX_MIMEFACE_NAME];
167 WCHAR wszProportionalFont[MAX_MIMEFACE_NAME];
168 } SCRIPTINFO, *PSCRIPTINFO;
171 [out] IEnumScript **ppEnum);
175 [out] PSCRIPTINFO rgelt,
176 [out] ULONG *pceltFetched);
186 uuid(dccfc162-2b38-11d2-b7ec-00c04f8f5d9a),
187 pointer_default(unique)
189 interface IMLangFontLink2 : IMLangCodePages
191 typedef struct tagUNICODERANGE
197 typedef [unique] IMLangFontLink2 *PMLANGFONTLINK2;
199 HRESULT GetFontCodePages(
202 [out] DWORD *pdwCodePages );
207 HRESULT ResetFontMapping();
211 [in] DWORD dwCodePages,
215 HRESULT GetFontUnicodeRanges(
217 [in,out] UINT *puiRanges,
218 [out] UNICODERANGE* pUranges);
220 HRESULT GetScriptFontInfo(
223 [in,out] UINT *puiFonts,
224 [out] SCRIPTFONTINFO* pScriptFont);
226 HRESULT CodePageToScriptID(
227 [in] UINT uiCodePage,
228 [out] SCRIPT_ID *pSid);
233 uuid(c04d65ce-b70d-11d0-b188-00aa0038c969),
234 pointer_default(unique)
236 interface IMLangString : IUnknown
242 [out] DWORD* pdwCookie,
243 [out] LONG* plActualPos,
244 [out] LONG* plActualLen);
247 [in] DWORD dwCookie);
250 [in] BOOL fNoAccess);
253 [out, retval] LONG* plLen);
257 [in] IUnknown *pSrcMLStr,
261 HRESULT RegisterAttr(
263 [out] DWORD* pdwCookie);
264 HRESULT UnregisterAttr(
265 [in] DWORD dwCookie);
267 [out] IEnumUnknown **ppEnumUnk);
271 [out] IUnknown **ppUnk);
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);
287 uuid(f5be2ee1-bfd7-11d0-b188-00aa0038c969),
288 pointer_default(unique)
290 interface IMLangLineBreakConsole : IUnknown
293 [in] IMLangString* pSrcMLStr,
296 [in] LONG cMinColumns,
297 [in] LONG cMaxColumns,
298 [out] LONG* plLineLen,
299 [out] LONG* plSkipLen);
303 [in, size_is(cchSrc)] const WCHAR* pszSrc,
305 [in] LONG cMaxColumns,
306 [out] LONG* pcchLine,
307 [out] LONG* pcchSkip );
312 [in, size_is(cchSrc)] const CHAR* pszSrc,
314 [in] LONG cMaxColumns,
315 [out] LONG* pcchLine,
316 [out] LONG* pcchSkip);
321 uuid(275c23e3-3747-11d0-9fea-00aa003f8646),
322 pointer_default(unique)
324 interface IEnumCodePage : IUnknown
326 const USHORT MAX_MIMECP_NAME = 64;
327 const USHORT MAX_MIMECSET_NAME = 50;
329 typedef enum tagMIMECONTF
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
346 typedef struct tagMIMECPINFO {
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];
357 } MIMECPINFO, *PMIMECPINFO;
359 typedef struct tagMIMECSETINFO
362 UINT uiInternetEncoding;
363 WCHAR wszCharset[MAX_MIMECSET_NAME];
364 } MIMECSETINFO, *PMIMECSETINFO;
367 [out] IEnumCodePage **ppEnum);
371 [out] PMIMECPINFO rgelt,
372 [out] ULONG *pceltFetched);
382 uuid(d66d6f98-cdaa-11d0-b822-00c04fc9b31f),
383 pointer_default(unique)
385 interface IMLangConvertCharset : IUnknown
387 typedef enum tagMLCONVCHARF
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
399 [in] UINT uiSrcCodePage,
400 [in] UINT uiDstCodePage,
401 [in] DWORD dwProperty);
403 HRESULT GetSourceCodePage(
404 [out] UINT *puiSrcCodePage);
406 HRESULT GetDestinationCodePage(
407 [out] UINT *puiDstCodePage);
410 [out] DWORD *pdwProperty);
412 HRESULT DoConversion(
414 [in,out] UINT *pcSrcSize,
416 [in,out] UINT *pcDstSize);
418 HRESULT DoConversionToUnicode(
420 [in,out] UINT *pcSrcSize,
422 [in,out] UINT *pcDstSize);
424 HRESULT DoConversionFromUnicode(
426 [in,out] UINT *pcSrcSize,
428 [in,out] UINT *pcDstSize);
432 uuid(d66d6f99-cdaa-11d0-b822-00c04fc9b31f)
434 coclass CMLangConvertCharset
436 [default] interface IMLangConvertCharset;
441 uuid(3dc39d1d-c030-11d0-b81b-00c04fc9b31f),
442 pointer_default(unique)
444 interface IEnumRfc1766 : IUnknown
446 const USHORT MAX_RFC1766_NAME = 6;
447 const USHORT MAX_LOCALE_NAME = 32;
449 typedef struct tagRFC1766INFO
452 WCHAR wszRfc1766[MAX_RFC1766_NAME];
453 WCHAR wszLocaleName[MAX_LOCALE_NAME];
454 } RFC1766INFO, *PRFC1766INFO;
457 [out] IEnumRfc1766 **ppEnum);
461 [out] PRFC1766INFO rgelt,
462 [out] ULONG *pceltFetched);
472 uuid(275c23e1-3747-11d0-9fea-00aa003f8646),
473 pointer_default(unique)
475 interface IMultiLanguage : IUnknown
477 HRESULT GetNumberOfCodePageInfo(
478 [out] UINT *pcCodePage);
480 HRESULT GetCodePageInfo(
481 [in] UINT uiCodePage,
482 [out] PMIMECPINFO pCodePageInfo);
484 HRESULT GetFamilyCodePage(
485 [in] UINT uiCodePage,
486 [out] UINT *puiFamilyCodePage);
488 HRESULT EnumCodePages(
490 [out] IEnumCodePage **ppEnumCodePage);
492 HRESULT GetCharsetInfo(
494 [in] PMIMECSETINFO pCharsetInfo);
496 HRESULT IsConvertible(
497 [in] DWORD dwSrcEncoding,
498 [in] DWORD dwDstEncoding);
500 HRESULT ConvertString(
501 [in,out] DWORD *pdwMode,
502 [in] DWORD dwSrcEncoding,
503 [in] DWORD dwDstEncoding,
505 [in,out] UINT *pcSrcSize,
507 [in,out] UINT *pcDstSize);
509 HRESULT ConvertStringToUnicode(
510 [in,out] DWORD *pdwMode,
511 [in] DWORD dwEncoding,
513 [in,out] UINT *pcSrcSize,
515 [in,out] UINT *pcDstSize);
517 HRESULT ConvertStringFromUnicode(
518 [in,out] DWORD *pdwMode,
519 [in] DWORD dwEncoding,
521 [in,out] UINT *pcSrcSize,
523 [in,out] UINT *pcDstSize);
525 HRESULT ConvertStringReset();
527 HRESULT GetRfc1766FromLcid(
529 [out] BSTR *pbstrRfc1766);
531 HRESULT GetLcidFromRfc1766(
533 [in] BSTR bstrRfc1766);
536 [out] IEnumRfc1766 **ppEnumRfc1766);
538 HRESULT GetRfc1766Info(
540 [out] PRFC1766INFO pRfc1766Info);
542 HRESULT CreateConvertCharset(
543 [in] UINT uiSrcCodePage,
544 [in] UINT uiDstCodePage,
545 [in] DWORD dwProperty,
546 [out] IMLangConvertCharset **ppMLangConvertCharset);
552 uuid(dccfc164-2b38-11d2-b7ec-00c04f8f5d9a),
553 pointer_default(unique)
555 interface IMultiLanguage2 : IUnknown
557 typedef struct tagDetectEncodingInfo
563 } DetectEncodingInfo, *pDetectEncodingInfo;
565 HRESULT GetNumberOfCodePageInfo(
566 [out] UINT *pcCodePage);
568 HRESULT GetCodePageInfo(
569 [in] UINT uiCodePage,
571 [out] PMIMECPINFO pCodePageInfo);
573 HRESULT GetFamilyCodePage(
574 [in] UINT uiCodePage,
575 [out] UINT *puiFamilyCodePage);
577 HRESULT EnumCodePages(
580 [out] IEnumCodePage **ppEnumCodePage);
582 HRESULT GetCharsetInfo(
584 [in] PMIMECSETINFO pCharsetInfo);
586 HRESULT IsConvertible(
587 [in] DWORD dwSrcEncoding,
588 [in] DWORD dwDstEncoding);
590 HRESULT ConvertString(
591 [in,out] DWORD *pdwMode,
592 [in] DWORD dwSrcEncoding,
593 [in] DWORD dwDstEncoding,
595 [in,out] UINT *pcSrcSize,
597 [in,out] UINT *pcDstSize);
599 HRESULT ConvertStringToUnicode(
600 [in,out] DWORD *pdwMode,
601 [in] DWORD dwEncoding,
603 [in,out] UINT *pcSrcSize,
605 [in,out] UINT *pcDstSize);
607 HRESULT ConvertStringFromUnicode(
608 [in,out] DWORD *pdwMode,
609 [in] DWORD dwEncoding,
611 [in,out] UINT *pcSrcSize,
613 [in,out] UINT *pcDstSize);
615 HRESULT ConvertStringReset();
617 HRESULT GetRfc1766FromLcid(
619 [out] BSTR *pbstrRfc1766);
621 HRESULT GetLcidFromRfc1766(
623 [in] BSTR bstrRfc1766);
627 [out] IEnumRfc1766 **ppEnumRfc1766);
629 HRESULT GetRfc1766Info(
632 [out] PRFC1766INFO pRfc1766Info);
634 HRESULT CreateConvertCharset(
635 [in] UINT uiSrcCodePage,
636 [in] UINT uiDstCodePage,
637 [in] DWORD dwProperty,
638 [out] IMLangConvertCharset **ppMLangConvertCharset);
640 HRESULT ConvertStringInIStream(
641 [in,out] DWORD *pdwMode,
643 [in] WCHAR *lpFallBack,
644 [in] DWORD dwSrcEncoding,
645 [in] DWORD dwDstEncoding,
646 [in] IStream *pstmIn,
647 [in] IStream *pstmOut);
649 HRESULT ConvertStringToUnicodeEx(
650 [in,out] DWORD *pdwMode,
651 [in] DWORD dwEncoding,
653 [in,out] UINT *pcSrcSize,
655 [in,out] UINT *pcDstSize,
657 [in] WCHAR *lpFallBack);
659 HRESULT ConvertStringFromUnicodeEx(
660 [in,out] DWORD *pdwMode,
661 [in] DWORD dwEncoding,
663 [in,out] UINT *pcSrcSize,
665 [in,out] UINT *pcDstSize,
667 [in] WCHAR *lpFallBack);
669 HRESULT DetectCodepageInIStream(
671 [in] DWORD dwPrefWinCodePage,
672 [in] IStream *pstmIn,
673 [in,out] DetectEncodingInfo *lpEncoding,
674 [in,out] INT *pnScores);
676 HRESULT DetectInputCodepage(
678 [in] DWORD dwPrefWinCodePage,
680 [in,out] INT *pcSrcSize,
681 [in,out] DetectEncodingInfo *lpEncoding,
682 [in,out] INT *pnScores);
684 HRESULT ValidateCodePage(
685 [in] UINT uiCodePage,
688 HRESULT GetCodePageDescription(
689 [in] UINT uiCodePage,
691 [in,out,size_is(cchWideChar)] LPWSTR lpWideCharStr,
692 [in] int cchWideChar);
694 HRESULT IsCodePageInstallable(
695 [in] UINT uiCodePage);
697 HRESULT SetMimeDBSource(
698 [in] MIMECONTF dwSource);
700 HRESULT GetNumberOfScripts(
701 [out] UINT *pnScripts);
706 [out] IEnumScript **ppEnumScript);
708 HRESULT ValidateCodePageEx( /* undocumented on MSDN */
709 [in] UINT uiCodePage,
711 [in] DWORD dwfIODControl);
716 uuid(4e5868ab-b157-4623-9acc-6a1d9caebe04),
717 pointer_default(unique)
719 interface IMultiLanguage3 : IMultiLanguage2
721 typedef [unique] IMultiLanguage3 *LPMULTILANGUAGE3;
722 HRESULT DetectOutboundCodePage(
724 [in] LPCWSTR lpWideCharStr,
725 [in] UINT cchWideChar,
726 [in] UINT *puiPreferredCodePages,
727 [in] UINT nPreferredCodePages,
728 [in] UINT *puiDetectedCodePages,
729 [in, out] UINT *pnDetectedCodePages,
730 [in] WCHAR *lpSpecialChar);
732 HRESULT DetectOutboundCodePageInIStream(
734 [in] IStream *pStrIn,
735 [in] UINT *puiPreferredCodePages,
736 [in] UINT nPreferredCodePages,
737 [in] UINT *puiDetectedCodePages,
738 [in, out] UINT *pnDetectedCodePages,
739 [in] WCHAR *lpSpecialChar);
743 uuid(275C23E2-3747-11d0-9FEA-00AA003f8646)
745 coclass CMultiLanguage
747 [default] interface IMultiLanguage;
748 interface IMLangCodePages;
749 interface IMLangFontLink;
750 /* interface IMLangLineBreakConsole; */
751 interface IMLangFontLink2;
754 } // library MultiLanguage
756 cpp_quote("STDAPI LcidToRfc1766A(LCID, LPSTR, INT);")
757 cpp_quote("STDAPI LcidToRfc1766W(LCID, LPWSTR, INT);")
758 cpp_quote("#define LcidToRfc1766 WINELIB_NAME_AW(LcidToRfc1766)")
760 cpp_quote("STDAPI Rfc1766ToLcidA(LCID *, LPCSTR);")
761 cpp_quote("STDAPI Rfc1766ToLcidW(LCID *, LPCWSTR);")
762 cpp_quote("#define Rfc1766ToLcid WINELIB_NAME_AW(Rfc1766ToLcid)")
764 cpp_quote("STDAPI GetGlobalFontLinkObject(void **unknown);")
765 cpp_quote("STDAPI IsConvertINetStringAvailable(DWORD, DWORD);")
766 cpp_quote("STDAPI ConvertINetString(LPDWORD, DWORD, DWORD, LPCSTR, LPINT, LPSTR, LPINT);")
767 cpp_quote("STDAPI ConvertINetMultiByteToUnicode(LPDWORD, DWORD, LPCSTR, LPINT, LPWSTR, LPINT);")
768 cpp_quote("STDAPI ConvertINetUnicodeToMultiByte(LPDWORD, DWORD, LPCWSTR, LPINT, LPSTR, LPINT);")