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