1 /**
2  * @file mlang.h
3  * Copyright 2012, 2013 MinGW.org project
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a
6  * copy of this software and associated documentation files (the "Software"),
7  * to deal in the Software without restriction, including without limitation
8  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9  * and/or sell copies of the Software, and to permit persons to whom the
10  * Software is furnished to do so, subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice (including the next
13  * paragraph) shall be included in all copies or substantial portions of the
14  * Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22  * DEALINGS IN THE SOFTWARE.
23  */
24 #ifndef _MLANG_H
25 #define _MLANG_H
26 #pragma GCC system_header
27 #include <_mingw.h>
28 
29 #include <windows.h>
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
35 #pragma pack(push,1)
36 
37 #define MAX_MIMECP_NAME   64
38 #define MAX_MIMECSET_NAME 50
39 #define MAX_SCRIPT_NAME   48
40 #define MAX_MIMEFACE_NAME 32
41 #define MAX_RFC1766_NAME   6
42 #define MAX_LOCALE_NAME   32
43 
44 typedef enum tagMIMECONTF {
45     MIMECONTF_MAILNEWS = 0x00000001,
46     MIMECONTF_BROWSER = 0x00000002,
47     MIMECONTF_MINIMAL = 0x00000004,
48     MIMECONTF_IMPORT = 0x00000008,
49     MIMECONTF_SAVABLE_MAILNEWS = 0x00000100,
50     MIMECONTF_SAVABLE_BROWSER = 0x00000200,
51     MIMECONTF_EXPORT = 0x00000400,
52     MIMECONTF_PRIVCONVERTER = 0x00010000,
53     MIMECONTF_VALID = 0x00020000,
54     MIMECONTF_VALID_NLS = 0x00040000,
55     MIMECONTF_MIME_IE4 = 0x10000000,
56     MIMECONTF_MIME_LATEST = 0x20000000,
57     MIMECONTF_MIME_REGISTRY = 0x40000000
58 } MIMECONTF;
59 typedef enum tagMLCONVCHARF {
60     MLCONVCHARF_NONE = 0,
61     MLCONVCHARF_AUTODETECT = 1,
62     MLCONVCHARF_NCR_ENTITIZE = 2,
63     MLCONVCHARF_NAME_ENTITIZE = 4,
64     MLCONVCHARF_USEDEFCHAR = 8,
65     MLCONVCHARF_NOBESTFITCHARS = 16
66 } MLCONVCHAR;
67 typedef enum tagMLCPF {
68     MLDETECTF_MAILNEWS = 0x0001,
69     MLDETECTF_BROWSER = 0x0002,
70     MLDETECTF_VALID = 0x0004,
71     MLDETECTF_VALID_NLS = 0x0008,
72     MLDETECTF_PRESERVE_ORDER = 0x0010,
73     MLDETECTF_PREFERRED_ONLY = 0x0020,
74     MLDETECTF_FILTER_SPECIALCHAR = 0x0040
75 } MLCP;
76 typedef enum tagMLDETECTCP {
77     MLDETECTCP_NONE = 0,
78     MLDETECTCP_7BIT = 1,
79     MLDETECTCP_8BIT = 2,
80     MLDETECTCP_DBCS = 4,
81     MLDETECTCP_HTML = 8
82 } MLDETECTCP;
83 typedef enum tagSCRIPTFONTCONTF {
84     SCRIPTCONTF_FIXED_FONT = 0x00000001,
85     SCRIPTCONTF_PROPORTIONAL_FONT = 0x00000002,
86     SCRIPTCONTF_SCRIPT_USER = 0x00010000,
87     SCRIPTCONTF_SCRIPT_HIDE = 0x00020000,
88     SCRIPTCONTF_SCRIPT_SYSTEM = 0x00040000
89 } SCRIPTFONTCONTF;
90 typedef enum tagSCRIPTCONTF {
91     sidDefault,
92     sidMerge,
93     sidAsciiSym,
94     sidAsciiLatin,
95     sidLatin,
96     sidGreek,
97     sidCyrillic,
98     sidArmenian,
99     sidHebrew,
100     sidArabic,
101     sidDevanagari,
102     sidBengali,
103     sidGurmukhi,
104     sidGujarati,
105     sidOriya,
106     sidTamil,
107     sidTelugu,
108     sidKannada,
109     sidMalayalam,
110     sidThai,
111     sidLao,
112     sidTibetan,
113     sidGeorgian,
114     sidHangul,
115     sidKana,
116     sidBopomofo,
117     sidHan,
118     sidEthiopic,
119     sidCanSyllabic,
120     sidCherokee,
121     sidYi,
122     sidBraille,
123     sidRunic,
124     sidOgham,
125     sidSinhala,
126     sidSyriac,
127     sidBurmese,
128     sidKhmer,
129     sidThaana,
130     sidMongolian,
131     sidLim,
132     sidFEFirst = sidHangul,
133     sidFELast = sidHan
134 } SCRIPTCONTF;
135 
136 typedef struct tagDetectEncodingInfo {
137     UINT nLangID;
138     UINT nCodePage;
139     INT nDocPercent;
140     INT nConfidence;
141 } DetectEncodingInfo, *pDetectEncodingInfo;
142 typedef struct tagMIMECPINFO {
143     DWORD dwFlags;
144     UINT uiCodePage;
145     UINT uiFamilyCodePage;
146     WCHAR wszDescription[MAX_MIMECP_NAME];
147     WCHAR wszWebCharset[MAX_MIMECSET_NAME];
148     WCHAR wszHeaderCharset[MAX_MIMECSET_NAME];
149     WCHAR wszBodyCharset[MAX_MIMECSET_NAME];
150     WCHAR wszFixedWidthFont[MAX_MIMEFACE_NAME];
151     WCHAR wszProportionalFont[MAX_MIMEFACE_NAME];
152     BYTE bGDICharset;
153 } MIMECPINFO, *PMIMECPINFO;
154 typedef struct tagMIMECSETINFO {
155     UINT uiCodePage;
156     UINT uiInternetEncoding;
157     WCHAR wszCharset[MAX_MIMECSET_NAME];
158 } MIMECSETINFO, *PMIMECSETINFO;
159 typedef struct tagRFC1766INFO {
160     LCID lcid;
161     WCHAR wszRfc1766[MAX_RFC1766_NAME];
162     WCHAR wszLocaleName[MAX_LOCALE_NAME];
163 } RFC1766INFO, *PRFC1766INFO;
164 typedef BYTE SCRIPT_ID;
165 typedef struct tagSCRIPTINFO {
166     SCRIPT_ID ScriptId;
167     UINT uiCodePage;
168     WCHAR wszDescription[MAX_SCRIPT_NAME];
169     WCHAR wszFixedWidthFont[MAX_MIMEFACE_NAME];
170     WCHAR wszProportionalFont[MAX_MIMEFACE_NAME];
171 } SCRIPTINFO, *PSCRIPTINFO;
172 typedef struct tagUNICODERANGE {
173   WCHAR wcFrom;
174   WCHAR wcTo;
175 } UNICODERANGE;
176 
177 typedef struct tagSCRIPTFONTINFO SCRIPTFONTINFO;
178 
179 EXTERN_C const IID IID_IEnumCodePage;
180 #define INTERFACE IEnumCodePage
DECLARE_INTERFACE_(IEnumCodePage,IUnknown)181 DECLARE_INTERFACE_(IEnumCodePage,IUnknown)
182 {
183         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
184         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
185         STDMETHOD_(ULONG,Release)(THIS) PURE;
186         STDMETHOD(Clone)(THIS_ IEnumCodePage**) PURE;
187         STDMETHOD(Next)(THIS_ ULONG,PMIMECPINFO,ULONG*) PURE;
188         STDMETHOD(Reset)(THIS) PURE;
189         STDMETHOD(Skip)(THIS_ ULONG) PURE;
190 };
191 #undef INTERFACE
192 
193 EXTERN_C const IID IID_IEnumRfc1766;
194 #define INTERFACE IEnumRfc1766
DECLARE_INTERFACE_(IEnumRfc1766,IUnknown)195 DECLARE_INTERFACE_(IEnumRfc1766,IUnknown)
196 {
197         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
198         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
199         STDMETHOD_(ULONG,Release)(THIS) PURE;
200         STDMETHOD(Clone)(THIS_ IEnumRfc1766**) PURE;
201         STDMETHOD(Next)(THIS_ ULONG,PRFC1766INFO,ULONG*) PURE;
202         STDMETHOD(Reset)(THIS) PURE;
203         STDMETHOD(Skip)(THIS_ ULONG) PURE;
204 };
205 #undef INTERFACE
206 
207 EXTERN_C const IID IID_IEnumScript;
208 #define INTERFACE IEnumScript
DECLARE_INTERFACE_(IEnumScript,IUnknown)209 DECLARE_INTERFACE_(IEnumScript,IUnknown)
210 {
211         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
212         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
213         STDMETHOD_(ULONG,Release)(THIS) PURE;
214         STDMETHOD(Clone)(THIS_ IEnumScript**) PURE;
215         STDMETHOD(Next)(THIS_ ULONG,PSCRIPTINFO,ULONG*) PURE;
216         STDMETHOD(Reset)(THIS) PURE;
217         STDMETHOD(Skip)(THIS_ ULONG) PURE;
218 };
219 #undef INTERFACE
220 
221 EXTERN_C const IID IID_IMLangCodePages;
222 #define INTERFACE IMLangCodePages
DECLARE_INTERFACE_(IMLangCodePages,IUnknown)223 DECLARE_INTERFACE_(IMLangCodePages,IUnknown)
224 {
225         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
226         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
227         STDMETHOD_(ULONG,Release)(THIS) PURE;
228         STDMETHOD(GetCharCodePages)(THIS_ WCHAR,DWORD*) PURE;
229         STDMETHOD(GetStrCodePages)(THIS_ const WCHAR *,long,DWORD,DWORD*,long*) PURE;
230         STDMETHOD(CodePageToCodePages)(THIS_ UINT,DWORD*) PURE;
231         STDMETHOD(CodePagesToCodePage)(THIS_ DWORD,UINT,UINT*) PURE;
232 };
233 #undef INTERFACE
234 
235 EXTERN_C const IID IID_IMLangConvertCharset;
236 #define INTERFACE IMLangConvertCharset
DECLARE_INTERFACE_(IMLangConvertCharset,IUnknown)237 DECLARE_INTERFACE_(IMLangConvertCharset,IUnknown)
238 {
239         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
240         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
241         STDMETHOD_(ULONG,Release)(THIS) PURE;
242         STDMETHOD(Initialize)(THIS_ UINT,UINT,DWORD) PURE;
243         STDMETHOD(GetSourceCodePage)(THIS_ UINT*) PURE;
244         STDMETHOD(GetDestinationCodePage)(THIS_ UINT*) PURE;
245         STDMETHOD(GetProperty)(THIS_ DWORD*) PURE;
246         STDMETHOD(DoConversion)(THIS_ BYTE*,UINT*,BYTE*,UINT*) PURE;
247         STDMETHOD(DoConversionToUnicode)(THIS_ CHAR*,UINT*,WCHAR*,UINT*) PURE;
248         STDMETHOD(DoConversionFromUnicode)(THIS_ WCHAR*,UINT*,CHAR*,UINT*) PURE;
249 };
250 #undef INTERFACE
251 EXTERN_C const CLSID CLSID_CMLangConvertCharset;
252 
253 EXTERN_C const IID IID_IMLangFontLink;
254 #define INTERFACE IMLangFontLink
DECLARE_INTERFACE_(IMLangFontLink,IMLangCodePages)255 DECLARE_INTERFACE_(IMLangFontLink,IMLangCodePages)
256 {
257         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
258         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
259         STDMETHOD_(ULONG,Release)(THIS) PURE;
260         STDMETHOD(GetCharCodePages)(THIS_ WCHAR,DWORD*) PURE;
261         STDMETHOD(GetStrCodePages)(THIS_ const WCHAR *,long,DWORD,DWORD*,long*) PURE;
262         STDMETHOD(CodePageToCodePages)(THIS_ UINT,DWORD*) PURE;
263         STDMETHOD(CodePagesToCodePage)(THIS_ DWORD,UINT,UINT*) PURE;
264         STDMETHOD(GetFontCodePages)(THIS_ HDC,HFONT,DWORD*) PURE;
265         STDMETHOD(MapFont)(THIS_ HDC,DWORD,HFONT,HFONT*) PURE;
266         STDMETHOD(ReleaseFont)(THIS_ HFONT) PURE;
267         STDMETHOD(ResetFontMapping)(THIS) PURE;
268 };
269 #undef INTERFACE
270 
271 EXTERN_C const IID IID_IMLangFontLink2;
272 #define INTERFACE IMLangFontLink2
DECLARE_INTERFACE_(IMLangFontLink2,IMLangCodePages)273 DECLARE_INTERFACE_(IMLangFontLink2,IMLangCodePages)
274 {
275         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
276         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
277         STDMETHOD_(ULONG,Release)(THIS) PURE;
278         STDMETHOD(GetCharCodePages)(THIS_ WCHAR,DWORD*) PURE;
279         STDMETHOD(GetStrCodePages)(THIS_ const WCHAR *,long,DWORD,DWORD*,long*) PURE;
280         STDMETHOD(CodePageToCodePages)(THIS_ UINT,DWORD*) PURE;
281         STDMETHOD(CodePagesToCodePage)(THIS_ DWORD,UINT,UINT*) PURE;
282         STDMETHOD(GetFontCodePages)(THIS_ HDC,HFONT,DWORD*) PURE;
283         STDMETHOD(ReleaseFont)(THIS_ HFONT) PURE;
284         STDMETHOD(ResetFontMapping)(THIS) PURE;
285         STDMETHOD(MapFont)(THIS_ HDC,DWORD,WCHAR,HFONT*) PURE;
286         STDMETHOD(GetFontUnicodeRange)(THIS_ HDC,UINT*,UNICODERANGE*) PURE;
287         STDMETHOD(GetScriptFontInfo)(THIS_ SCRIPT_ID,DWORD,UINT*,SCRIPTFONTINFO*) PURE;
288         STDMETHOD(CodePageToScriptID)(THIS) PURE;
289 };
290 #undef INTERFACE
291 
292 EXTERN_C const IID IID_IMLangLineBreakConsole;
293 #define INTERFACE IMLangLineBreakConsole
DECLARE_INTERFACE_(IMLangLineBreakConsole,IMLangCodePages)294 DECLARE_INTERFACE_(IMLangLineBreakConsole,IMLangCodePages)
295 {
296         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
297         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
298         STDMETHOD_(ULONG,Release)(THIS) PURE;
299         STDMETHOD(BreakLineML)(THIS) PURE;
300         STDMETHOD(BreakLineW)(THIS_ LCID,const WCHAR*,long,long,long*,long*) PURE;
301         STDMETHOD(BreakLineA)(THIS_ LCID,UINT,const CHAR*,long,long,long*,long*) PURE;
302 };
303 #undef INTERFACE
304 
305 EXTERN_C const IID IID_IMultiLanguage;
306 #define INTERFACE IMultiLanguage
DECLARE_INTERFACE_(IMultiLanguage,IUnknown)307 DECLARE_INTERFACE_(IMultiLanguage,IUnknown)
308 {
309         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
310         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
311         STDMETHOD_(ULONG,Release)(THIS) PURE;
312         STDMETHOD(GetNumberOfCodePageInfo)(THIS_ UINT*) PURE;
313         STDMETHOD(GetCodePageInfo)(THIS_ UINT,PMIMECPINFO) PURE;
314         STDMETHOD(GetFamilyCodePage)(THIS_ UINT,UINT*) PURE;
315         STDMETHOD(EnumCodePages)(THIS_ DWORD,IEnumCodePage**) PURE;
316         STDMETHOD(GetCharsetInfo)(THIS_ BSTR,PMIMECSETINFO) PURE;
317         STDMETHOD(IsConvertible)(THIS_ DWORD,DWORD) PURE;
318         STDMETHOD(ConvertString)(THIS_ DWORD*,DWORD,DWORD,BYTE*,UINT*,BYTE*,UINT*) PURE;
319         STDMETHOD(ConvertStringToUnicode)(THIS_ DWORD*,DWORD,CHAR*,UINT*,WCHAR*,UINT*) PURE;
320         STDMETHOD(ConvertStringFromUnicode)(THIS_ DWORD*,DWORD,WCHAR*,UINT*,CHAR*,UINT*) PURE;
321         STDMETHOD(ConvertStringReset)(THIS) PURE;
322         STDMETHOD(GetRfc1766FromLcid)(THIS_ LCID,BSTR*) PURE;
323         STDMETHOD(GetLcidFromRfc1766)(THIS_ LCID*,BSTR) PURE;
324         STDMETHOD(EnumRfc1766)(THIS_ IEnumRfc1766**) PURE;
325         STDMETHOD(GetRfc1766Info)(THIS_ LCID,PRFC1766INFO) PURE;
326         STDMETHOD(CreateConvertCharset)(THIS_ UINT,UINT,DWORD,IMLangConvertCharset**) PURE;
327 };
328 #undef INTERFACE
329 EXTERN_C const CLSID CLSID_CMultiLanguage;
330 
331 EXTERN_C const IID IID_IMultiLanguage2;
332 #define INTERFACE IMultiLanguage2
DECLARE_INTERFACE_(IMultiLanguage2,IUnknown)333 DECLARE_INTERFACE_(IMultiLanguage2,IUnknown)
334 {
335         STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
336         STDMETHOD_(ULONG,AddRef)(THIS) PURE;
337         STDMETHOD_(ULONG,Release)(THIS) PURE;
338         STDMETHOD(GetNumberOfCodePageInfo)(THIS_ UINT*) PURE;
339         STDMETHOD(GetCodePageInfo)(THIS_ UINT,PMIMECPINFO) PURE;
340         STDMETHOD(GetFamilyCodePage)(THIS_ UINT,UINT*) PURE;
341         STDMETHOD(EnumCodePages)(THIS_ DWORD,IEnumCodePage**) PURE;
342         STDMETHOD(GetCharsetInfo)(THIS_ BSTR,PMIMECSETINFO) PURE;
343         STDMETHOD(IsConvertible)(THIS_ DWORD,DWORD) PURE;
344         STDMETHOD(ConvertString)(THIS_ DWORD*,DWORD,DWORD,BYTE*,UINT*,BYTE*,UINT*) PURE;
345         STDMETHOD(ConvertStringToUnicode)(THIS_ DWORD*,DWORD,CHAR*,UINT*,WCHAR*,UINT*) PURE;
346         STDMETHOD(ConvertStringFromUnicode)(THIS_ DWORD*,DWORD,WCHAR*,UINT*,CHAR*,UINT*) PURE;
347         STDMETHOD(ConvertStringReset)(THIS) PURE;
348         STDMETHOD(GetRfc1766FromLcid)(THIS_ LCID,BSTR*) PURE;
349         STDMETHOD(GetLcidFromRfc1766)(THIS_ LCID*,BSTR) PURE;
350         STDMETHOD(EnumRfc1766)(THIS_ IEnumRfc1766**) PURE;
351         STDMETHOD(GetRfc1766Info)(THIS_ LCID,PRFC1766INFO) PURE;
352         STDMETHOD(CreateConvertCharset)(THIS_ UINT,UINT,DWORD,IMLangConvertCharset**) PURE;
353         STDMETHOD(ConvertStringInIStream)(THIS_ DWORD*,DWORD,WCHAR*,DWORD,DWORD,IStream*,IStream*) PURE;
354         STDMETHOD(ConvertStringToUnicodeEx)(THIS_ DWORD*,DWORD,CHAR*,UINT*,WCHAR*,UINT*,DWORD,WCHAR*) PURE;
355         STDMETHOD(ConvertStringFromUnicodeEx)(THIS_ DWORD*,DWORD,WCHAR*,UINT*,CHAR*,UINT*,DWORD,WCHAR*) PURE;
356         STDMETHOD(DetectCodepageInIStream)(THIS_ DWORD,DWORD,IStream*,DetectEncodingInfo*,INT*) PURE;
357         STDMETHOD(DetectInputCodepage)(THIS_ DWORD,DWORD,CHAR*,INT*,DetectEncodingInfo*,INT*) PURE;
358         STDMETHOD(ValidateCodePage)(THIS) PURE;
359         STDMETHOD(GetCodePageDescription)(THIS_ UINT,LCID,LPWSTR,int) PURE;
360         STDMETHOD(IsCodePageInstallable)(THIS) PURE;
361         STDMETHOD(SetMimeDBSource)(THIS_ MIMECONTF) PURE;
362         STDMETHOD(GetNumberOfScripts)(THIS_ UINT*) PURE;
363         STDMETHOD(EnumScripts)(THIS_ DWORD,LANGID,IEnumScript**) PURE;
364 };
365 #undef INTERFACE
366 
367 #pragma pack(pop)
368 
369 #ifdef __cplusplus
370 }
371 #endif
372 
373 #endif
374