36#define CP_UNICODE 1200
72 {
"de-ch", 0x0807,
S_OK},
73 {
"de-at", 0x0c07,
S_OK},
74 {
"de-lu", 0x1007,
S_OK},
75 {
"de-li", 0x1407,
S_OK},
78 {
"en-gb", 0x809,
S_OK},
79 {
"en-GB", 0x809,
S_OK},
80 {
"EN-GB", 0x809,
S_OK},
81 {
"en-US", 0x409,
S_OK},
82 {
"en-us", 0x409,
S_OK},
85 {
"fr-be", 0x080c,
S_OK},
86 {
"fr-ca", 0x0c0c,
S_OK},
87 {
"fr-ch", 0x100c,
S_OK},
88 {
"fr-lu", 0x140c,
S_OK},
89 {
"fr-mc", 0x180c,
S_OK, 0x040c,
"fr"},
92 {
"it-ch", 0x0810,
S_OK},
95 {
"nl-be", 0x0813,
S_OK},
99 {
"kok", 0x0457,
S_OK, 0x0412,
"x-kok"}
114static const WCHAR de_en[] = {
'E',
'n',
'g',
'l',
'i',
's',
'c',
'h',0};
116 '(',
'K',
'a',
'n',
'a',
'd',
'a',
')',0};
118 '(',
'G',
'r',
'o',0xDF,
'b',
'r',
'i',
't',
'a',
'n',
'n',
'i',
'e',
'n',
')',0};
120 '(',
'V',
'e',
'r',
'e',
'i',
'n',
'i',
'g',
't',
'e',
's',
' ',
121 'K',0xF6,
'n',
'i',
'g',
'r',
'e',
'i',
'c',0};
123 '(',
'U',
'S',
'A',
')',0};
125 '(',
'V',
'e',
'r',
'e',
'i',
'n',
'i',
'g',
't',
'e',
' ',
126 'S',
't',
'a',
'a',
't',
'e',
'n',
')',0};
127static const WCHAR de_de[] = {
'D',
'e',
'u',
't',
's',
'c',
'h',
' ',
128 '(',
'D',
'e',
'u',
't',
's',
'c',
'h',
'l',
'a',
'n',
'd',
')',0};
130 '(',0xD6,
's',
't',
'e',
'r',
'r',
'e',
'i',
'c',
'h',
')',0};
132 '(',
'S',
'c',
'h',
'w',
'e',
'i',
'z',
')',0};
136 '(',
'C',
'a',
'n',
'a',
'd',
'a',
')',0};
138 '(',
'U',
'n',
'i',
't',
'e',
'd',
' ',
'K',
'i',
'n',
'g',
'd',
'o',
'm',
')',0};
140 '(',
'U',
'n',
'i',
't',
'e',
'd',
' ',
'S',
't',
'a',
't',
'e',
's',
')',0};
142 '(',
'G',
'e',
'r',
'm',
'a',
'n',
'y',
')',0};
144 '(',
'A',
'u',
's',
't',
'r',
'i',
'a',
')',0};
146 '(',
'S',
'w',
'i',
't',
'z',
'e',
'r',
'l',
'a',
'n',
'd',
')',0};
150 '(',
'C',
'a',
'n',
'a',
'd',
'a',
')',0};
152 '(',
'R',
'o',
'y',
'a',
'u',
'm',
'e',
'-',
'U',
'n',
'i',
')',0};
154 '(',0xC9,
't',
'a',
't',
's',
'-',
'U',
'n',
'i',
's',
')',0};
156 '(',
'U',
'.',
'S',
'.',
')',0};
157static const WCHAR fr_de[] = {
'A',
'l',
'l',
'e',
'm',
'a',
'n',
'd',
' ',
158 '(',
'A',
'l',
'l',
'e',
'm',
'a',
'g',
'n',
'e',
')',0};
159static const WCHAR fr_de2[] = {
'A',
'l',
'l',
'e',
'm',
'a',
'n',
'd',
' ',
160 '(',
'S',
't',
'a',
'n',
'd',
'a',
'r',
'd',
')',0};
162 '(',
'A',
'u',
't',
'r',
'i',
'c',
'h',
'e',
')',0};
164 '(',
'S',
'u',
'i',
's',
's',
'e',
')',0};
249 MIMECONTF_IMPORT | MIMECONTF_VALID | MIMECONTF_VALID_NLS | MIMECONTF_MIME_LATEST,
250 50936, 936, {
'C',
'h',
'i',
'n',
'e',
's',
'e',
' ',
'S',
'i',
'm',
'p',
'l',
'i',
'f',
'i',
'e',
'd',
' ',
'(',
'A',
'u',
't',
'o',
'-',
'S',
'e',
'l',
'e',
'c',
't',
')',0},
251 {
'_',
'a',
'u',
't',
'o',
'd',
'e',
't',
'e',
'c',
't',
'_',
'c',
'h',
's',0},
252 {
'_',
'a',
'u',
't',
'o',
'd',
'e',
't',
'e',
'c',
't',
'_',
'c',
'h',
's',0},
253 {
'_',
'a',
'u',
't',
'o',
'd',
'e',
't',
'e',
'c',
't',
'_',
'c',
'h',
's',0},
254 {
'S',
'i',
'm',
's',
'u',
'n',0},
255 {
'S',
'i',
'm',
's',
'u',
'n',0}, 134
261 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_MINIMAL | MIMECONTF_IMPORT |
262 MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID |
263 MIMECONTF_VALID_NLS | MIMECONTF_MIME_IE4 | MIMECONTF_MIME_LATEST,
264 936, 936, {
'C',
'h',
'i',
'n',
'e',
's',
'e',
' ',
'S',
'i',
'm',
'p',
'l',
'i',
'f',
'i',
'e',
'd',
' ',
'(',
'G',
'B',
'2',
'3',
'1',
'2',
')',0},
265 {
'g',
'b',
'2',
'3',
'1',
'2',0},
266 {
'g',
'b',
'2',
'3',
'1',
'2',0},
267 {
'g',
'b',
'2',
'3',
'1',
'2',0},
268 {
'S',
'i',
'm',
's',
'u',
'n',0},
269 {
'S',
'i',
'm',
's',
'u',
'n',0}, 134
275 MIMECONTF_IMPORT | MIMECONTF_EXPORT | MIMECONTF_VALID | MIMECONTF_VALID_NLS |
276 MIMECONTF_MIME_LATEST,
277 20936, 936, {
'C',
'h',
'i',
'n',
'e',
's',
'e',
' ',
'S',
'i',
'm',
'p',
'l',
'i',
'f',
'i',
'e',
'd',
' ',
'(',
'G',
'B',
'2',
'3',
'1',
'2',
'-',
'8',
'0',
')',0},
278 {
'x',
'-',
'c',
'p',
'2',
'0',
'9',
'3',
'6',0},
279 {
'x',
'-',
'c',
'p',
'2',
'0',
'9',
'3',
'6',0},
280 {
'x',
'-',
'c',
'p',
'2',
'0',
'9',
'3',
'6',0},
281 {
'S',
'i',
'm',
's',
'u',
'n',0},
282 {
'S',
'i',
'm',
's',
'u',
'n',0}, 134
288 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_IMPORT | MIMECONTF_SAVABLE_MAILNEWS |
289 MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID | MIMECONTF_VALID_NLS |
290 MIMECONTF_MIME_IE4 | MIMECONTF_MIME_LATEST,
291 52936, 936, {
'C',
'h',
'i',
'n',
'e',
's',
'e',
' ',
'S',
'i',
'm',
'p',
'l',
'i',
'f',
'i',
'e',
'd',
' ',
'(',
'H',
'Z',
')',0},
292 {
'h',
'z',
'-',
'g',
'b',
'-',
'2',
'3',
'1',
'2',0},
293 {
'h',
'z',
'-',
'g',
'b',
'-',
'2',
'3',
'1',
'2',0},
294 {
'h',
'z',
'-',
'g',
'b',
'-',
'2',
'3',
'1',
'2',0},
295 {
'S',
'i',
'm',
's',
'u',
'n',0},
296 {
'S',
'i',
'm',
's',
'u',
'n',0}, 134
302 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_MINIMAL | MIMECONTF_IMPORT |
303 MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID |
304 MIMECONTF_VALID_NLS | MIMECONTF_MIME_LATEST,
305 54936, 936, {
'C',
'h',
'i',
'n',
'e',
's',
'e',
' ',
'S',
'i',
'm',
'p',
'l',
'i',
'f',
'i',
'e',
'd',
' ',
'(',
'G',
'B',
'1',
'8',
'0',
'3',
'0',
')',0},
306 {
'G',
'B',
'1',
'8',
'0',
'3',
'0',0},
307 {
'G',
'B',
'1',
'8',
'0',
'3',
'0',0},
308 {
'G',
'B',
'1',
'8',
'0',
'3',
'0',0},
309 {
'S',
'i',
'm',
's',
'u',
'n',0},
310 {
'S',
'i',
'm',
's',
'u',
'n',0}, 134
316 MIMECONTF_IMPORT | MIMECONTF_VALID | MIMECONTF_VALID_NLS | MIMECONTF_MIME_LATEST,
317 50950, 950, {
'C',
'h',
'i',
'n',
'e',
's',
'e',
' ',
'T',
'r',
'a',
'd',
'i',
't',
'i',
'o',
'n',
'a',
'l',
' ',
'(',
'A',
'u',
't',
'o',
'-',
'S',
'e',
'l',
'e',
'c',
't',
')',0},
318 {
'_',
'a',
'u',
't',
'o',
'd',
'e',
't',
'e',
'c',
't',
'_',
'c',
'h',
't',0},
319 {
'_',
'a',
'u',
't',
'o',
'd',
'e',
't',
'e',
'c',
't',
'_',
'c',
'h',
't',0},
320 {
'_',
'a',
'u',
't',
'o',
'd',
'e',
't',
'e',
'c',
't',
'_',
'c',
'h',
't',0},
321 {
'M',
'i',
'n',
'g',
'L',
'i',
'u',0},
322 {
'N',
'e',
'w',
' ',
'M',
'i',
'n',
'g',
'L',
'i',
'u',0}, 136
328 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_MINIMAL | MIMECONTF_IMPORT |
329 MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID |
330 MIMECONTF_VALID_NLS | MIMECONTF_MIME_IE4 | MIMECONTF_MIME_LATEST,
331 950, 950, {
'C',
'h',
'i',
'n',
'e',
's',
'e',
' ',
'T',
'r',
'a',
'd',
'i',
't',
'i',
'o',
'n',
'a',
'l',
' ',
'(',
'B',
'i',
'g',
'5',
')',0},
335 {
'M',
'i',
'n',
'g',
'L',
'i',
'u',0},
336 {
'N',
'e',
'w',
' ',
'M',
'i',
'n',
'g',
'L',
'i',
'u',0}, 136
342 MIMECONTF_IMPORT | MIMECONTF_EXPORT | MIMECONTF_VALID | MIMECONTF_VALID_NLS |
343 MIMECONTF_MIME_LATEST,
344 20000, 950, {
'C',
'h',
'i',
'n',
'e',
's',
'e',
' ',
'T',
'r',
'a',
'd',
'i',
't',
'i',
'o',
'n',
'a',
'l',
' ',
'(',
'C',
'N',
'S',
')',0},
345 {
'x',
'-',
'C',
'h',
'i',
'n',
'e',
's',
'e',
'-',
'C',
'N',
'S',0},
346 {
'x',
'-',
'C',
'h',
'i',
'n',
'e',
's',
'e',
'-',
'C',
'N',
'S',0},
347 {
'x',
'-',
'C',
'h',
'i',
'n',
'e',
's',
'e',
'-',
'C',
'N',
'S',0},
348 {
'M',
'i',
'n',
'g',
'L',
'i',
'u',0},
349 {
'N',
'e',
'w',
' ',
'M',
'i',
'n',
'g',
'L',
'i',
'u',0}, 136
355 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_IMPORT | MIMECONTF_SAVABLE_MAILNEWS |
356 MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID | MIMECONTF_VALID_NLS |
357 MIMECONTF_MIME_LATEST,
358 1256, 1256, {
'A',
'r',
'a',
'b',
'i',
'c',
' ',
'(',
'W',
'i',
'n',
'd',
'o',
'w',
's',
')',0},
359 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'6',0},
360 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'6',0},
361 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'6',0},
362 {
'S',
'i',
'm',
'p',
'l',
'i',
'f',
'i',
'e',
'd',
' ',
'A',
'r',
'a',
'b',
'i',
'c',
' ',
'F',
'i',
'x',
'e',
'd',0},
363 {
'S',
'i',
'm',
'p',
'l',
'i',
'f',
'i',
'e',
'd',
' ',
'A',
'r',
'a',
'b',
'i',
'c',0}, 178
369 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_MINIMAL | MIMECONTF_IMPORT |
370 MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID |
371 MIMECONTF_VALID_NLS | MIMECONTF_MIME_LATEST,
372 1257, 1257, {
'B',
'a',
'l',
't',
'i',
'c',
' ',
'(',
'W',
'i',
'n',
'd',
'o',
'w',
's',
')',0},
373 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'7',0},
374 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'7',0},
375 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'7',0},
376 {
'C',
'o',
'u',
'r',
'i',
'e',
'r',
' ',
'N',
'e',
'w',0},
377 {
'A',
'r',
'i',
'a',
'l',0}, 186
383 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_IMPORT | MIMECONTF_SAVABLE_MAILNEWS |
384 MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID | MIMECONTF_VALID_NLS |
385 MIMECONTF_MIME_LATEST,
386 1250, 1250, {
'C',
'e',
'n',
't',
'r',
'a',
'l',
' ',
'E',
'u',
'r',
'o',
'p',
'e',
'a',
'n',
' ',
'(',
'W',
'i',
'n',
'd',
'o',
'w',
's',
')',0},
387 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'0',0},
388 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'0',0},
389 {
'i',
's',
'o',
'-',
'8',
'8',
'5',
'9',
'-',
'2',0},
390 {
'C',
'o',
'u',
'r',
'i',
'e',
'r',
' ',
'N',
'e',
'w',0},
391 {
'A',
'r',
'i',
'a',
'l',0}, 238
398 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_IMPORT | MIMECONTF_SAVABLE_MAILNEWS |
399 MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID | MIMECONTF_VALID_NLS |
400 MIMECONTF_MIME_LATEST,
401 1251, 1251, {
'C',
'y',
'r',
'i',
'l',
'l',
'i',
'c',
' ',
'(',
'W',
'i',
'n',
'd',
'o',
'w',
's',
')',0},
402 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'1',0},
403 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'1',0},
404 {
'k',
'o',
'i',
'8',
'-',
'r',0},
405 {
'C',
'o',
'u',
'r',
'i',
'e',
'r',
' ',
'N',
'e',
'w',0},
406 {
'A',
'r',
'i',
'a',
'l',0}, 204
413 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_IMPORT | MIMECONTF_SAVABLE_MAILNEWS |
414 MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID | MIMECONTF_VALID_NLS |
415 MIMECONTF_MIME_LATEST,
416 1253, 1253, {
'G',
'r',
'e',
'e',
'k',
' ',
'(',
'W',
'i',
'n',
'd',
'o',
'w',
's',
')',0},
417 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'3',0},
418 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'3',0},
419 {
'i',
's',
'o',
'-',
'8',
'8',
'5',
'9',
'-',
'7',0},
420 {
'C',
'o',
'u',
'r',
'i',
'e',
'r',
' ',
'N',
'e',
'w',0},
421 {
'A',
'r',
'i',
'a',
'l',0}, 161
428 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_IMPORT | MIMECONTF_SAVABLE_MAILNEWS |
429 MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID | MIMECONTF_VALID_NLS |
430 MIMECONTF_MIME_LATEST,
431 1255, 1255, {
'H',
'e',
'b',
'r',
'e',
'w',
' ',
'(',
'W',
'i',
'n',
'd',
'o',
'w',
's',
')',0},
432 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'5',0},
433 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'5',0},
434 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'5',0},
435 {
'M',
'i',
'r',
'i',
'a',
'm',
' ',
'F',
'i',
'x',
'e',
'd',0},
436 {
'D',
'a',
'v',
'i',
'd',0}, 177
442 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_MINIMAL | MIMECONTF_IMPORT |
443 MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID |
444 MIMECONTF_VALID_NLS | MIMECONTF_MIME_IE4 | MIMECONTF_MIME_LATEST,
445 932, 932, {
'J',
'a',
'p',
'a',
'n',
'e',
's',
'e',
' ',
'(',
'S',
'h',
'i',
'f',
't',
'-',
'J',
'I',
'S',
')',0},
446 {
's',
'h',
'i',
'f',
't',
'_',
'j',
'i',
's',0},
447 {
'i',
's',
'o',
'-',
'2',
'0',
'2',
'2',
'-',
'j',
'p',0},
448 {
'i',
's',
'o',
'-',
'2',
'0',
'2',
'2',
'-',
'j',
'p',0},
449 {
'M',
'S',
' ',
'G',
'o',
't',
'h',
'i',
'c',0},
450 {
'M',
'S',
' ',
'P',
'G',
'o',
't',
'h',
'i',
'c',0}, 128
456 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_MINIMAL | MIMECONTF_IMPORT |
457 MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID |
458 MIMECONTF_VALID_NLS | MIMECONTF_MIME_LATEST,
459 949, 949, {
'K',
'o',
'r',
'e',
'a',
'n',0},
460 {
'k',
's',
'_',
'c',
'_',
'5',
'6',
'0',
'1',
'-',
'1',
'9',
'8',
'7',0},
461 {
'k',
's',
'_',
'c',
'_',
'5',
'6',
'0',
'1',
'-',
'1',
'9',
'8',
'7',0},
462 {
'k',
's',
'_',
'c',
'_',
'5',
'6',
'0',
'1',
'-',
'1',
'9',
'8',
'7',0},
463 {
'G',
'u',
'l',
'i',
'm',
'C',
'h',
'e',0},
464 {
'G',
'u',
'l',
'i',
'm',0}, 129
470 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_MINIMAL | MIMECONTF_IMPORT |
471 MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID |
472 MIMECONTF_VALID_NLS | MIMECONTF_MIME_LATEST,
473 874, 874, {
'T',
'h',
'a',
'i',
' ',
'(',
'W',
'i',
'n',
'd',
'o',
'w',
's',
')',0},
474 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'8',
'7',
'4',0},
475 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'8',
'7',
'4',0},
476 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'8',
'7',
'4',0},
477 {
'T',
'a',
'h',
'o',
'm',
'a',0},
478 {
'T',
'a',
'h',
'o',
'm',
'a',0}, 222
485 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_MINIMAL | MIMECONTF_IMPORT |
486 MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID |
487 MIMECONTF_VALID_NLS | MIMECONTF_MIME_LATEST,
488 1254, 1254, {
'T',
'u',
'r',
'k',
'i',
's',
'h',
' ',
'(',
'W',
'i',
'n',
'd',
'o',
'w',
's',
')',0},
489 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'4',0},
490 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'4',0},
491 {
'i',
's',
'o',
'-',
'8',
'8',
'5',
'9',
'-',
'9',0},
492 {
'C',
'o',
'u',
'r',
'i',
'e',
'r',
' ',
'N',
'e',
'w',0},
493 {
'A',
'r',
'i',
'a',
'l',0}, 162
500 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_IMPORT | MIMECONTF_SAVABLE_MAILNEWS |
501 MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID | MIMECONTF_VALID_NLS |
502 MIMECONTF_MIME_IE4 | MIMECONTF_MIME_LATEST,
503 1258, 1258, {
'V',
'i',
'e',
't',
'n',
'a',
'm',
'e',
's',
'e',
' ',
'(',
'W',
'i',
'n',
'd',
'o',
'w',
's',
')',0},
504 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'8',0},
505 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'8',0},
506 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'8',0},
507 {
'C',
'o',
'u',
'r',
'i',
'e',
'r',
' ',
'N',
'e',
'w',0},
508 {
'A',
'r',
'i',
'a',
'l',0}, 163
514 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_MINIMAL | MIMECONTF_IMPORT |
515 MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID |
516 MIMECONTF_VALID_NLS | MIMECONTF_MIME_LATEST,
517 1252, 1252, {
'W',
'e',
's',
't',
'e',
'r',
'n',
' ',
'E',
'u',
'r',
'o',
'p',
'e',
'a',
'n',
' ',
'(',
'W',
'i',
'n',
'd',
'o',
'w',
's',
')',0},
518 {
'W',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'2',0},
519 {
'W',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'2',0},
520 {
'i',
's',
'o',
'-',
'8',
'8',
'5',
'9',
'-',
'1',0},
521 {
'C',
'o',
'u',
'r',
'i',
'e',
'r',
' ',
'N',
'e',
'w',0},
522 {
'A',
'r',
'i',
'a',
'l',0}, 0
529 MIMECONTF_MINIMAL | MIMECONTF_IMPORT | MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT |
530 MIMECONTF_VALID | MIMECONTF_VALID_NLS | MIMECONTF_MIME_IE4 | MIMECONTF_MIME_LATEST,
531 1200, 1200, {
'U',
'n',
'i',
'c',
'o',
'd',
'e',0},
532 {
'u',
'n',
'i',
'c',
'o',
'd',
'e',0},
533 {
'u',
'n',
'i',
'c',
'o',
'd',
'e',0},
534 {
'u',
'n',
'i',
'c',
'o',
'd',
'e',0},
535 {
'C',
'o',
'u',
'r',
'i',
'e',
'r',
' ',
'N',
'e',
'w',0},
536 {
'A',
'r',
'i',
'a',
'l',0}, 1
546 pConvertINetMultiByteToUnicode = (
void *)
GetProcAddress(hMlang,
"ConvertINetMultiByteToUnicode");
547 pConvertINetUnicodeToMultiByte = (
void *)
GetProcAddress(hMlang,
"ConvertINetUnicodeToMultiByte");
548 pRfc1766ToLcidA = (
void *)
GetProcAddress(hMlang,
"Rfc1766ToLcidA");
549 pLcidToRfc1766A = (
void *)
GetProcAddress(hMlang,
"LcidToRfc1766A");
556#define ok_w2(format, szString1, szString2) \
558 if (lstrcmpW((szString1), (szString2)) != 0) \
560 CHAR string1[256], string2[256]; \
561 WideCharToMultiByte(CP_ACP, 0, (szString1), -1, string1, 256, NULL, NULL); \
562 WideCharToMultiByte(CP_ACP, 0, (szString2), -1, string2, 256, NULL, NULL); \
563 ok(0, (format), string1, string2); \
569 char stringA[] =
"Just a test string\0";
570 WCHAR stringW[] = {
'J',
'u',
's',
't',
' ',
'a',
' ',
't',
'e',
's',
't',
' ',
's',
't',
'r',
'i',
'n',
'g',0};
573 UINT lenA, lenW, expected_len;
578 memset(bufW,
'x',
sizeof(bufW));
581 ret = IMultiLanguage2_ConvertStringToUnicode(iML2,
NULL, 1252, stringA, &lenA, bufW, &lenW);
582 ok(
ret ==
S_OK,
"IMultiLanguage2_ConvertStringToUnicode failed: %08lx\n",
ret);
583 ok(lenA == 0,
"expected lenA 0, got %u\n", lenA);
584 ok(lenW == 0,
"expected lenW 0, got %u\n", lenW);
586 memset(bufW,
'x',
sizeof(bufW));
589 ret = IMultiLanguage2_ConvertStringToUnicode(iML2,
NULL, 1252, stringA, &lenA, bufW, &lenW);
590 ok(
ret ==
S_OK,
"IMultiLanguage2_ConvertStringToUnicode failed: %08lx\n",
ret);
595 ok(bufW[lenW] != 0,
"buf should not be 0 terminated\n");
600 memset(bufW,
'x',
sizeof(bufW));
603 ret = IMultiLanguage2_ConvertStringToUnicode(iML2,
NULL, 1252, stringA, &lenA, bufW, &lenW);
604 ok(
ret ==
E_FAIL,
"IMultiLanguage2_ConvertStringToUnicode should fail: %08lx\n",
ret);
605 ok(lenW == 0,
"expected lenW 0, got %u\n", lenW);
609 memset(bufW,
'x',
sizeof(bufW));
612 ret = IMultiLanguage2_ConvertStringToUnicode(iML2,
NULL,
CP_UNICODE, stringA, &lenA, bufW, &lenW);
613 ok(
ret ==
S_OK,
"IMultiLanguage2_ConvertStringToUnicode failed: %08lx\n",
ret);
616 ok(bufW[lenW] != 0,
"buf should not be 0 terminated\n");
620 memset(bufW,
'x',
sizeof(bufW));
623 ret = IMultiLanguage2_ConvertStringToUnicode(iML2,
NULL, 1252, stringA, &lenA,
NULL, &lenW);
624 ok(
ret ==
S_OK,
"IMultiLanguage2_ConvertStringToUnicode failed: %08lx\n",
ret);
627 ok(lenW == expected_len,
"expected lenW %u, got %u\n", expected_len, lenW);
629 memset(bufW,
'x',
sizeof(bufW));
632 ret = pConvertINetMultiByteToUnicode(
NULL, 1252, stringA, (
INT *)&lenA,
NULL, (
INT *)&lenW);
633 ok(
ret ==
S_OK,
"ConvertINetMultiByteToUnicode failed: %08lx\n",
ret);
636 ok(lenW == expected_len,
"expected lenW %u, got %u\n", expected_len, lenW);
638 memset(bufW,
'x',
sizeof(bufW));
641 ret = pConvertINetMultiByteToUnicode(
NULL, 1252, stringA, (
INT *)&lenA,
NULL, (
INT *)&lenW);
642 ok(
ret ==
S_OK,
"ConvertINetMultiByteToUnicode failed: %08lx\n",
ret);
645 ok(lenW == expected_len,
"expected lenW %u, got %u\n", expected_len, lenW);
649 memset(bufA,
'x',
sizeof(bufA));
652 ret = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
stringW, &lenW, bufA, &lenA);
653 ok(
ret ==
S_OK,
"IMultiLanguage2_ConvertStringFromUnicode failed: %08lx\n",
ret);
654 ok(lenA == 0,
"expected lenA 0, got %u\n", lenA);
655 ok(lenW == 0,
"expected lenW 0, got %u\n", lenW);
657 memset(bufA,
'x',
sizeof(bufA));
660 ret = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
stringW, &lenW, bufA, &lenA);
661 ok(
ret ==
S_OK,
"IMultiLanguage2_ConvertStringFromUnicode failed: %08lx\n",
ret);
664 ok(bufA[lenA] != 0,
"buf should not be 0 terminated\n");
666 ok(!
lstrcmpA(bufA, stringA),
"bufA/stringA mismatch\n");
668 memset(bufA,
'x',
sizeof(bufA));
671 ret = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
stringW, &lenW, bufA, &lenA);
672 ok(
ret ==
E_FAIL,
"IMultiLanguage2_ConvertStringFromUnicode should fail: %08lx\n",
ret);
673 ok(lenA == 0,
"expected lenA 0, got %u\n", lenA);
675 ok(!
memcmp(bufA, stringA, 5),
"bufW/stringW mismatch\n");
677 memset(bufA,
'x',
sizeof(bufA));
681 ok(
ret ==
S_OK,
"IMultiLanguage2_ConvertStringFromUnicode failed: %08lx\n",
ret);
682 ok(lenA ==
lstrlenA(stringA) * (
int)
sizeof(
WCHAR),
"wrong lenA %u\n", lenA);
684 ok(bufA[lenA] != 0 && bufA[lenA+1] != 0,
"buf should not be 0 terminated\n");
689 memset(bufA,
'x',
sizeof(bufA));
692 ret = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
stringW, &lenW,
NULL, &lenA);
693 ok(
ret ==
S_OK,
"IMultiLanguage2_ConvertStringFromUnicode failed: %08lx\n",
ret);
696 ok(lenA == expected_len,
"expected lenA %u, got %u\n", expected_len, lenA);
699static void cpinfo_cmp(MIMECPINFO *cpinfo1, MIMECPINFO *cpinfo2)
701 ok(cpinfo1->dwFlags == cpinfo2->dwFlags,
"dwFlags mismatch: %08lx != %08lx\n", cpinfo1->dwFlags, cpinfo2->dwFlags);
702 ok(cpinfo1->uiCodePage == cpinfo2->uiCodePage,
"uiCodePage mismatch: %u != %u\n", cpinfo1->uiCodePage, cpinfo2->uiCodePage);
703 ok(cpinfo1->uiFamilyCodePage == cpinfo2->uiFamilyCodePage,
"uiFamilyCodePage mismatch: %u != %u\n", cpinfo1->uiFamilyCodePage, cpinfo2->uiFamilyCodePage);
704 ok(!
lstrcmpW(cpinfo1->wszDescription, cpinfo2->wszDescription),
"wszDescription mismatch\n");
705 ok(!
lstrcmpW(cpinfo1->wszWebCharset, cpinfo2->wszWebCharset),
"wszWebCharset mismatch\n");
706 ok(!
lstrcmpW(cpinfo1->wszHeaderCharset, cpinfo2->wszHeaderCharset),
"wszHeaderCharset mismatch\n");
707 ok(!
lstrcmpW(cpinfo1->wszBodyCharset, cpinfo2->wszBodyCharset),
"wszBodyCharset mismatch\n");
708 ok(!
lstrcmpW(cpinfo1->wszFixedWidthFont, cpinfo2->wszFixedWidthFont),
"wszFixedWidthFont mismatch\n");
709 ok(!
lstrcmpW(cpinfo1->wszProportionalFont, cpinfo2->wszProportionalFont),
"wszProportionalFont mismatch\n");
710 ok(cpinfo1->bGDICharset == cpinfo2->bGDICharset,
"bGDICharset mismatch: %d != %d\n", cpinfo1->bGDICharset, cpinfo2->bGDICharset);
714static const char *dump_mime_flags(
DWORD flags)
716 static char buf[1024];
720 if (
flags & MIMECONTF_MAILNEWS)
strcat(
buf,
" MIMECONTF_MAILNEWS");
724 if (
flags & MIMECONTF_SAVABLE_MAILNEWS)
strcat(
buf,
" MIMECONTF_SAVABLE_MAILNEWS");
725 if (
flags & MIMECONTF_SAVABLE_BROWSER)
strcat(
buf,
" MIMECONTF_SAVABLE_BROWSER");
727 if (
flags & MIMECONTF_PRIVCONVERTER)
strcat(
buf,
" MIMECONTF_PRIVCONVERTER");
729 if (
flags & MIMECONTF_VALID_NLS)
strcat(
buf,
" MIMECONTF_VALID_NLS");
730 if (
flags & MIMECONTF_MIME_IE4)
strcat(
buf,
" MIMECONTF_MIME_IE4");
731 if (
flags & MIMECONTF_MIME_LATEST)
strcat(
buf,
" MIMECONTF_MIME_LATEST");
732 if (
flags & MIMECONTF_MIME_REGISTRY)
strcat(
buf,
" MIMECONTF_MIME_REGISTRY");
756 if(
cb == 0 || fDefaultChar)
758 trace(
"target codepage %i does not contain 'abc'\n",
from);
765 hr = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL,
from,
strW,
773 &srcsz,
dest, &destsz);
782 IEnumCodePage *iEnumCP =
NULL;
790 ret = IMultiLanguage2_GetNumberOfCodePageInfo(iML2, &
total);
791 ok(
ret ==
S_OK &&
total != 0,
"IMultiLanguage2_GetNumberOfCodePageInfo: expected S_OK/!0, got %08lx/%u\n",
ret,
total);
793 trace(
"total mlang supported codepages %u\n",
total);
796 ok(
ret ==
S_OK && iEnumCP,
"IMultiLanguage2_EnumCodePages: expected S_OK/!NULL, got %08lx/%p\n",
ret, iEnumCP);
798 ret = IEnumCodePage_Reset(iEnumCP);
799 ok(
ret ==
S_OK,
"IEnumCodePage_Reset: expected S_OK, got %08lx\n",
ret);
801 ret = IEnumCodePage_Next(iEnumCP, 0,
NULL, &
n);
803 "IEnumCodePage_Next: expected S_FALSE or E_FAIL, got %08lx\n",
ret);
805 ok(
n == 0,
"IEnumCodePage_Next: expected 0/S_FALSE, got %lu/%08lx\n",
n,
ret);
807 ok(
n == 65536,
"IEnumCodePage_Next: expected 65536/E_FAIL, got %lu/%08lx\n",
n,
ret);
810 "IEnumCodePage_Next: expected S_FALSE or E_FAIL, got %08lx\n",
ret);
815 ret = IEnumCodePage_Next(iEnumCP, 0,
cpinfo, &
n);
816 ok(
ret ==
S_FALSE &&
n == 0,
"IEnumCodePage_Next: expected S_FALSE/0, got %08lx/%lu\n",
ret,
n);
820 ok(
ret ==
S_OK &&
n != 0,
"IEnumCodePage_Next: expected S_OK/!0, got %08lx/%lu\n",
ret,
n);
822 trace(
"flags %08lx, enumerated codepages %lu\n",
flags,
n);
826 ok(
n ==
total,
"IEnumCodePage_Next: expected %u, got %lu\n",
total,
n);
828 flags = MIMECONTF_MIME_LATEST;
833 for (
i = 0;
i <
n;
i++)
838 static const WCHAR autoW[] = {
'_',
'a',
'u',
't',
'o',0};
839 static const WCHAR feffW[] = {
'u',
'n',
'i',
'c',
'o',
'd',
'e',
'F',
'E',
'F',
'F',0};
842 trace(
"MIMECPINFO #%u:\n"
845 "uiFamilyCodePage %u\n"
846 "wszDescription %s\n"
848 "wszHeaderCharset %s\n"
849 "wszBodyCharset %s\n"
850 "wszFixedWidthFont %s\n"
851 "wszProportionalFont %s\n"
852 "bGDICharset %d\n\n",
871 trace(
"TranslateCharsetInfo failed for cp %u\n",
cpinfo[
i].uiFamilyCodePage);
883 ok(
ret ==
S_OK,
"IMultiLanguage2_IsConvertible(%u -> CP_UNICODE) = %08lx\n",
cpinfo[
i].uiCodePage,
ret);
885 ok(
ret ==
S_OK,
"IMultiLanguage2_IsConvertible(CP_UNICODE -> %u) = %08lx\n",
cpinfo[
i].uiCodePage,
ret);
888 if (convertible !=
E_FAIL)
891 ok(
ret == convertible,
"IMultiLanguage2_IsConvertible(%u -> CP_UTF8) = %08lx\n",
cpinfo[
i].uiCodePage,
ret);
893 ok(
ret == convertible,
"IMultiLanguage2_IsConvertible(CP_UTF8 -> %u) = %08lx\n",
cpinfo[
i].uiCodePage,
ret);
898 trace(
"IsValidCodePage failed for cp %u\n",
cpinfo[
i].uiCodePage);
901 skip(
"Legacy windows bug returning invalid charset of unicodeFEFF\n");
904 ret = IMultiLanguage2_GetCharsetInfo(iML2,
cpinfo[
i].wszWebCharset, &mcsi);
908 ok (
ret ==
S_OK,
"IMultiLanguage2_GetCharsetInfo failed: %08lx\n",
ret);
918 ok(mcsi.uiInternetEncoding ==
cpinfo[
i].uiCodePage || mcsi.uiInternetEncoding ==
cpinfo[
i].uiFamilyCodePage,
919 "%u != %u || %u\n", mcsi.uiInternetEncoding,
cpinfo[
i].uiCodePage,
cpinfo[
i].uiFamilyCodePage);
920 ok(mcsi.uiCodePage ==
cpinfo[
i].uiCodePage || mcsi.uiCodePage ==
cpinfo[
i].uiFamilyCodePage,
921 "%u != %u || %u\n", mcsi.uiCodePage,
cpinfo[
i].uiCodePage,
cpinfo[
i].uiFamilyCodePage);
927 skip(
"Legacy windows bug returning invalid charset of unicodeFEFF\n");
930 ret = IMultiLanguage2_GetCharsetInfo(iML2,
cpinfo[
i].wszHeaderCharset, &mcsi);
934 ok (
ret ==
S_OK,
"IMultiLanguage2_GetCharsetInfo failed: %08lx\n",
ret);
944 ok(mcsi.uiInternetEncoding ==
cpinfo[
i].uiCodePage || mcsi.uiInternetEncoding ==
cpinfo[
i].uiFamilyCodePage,
945 "%u != %u || %u\n", mcsi.uiInternetEncoding,
cpinfo[
i].uiCodePage,
cpinfo[
i].uiFamilyCodePage);
946 ok(mcsi.uiCodePage ==
cpinfo[
i].uiCodePage || mcsi.uiCodePage ==
cpinfo[
i].uiFamilyCodePage,
947 "%u != %u || %u\n", mcsi.uiCodePage,
cpinfo[
i].uiCodePage,
cpinfo[
i].uiFamilyCodePage);
953 skip(
"Legacy windows bug returning invalid charset of unicodeFEFF\n");
956 ret = IMultiLanguage2_GetCharsetInfo(iML2,
cpinfo[
i].wszBodyCharset, &mcsi);
960 ok (
ret ==
S_OK,
"IMultiLanguage2_GetCharsetInfo failed: %08lx\n",
ret);
970 ok(mcsi.uiInternetEncoding ==
cpinfo[
i].uiCodePage || mcsi.uiInternetEncoding ==
cpinfo[
i].uiFamilyCodePage,
971 "%u != %u || %u\n", mcsi.uiInternetEncoding,
cpinfo[
i].uiCodePage,
cpinfo[
i].uiFamilyCodePage);
972 ok(mcsi.uiCodePage ==
cpinfo[
i].uiCodePage || mcsi.uiCodePage ==
cpinfo[
i].uiFamilyCodePage,
973 "%u != %u || %u\n", mcsi.uiCodePage,
cpinfo[
i].uiCodePage,
cpinfo[
i].uiFamilyCodePage);
981 ret = IEnumCodePage_Next(iEnumCP, 1, &cpinfo2, &
n);
982 ok(
ret ==
S_FALSE &&
n == 0,
"IEnumCodePage_Next: expected S_FALSE/0, got %08lx/%lu\n",
ret,
n);
984 ret = IEnumCodePage_Reset(iEnumCP);
985 ok(
ret ==
S_OK,
"IEnumCodePage_Reset: expected S_OK, got %08lx\n",
ret);
987 ret = IEnumCodePage_Next(iEnumCP, 1, &cpinfo2, &
n);
988 ok(
n == 1 &&
ret ==
S_OK,
"IEnumCodePage_Next: expected 1/S_OK, got %lu/%08lx\n",
n,
ret);
996 ret = IEnumCodePage_Skip(iEnumCP, 1);
997 ok(
ret ==
S_OK,
"IEnumCodePage_Skip: expected S_OK, got %08lx\n",
ret);
1002 ret = IEnumCodePage_Next(iEnumCP, 1, &cpinfo2, &
n);
1003 ok(
n == 1 &&
ret ==
S_OK,
"IEnumCodePage_Next: expected 1/S_OK, got %lu/%08lx\n",
n,
ret);
1008 IEnumCodePage_Release(iEnumCP);
1013 WCHAR asciiW[] = {
'a',
's',
'c',
'i',
'i',0};
1014 WCHAR iso88591_1W[] = {
'I',
'S',
'O',
'-',
'8',
'8',
'5',
'9',
'-',
'1',0};
1015 WCHAR iso88591_1retW[] = {
'i',
's',
'o',
'-',
'8',
'8',
'5',
'9',
'-',
'1',0};
1016 WCHAR iso88591_2W[] = {
'I',
'S',
'O',
'8',
'8',
'5',
'9',
'-',
'1',0};
1017 WCHAR iso88591_2retW[] = {
'i',
's',
'o',
'8',
'8',
'5',
'9',
'-',
'1',0};
1018 WCHAR iso88591_3W[] = {
'I',
'S',
'O',
'8',
'8',
'5',
'9',
'1',0};
1019 WCHAR iso88591_4W[] = {
'I',
'S',
'O',
'-',
'8',
'8',
'5',
'9',
'1',0};
1020 WCHAR iso88591_5W[] = {
'I',
'S',
'O',
'8',
'8',
'-',
'5',
'9',
'1',0};
1021 WCHAR iso88591_6W[] = {
'-',
'I',
'S',
'O',
'8',
'8',
'5',
'9',
'1',0};
1022 WCHAR iso88591_7W[] = {
' ',
'I',
'S',
'O',
'-',
'8',
'8',
'5',
'9',
'-',
'1',0};
1028 {
S_OK, asciiW, asciiW },
1029 {
S_OK, iso88591_1W, iso88591_1retW },
1030 {
S_OK, iso88591_2W, iso88591_2retW },
1031 {
E_FAIL, iso88591_3W, 0 },
1032 {
E_FAIL, iso88591_4W, 0 },
1033 {
E_FAIL, iso88591_5W, 0 },
1034 {
E_FAIL, iso88591_6W, 0 },
1035 {
E_FAIL, iso88591_7W, 0 },
1055 ok(sinfo1->ScriptId == sinfo2->ScriptId,
"ScriptId mismatch: %d != %d\n", sinfo1->ScriptId, sinfo2->ScriptId);
1056 ok(sinfo1->uiCodePage == sinfo2->uiCodePage,
"uiCodePage mismatch: %u != %u\n", sinfo1->uiCodePage, sinfo2->uiCodePage);
1057 ok(!
lstrcmpW(sinfo1->wszDescription, sinfo2->wszDescription),
"wszDescription mismatch\n");
1058 ok(!
lstrcmpW(sinfo1->wszFixedWidthFont, sinfo2->wszFixedWidthFont),
"wszFixedWidthFont mismatch\n");
1059 ok(!
lstrcmpW(sinfo1->wszProportionalFont, sinfo2->wszProportionalFont),
"wszProportionalFont mismatch\n");
1064 IEnumScript *iEnumScript =
NULL;
1072 ret = IMultiLanguage2_GetNumberOfScripts(iML2, &
total);
1073 ok(
ret ==
S_OK &&
total != 0,
"IMultiLanguage2_GetNumberOfScripts: expected S_OK/!0, got %08lx/%u\n",
ret,
total);
1075 trace(
"total mlang supported scripts %u\n",
total);
1078 ok(
ret ==
S_OK && iEnumScript,
"IMultiLanguage2_EnumScripts: expected S_OK/!NULL, got %08lx/%p\n",
ret, iEnumScript);
1080 ret = IEnumScript_Reset(iEnumScript);
1081 ok(
ret ==
S_OK,
"IEnumScript_Reset: expected S_OK, got %08lx\n",
ret);
1083 ret = IEnumScript_Next(iEnumScript, 0,
NULL, &
n);
1084 ok(
n == 65536 &&
ret ==
E_FAIL,
"IEnumScript_Next: expected 65536/E_FAIL, got %lu/%08lx\n",
n,
ret);
1085 ret = IEnumScript_Next(iEnumScript, 0,
NULL,
NULL);
1086 ok(
ret ==
E_FAIL,
"IEnumScript_Next: expected E_FAIL, got %08lx\n",
ret);
1091 ret = IEnumScript_Next(iEnumScript, 0,
sinfo, &
n);
1092 ok(
ret ==
S_FALSE &&
n == 0,
"IEnumScript_Next: expected S_FALSE/0, got %08lx/%lu\n",
ret,
n);
1095 ret = IEnumScript_Next(iEnumScript,
n,
sinfo, &
n);
1096 ok(
ret ==
S_OK &&
n != 0,
"IEnumScript_Next: expected S_OK, got %08lx/%lu\n",
ret,
n);
1098 trace(
"flags %08lx, enumerated scripts %lu\n",
flags,
n);
1102 ok(
n ==
total,
"IEnumScript_Next: expected %u, got %lu\n",
total,
n);
1107 for (
i = 0; pGetCPInfoExA &&
i <
n;
i++)
1109#ifdef DUMP_SCRIPT_INFO
1110 trace(
"SCRIPTINFO #%u:\n"
1113 "wszDescription %s\n"
1114 "wszFixedWidthFont %s\n"
1115 "wszProportionalFont %s\n\n",
1128 ret = IEnumScript_Next(iEnumScript, 1, &sinfo2, &
n);
1129 ok(
ret ==
S_FALSE &&
n == 0,
"IEnumScript_Next: expected S_FALSE/0, got %08lx/%lu\n",
ret,
n);
1131 ret = IEnumScript_Reset(iEnumScript);
1132 ok(
ret ==
S_OK,
"IEnumScript_Reset: expected S_OK, got %08lx\n",
ret);
1134 ret = IEnumScript_Next(iEnumScript, 1, &sinfo2, &
n);
1135 ok(
n == 1 &&
ret ==
S_OK,
"IEnumScript_Next: expected 1/S_OK, got %lu/%08lx\n",
n,
ret);
1143 ret = IEnumScript_Skip(iEnumScript, 1);
1144 ok(
ret ==
S_OK,
"IEnumScript_Skip: expected S_OK, got %08lx\n",
ret);
1149 ret = IEnumScript_Next(iEnumScript, 1, &sinfo2, &
n);
1150 ok(
n == 1 &&
ret ==
S_OK,
"IEnumScript_Next: expected 1/S_OK, got %lu/%08lx\n",
n,
ret);
1155 IEnumScript_Release(iEnumScript);
1160 DWORD dwCodePages, dwManyCodePages;
1161 DWORD dwCmpCodePages;
1163 static const WCHAR str[] = {
'd', 0x0436, 0xff90, 0x0160 };
1168 ret = IMLangFontLink_CodePageToCodePages(iMLFL, -1, &dwCodePages);
1169 ok(
ret ==
E_FAIL,
"IMLangFontLink_CodePageToCodePages should fail: %lx\n",
ret);
1170 ok(dwCodePages == 0,
"expected 0, got %lu\n", dwCodePages);
1173 ret = IMLangFontLink_CodePageToCodePages(iMLFL, 932, &dwCodePages);
1174 ok(
ret ==
S_OK,
"IMLangFontLink_CodePageToCodePages error %lx\n",
ret);
1175 ok(dwCodePages ==
FS_JISJAPAN,
"expected FS_JISJAPAN, got %08lx\n", dwCodePages);
1177 ret = IMLangFontLink_CodePagesToCodePage(iMLFL, dwCodePages, 1035, &CodePage);
1178 ok(
ret ==
S_OK,
"IMLangFontLink_CodePagesToCodePage error %lx\n",
ret);
1179 ok(CodePage == 932,
"Incorrect CodePage Returned (%i)\n",CodePage);
1181 dwManyCodePages = 0;
1182 ret = IMLangFontLink_CodePageToCodePages(iMLFL, 1252, &dwManyCodePages);
1183 ok(
ret ==
S_OK,
"IMLangFontLink_CodePageToCodePages error %lx\n",
ret);
1184 ok(dwManyCodePages ==
FS_LATIN1,
"expected FS_LATIN1, got %08lx\n", dwManyCodePages);
1186 ret = IMLangFontLink_CodePageToCodePages(iMLFL, 1256, &dwCodePages);
1187 ok(
ret ==
S_OK,
"IMLangFontLink_CodePageToCodePages error %lx\n",
ret);
1188 ok(dwCodePages ==
FS_ARABIC,
"expected FS_ARABIC, got %08lx\n", dwCodePages);
1189 dwManyCodePages |= dwCodePages;
1190 ret = IMLangFontLink_CodePageToCodePages(iMLFL, 874, &dwCodePages);
1191 ok(
ret ==
S_OK,
"IMLangFontLink_CodePageToCodePages error %lx\n",
ret);
1192 ok(dwCodePages ==
FS_THAI,
"expected FS_THAI, got %08lx\n", dwCodePages);
1193 dwManyCodePages |= dwCodePages;
1195 ret = IMLangFontLink_CodePagesToCodePage(iMLFL, dwManyCodePages, 1256, &CodePage);
1196 ok(
ret ==
S_OK,
"IMLangFontLink_CodePagesToCodePage error %lx\n",
ret);
1197 ok(CodePage == 1256,
"Incorrect CodePage Returned (%i)\n",CodePage);
1199 ret = IMLangFontLink_CodePagesToCodePage(iMLFL, dwManyCodePages, 936, &CodePage);
1200 ok(
ret ==
S_OK,
"IMLangFontLink_CodePagesToCodePage error %lx\n",
ret);
1201 ok(CodePage == 1252,
"Incorrect CodePage Returned (%i)\n",CodePage);
1209 ret = IMLangFontLink_GetCharCodePages(iMLFL,
'd', &dwCodePages);
1210 ok(
ret ==
S_OK,
"IMLangFontLink_GetCharCodePages error %lx\n",
ret);
1211 ok(dwCodePages == dwCmpCodePages,
"expected %lx, got %lx\n", dwCmpCodePages, dwCodePages);
1215 ret = IMLangFontLink_GetStrCodePages(iMLFL,
str, 1, 0, &dwCodePages, &
processed);
1216 ok(
ret ==
S_OK,
"IMLangFontLink_GetStrCodePages error %lx\n",
ret);
1217 ok(dwCodePages == dwCmpCodePages,
"expected %lx, got %lx\n", dwCmpCodePages, dwCodePages);
1222 ret = IMLangFontLink_GetCharCodePages(iMLFL, 0x0160, &dwCodePages);
1223 ok(
ret ==
S_OK,
"IMLangFontLink_GetCharCodePages error %lx\n",
ret);
1224 ok(dwCodePages == dwCmpCodePages,
"expected %lx, got %lx\n", dwCmpCodePages, dwCodePages);
1228 ret = IMLangFontLink_GetStrCodePages(iMLFL, &
str[3], 1, 0, &dwCodePages, &
processed);
1229 ok(
ret ==
S_OK,
"IMLangFontLink_GetStrCodePages error %lx\n",
ret);
1230 ok(dwCodePages == dwCmpCodePages,
"expected %lx, got %lx\n", dwCmpCodePages, dwCodePages);
1235 ret = IMLangFontLink_GetCharCodePages(iMLFL, 0x0436, &dwCodePages);
1236 ok(
ret ==
S_OK,
"IMLangFontLink_GetCharCodePages error %lx\n",
ret);
1237 ok(dwCodePages == dwCmpCodePages,
"expected %lx, got %lx\n", dwCmpCodePages, dwCodePages);
1241 ret = IMLangFontLink_GetStrCodePages(iMLFL, &
str[1], 1, 0, &dwCodePages, &
processed);
1242 ok(
ret ==
S_OK,
"IMLangFontLink_GetStrCodePages error %lx\n",
ret);
1243 ok(dwCodePages == dwCmpCodePages,
"expected %lx, got %lx\n", dwCmpCodePages, dwCodePages);
1248 ret = IMLangFontLink_GetCharCodePages(iMLFL, 0xff90, &dwCodePages);
1249 ok(
ret ==
S_OK,
"IMLangFontLink_GetCharCodePages error %lx\n",
ret);
1250 ok(dwCodePages == dwCmpCodePages,
"expected %lx, got %lx\n", dwCmpCodePages, dwCodePages);
1254 ret = IMLangFontLink_GetStrCodePages(iMLFL, &
str[2], 1, 0, &dwCodePages, &
processed);
1255 ok(
ret ==
S_OK,
"IMLangFontLink_GetStrCodePages error %lx\n",
ret);
1256 ok(dwCodePages == dwCmpCodePages,
"expected %lx, got %lx\n", dwCmpCodePages, dwCodePages);
1262 ret = IMLangFontLink_GetStrCodePages(iMLFL,
str, 2, 0, &dwCodePages, &
processed);
1263 ok(
ret ==
S_OK,
"IMLangFontLink_GetStrCodePages error %lx\n",
ret);
1264 ok(dwCodePages == dwCmpCodePages,
"expected %lx, got %lx\n", dwCmpCodePages, dwCodePages);
1270 ret = IMLangFontLink_GetStrCodePages(iMLFL,
str, 3, 0, &dwCodePages, &
processed);
1271 ok(
ret ==
S_OK,
"IMLangFontLink_GetStrCodePages error %lx\n",
ret);
1272 ok(dwCodePages == dwCmpCodePages,
"expected %lx, got %lx\n", dwCmpCodePages, dwCodePages);
1278 ret = IMLangFontLink_GetStrCodePages(iMLFL,
str, 4, 0, &dwCodePages, &
processed);
1279 ok(
ret ==
S_OK,
"IMLangFontLink_GetStrCodePages error %lx\n",
ret);
1280 ok(dwCodePages == dwCmpCodePages,
"expected %lx, got %lx\n", dwCmpCodePages, dwCodePages);
1289 ok(
ret ==
S_OK,
"IMLangFontLink_GetStrCodePages error %lx\n",
ret);
1290 ok(dwCodePages == dwCmpCodePages,
"expected %lx, got %lx\n", dwCmpCodePages, dwCodePages);
1297 ok(
ret ==
S_OK,
"IMLangFontLink_GetStrCodePages error %lx\n",
ret);
1298 ok(dwCodePages == dwCmpCodePages,
"expected %lx, got %lx\n", dwCmpCodePages, dwCodePages);
1305 ok(
ret ==
S_OK,
"IMLangFontLink_GetStrCodePages error %lx\n",
ret);
1306 ok(dwCodePages == dwCmpCodePages,
"expected %lx, got %lx\n", dwCmpCodePages, dwCodePages);
1315 ok(
ret ==
S_OK,
"IMLangFontLink_GetStrCodePages error %lx\n",
ret);
1316 ok(dwCodePages == dwCmpCodePages,
"expected %lx, got %lx\n", dwCmpCodePages, dwCodePages);
1323 ok(
ret ==
S_OK,
"IMLangFontLink_GetStrCodePages error %lx\n",
ret);
1324 ok(dwCodePages == dwCmpCodePages,
"expected %lx, got %lx\n", dwCmpCodePages, dwCodePages);
1331 ok(
ret ==
S_OK,
"IMLangFontLink_GetStrCodePages error %lx\n",
ret);
1332 ok(dwCodePages == dwCmpCodePages,
"expected %lx, got %lx\n", dwCmpCodePages, dwCodePages);
1335 dwCodePages = 0xffff;
1337 ret = IMLangFontLink_GetStrCodePages(iMLFL, &
str[2], 1, 0, &dwCodePages, &
processed);
1338 ok(
ret ==
S_OK,
"IMLangFontLink_GetStrCodePages error %lx\n",
ret);
1339 ok(dwCodePages == dwCmpCodePages,
"expected %lx, got %lx\n", dwCmpCodePages, dwCodePages);
1342 ret = IMLangFontLink_GetStrCodePages(iMLFL, &
str[2], 1, 0,
NULL,
NULL);
1343 ok(
ret ==
S_OK,
"IMLangFontLink_GetStrCodePages error %lx\n",
ret);
1345 dwCodePages = 0xffff;
1347 ret = IMLangFontLink_GetStrCodePages(iMLFL,
str, -1, 0, &dwCodePages, &
processed);
1349 ok(dwCodePages == 0,
"expected %lx, got %lx\n", dwCmpCodePages, dwCodePages);
1352 dwCodePages = 0xffff;
1354 ret = IMLangFontLink_GetStrCodePages(iMLFL,
NULL, 1, 0, &dwCodePages, &
processed);
1356 ok(dwCodePages == 0,
"expected %lx, got %lx\n", dwCmpCodePages, dwCodePages);
1359 dwCodePages = 0xffff;
1361 ret = IMLangFontLink_GetStrCodePages(iMLFL,
str, 0, 0, &dwCodePages, &
processed);
1363 ok(dwCodePages == 0,
"expected %lx, got %lx\n", dwCmpCodePages, dwCodePages);
1369 IEnumRfc1766 *pEnumRfc1766;
1376 ok(
ret ==
S_OK,
"IMultiLanguage2_EnumRfc1766 error %08lx\n",
ret);
1380 ret = IEnumRfc1766_Next(pEnumRfc1766, 1, &
info, &
n);
1384 trace(
"lcid %04x rfc_name %s locale_name %s\n",
1388 ok(
n == 1,
"couldn't fetch 1 RFC1766INFO structure\n");
1391 ret = IMultiLanguage2_GetRfc1766FromLcid(iML2,
info.lcid, &rfcstr);
1397 "Expected matching locale names\n");
1401 IEnumRfc1766_Release(pEnumRfc1766);
1406 WCHAR rfc1766W[MAX_RFC1766_NAME + 1];
1411 static WCHAR en[] = {
'e',
'n',0 };
1412 static WCHAR en_them[] = {
'e',
'n',
'-',
't',
'h',
'e',
'm',0 };
1413 static WCHAR english[] = {
'e',
'n',
'g',
'l',
'i',
's',
'h',0 };
1419 ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, &
lcid, rfc1766W);
1432 ret = IMultiLanguage2_GetLcidFromRfc1766(iML2,
NULL, en);
1435 ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, &
lcid,
NULL);
1438 ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, &
lcid, en_them);
1443 static WCHAR en[] = {
'e',
'n',0};
1445 ret = IMultiLanguage2_GetRfc1766FromLcid(iML2,
lcid, &rfcstr);
1447 ok_w2(
"Expected \"%s\", got \"%s\"n", en, rfcstr);
1455 static WCHAR en[] = {
'e',
'n',0};
1457 ret = IMultiLanguage2_GetRfc1766FromLcid(iML2,
lcid, &rfcstr);
1459 ok_w2(
"Expected \"%s\", got \"%s\"n", en, rfcstr);
1487 ret = pRfc1766ToLcidA(
NULL,
"en");
1497 hr = IMultiLanguage2_GetNumberOfCodePageInfo(iML2, &
value);
1499 "got 0x%lx with %d (expected S_OK with '!= 0')\n",
hr,
value);
1501 hr = IMultiLanguage2_GetNumberOfCodePageInfo(iML2,
NULL);
1576 hr = pLcidToRfc1766A(-1,
buffer, MAX_RFC1766_NAME);
1595 WCHAR short_broken_name[MAX_LOCALE_NAME];
1596 CHAR rfc1766A[MAX_RFC1766_NAME + 1];
1598 PRFC1766INFO prfc = (RFC1766INFO *)
buffer;
1609 ok(
ret ==
S_OK,
"#%02ld: got 0x%lx (expected S_OK)\n",
i,
ret);
1611 "#%02ld: got 0x%04lx (expected 0x%04lx)\n",
i, prfc->lcid,
info_table[
i].
lcid);
1614 "#%02ld: got '%s' (expected '%s')\n",
i, rfc1766A,
info_table[
i].rfc1766);
1619 short_broken_name[MAX_LOCALE_NAME - 2] = 0;
1627 "#%02ld: got %s (expected %s)\n",
i,
1654 static WCHAR src[] = {
'a',
'b',
'c',0};
1656 memset(invariate,
'x',
sizeof(invariate));
1661 destsz =
sizeof(
dest);
1662 hr = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
NULL,
1663 &srcsz,
dest, &destsz);
1668 "Expected %u, got %u\n",
lstrlenW(
src) + 1, srcsz);
1673 "Expected %u, got %u\n", 0, srcsz);
1677 "Expected dest to be unchanged, got %s\n",
dest);
1678 ok(destsz == 0,
"Expected 0, got %u\n", destsz);
1682 destsz =
sizeof(
dest);
1683 hr = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
src,
1685 ok(
hr ==
S_OK,
"Expected S_OK, got %08lx\n",
hr);
1687 "Expected first three chars to be \"abc\"\n");
1689 "Expected rest of dest to be unchanged, got %s\n",
dest);
1695 destsz =
sizeof(
dest);
1696 hr = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
NULL,
1700 "Expected dest to be unchanged, got %s\n",
dest);
1701 ok(destsz == 0,
"Expected 0, got %u\n", destsz);
1706 destsz =
sizeof(
dest);
1707 hr = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
src,
1708 &srcsz,
NULL, &destsz);
1709 ok(
hr ==
S_OK,
"Expected S_OK, got %08lx\n",
hr);
1711 "Expected %u, got %u\n",
lstrlenW(
src) + 1, srcsz);
1713 "Expected %u, got %u\n",
lstrlenW(
src) + 1, srcsz);
1717 hr = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
src,
1719 ok(
hr ==
S_OK,
"Expected S_OK, got %08lx\n",
hr);
1721 "Expected %u, got %u\n",
lstrlenW(
src) + 1, srcsz);
1723 "Expected dest to be unchanged, got %s\n",
dest);
1728 destsz =
sizeof(
dest);
1729 hr = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
src,
1730 &srcsz,
dest, &destsz);
1731 ok(
hr ==
S_OK,
"Expected S_OK, got %08lx\n",
hr);
1732 ok(srcsz == 0,
"Expected 0, got %u\n", srcsz);
1734 "Expected dest to be unchanged, got %s\n",
dest);
1735 ok(destsz == 0,
"Expected 0, got %u\n", destsz);
1740 destsz =
sizeof(
dest);
1741 hr = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
src,
1742 &srcsz,
dest, &destsz);
1743 ok(
hr ==
S_OK,
"Expected S_OK, got %08lx\n",
hr);
1746 ok(!
strncmp(
dest,
"abc", 3),
"Expected first three chars to be \"abc\"\n");
1748 "Expected rest of dest to be unchanged, got %s\n",
dest);
1755 destsz =
sizeof(
dest);
1756 hr = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
src,
1757 &srcsz,
dest, &destsz);
1758 ok(
hr ==
S_OK,
"Expected S_OK, got %08lx\n",
hr);
1759 ok(srcsz ==
lstrlenW(
src) + 1,
"Expected 3, got %u\n", srcsz);
1762 "Expected %u, got %u\n",
lstrlenW(
src) + 1, destsz);
1767 destsz =
sizeof(
dest);
1768 hr = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
src,
1769 &srcsz,
dest, &destsz);
1770 ok(
hr ==
S_OK,
"Expected S_OK, got %08lx\n",
hr);
1773 ok(!
strncmp(
dest,
"abc", 3),
"Expected first three chars to be \"abc\"\n");
1775 "Expected rest of dest to be unchanged, got %s\n",
dest);
1783 hr = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
src,
1784 &srcsz,
dest, &destsz);
1785 ok(
hr ==
S_OK,
"Expected S_OK, got %08lx\n",
hr);
1787 "Expected %u, got %u\n",
lstrlenW(
src) + 1, srcsz);
1789 "Expected dest to be unchanged, got %s\n",
dest);
1791 "Expected %u, got %u\n",
lstrlenW(
src) + 1, destsz);
1797 hr = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
src,
1798 &srcsz,
dest, &destsz);
1800 ok(srcsz == 0,
"Expected 0, got %u\n", srcsz);
1801 ok(!
strncmp(
dest,
"abc", 3),
"Expected first three chars to be \"abc\"\n");
1803 "Expected rest of dest to be unchanged, got %s\n",
dest);
1804 ok(destsz == 0,
"Expected 0, got %u\n", srcsz);
1810 hr = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
src,
1811 &srcsz,
dest, &destsz);
1812 ok(
hr ==
S_OK,
"Expected S_OK, got %08lx\n",
hr);
1814 "Expected %u, got %u\n",
lstrlenW(
src) + 1, srcsz);
1817 "Expected %u, got %u\n",
lstrlenW(
src) + 1, destsz);
1827 static WCHAR src[] = {
'a',
'b',
'c',0};
1829 memset(invariate,
'x',
sizeof(invariate));
1834 destsz =
sizeof(
dest);
1835 hr = pConvertINetUnicodeToMultiByte(
NULL, 1252,
NULL, &srcsz,
dest, &destsz);
1839 "Expected %u, got %u\n",
lstrlenW(
src) + 1, srcsz);
1842 "Expected %u, got %u\n", 0, srcsz);
1844 "Expected dest to be unchanged, got %s\n",
dest);
1845 ok(destsz == 0,
"Expected 0, got %u\n", destsz);
1849 destsz =
sizeof(
dest);
1851 ok(
hr ==
S_OK,
"Expected S_OK, got %08lx\n",
hr);
1853 "Expected first three chars to be \"abc\"\n");
1855 "Expected rest of dest to be unchanged, got %s\n",
dest);
1861 destsz =
sizeof(
dest);
1865 "Expected dest to be unchanged, got %s\n",
dest);
1866 ok(destsz == 0,
"Expected 0, got %u\n", destsz);
1871 destsz =
sizeof(
dest);
1872 hr = pConvertINetUnicodeToMultiByte(
NULL, 1252,
src, &srcsz,
NULL, &destsz);
1873 ok(
hr ==
S_OK,
"Expected S_OK, got %08lx\n",
hr);
1875 "Expected %u, got %u\n",
lstrlenW(
src) + 1, srcsz);
1877 "Expected %u, got %u\n",
lstrlenW(
src) + 1, srcsz);
1882 ok(
hr ==
S_OK,
"Expected S_OK, got %08lx\n",
hr);
1884 "Expected %u, got %u\n",
lstrlenW(
src) + 1, srcsz);
1886 "Expected dest to be unchanged, got %s\n",
dest);
1891 destsz =
sizeof(
dest);
1892 hr = pConvertINetUnicodeToMultiByte(
NULL, 1252,
src, &srcsz,
dest, &destsz);
1893 ok(
hr ==
S_OK,
"Expected S_OK, got %08lx\n",
hr);
1894 ok(srcsz == 0,
"Expected 0, got %u\n", srcsz);
1896 "Expected dest to be unchanged, got %s\n",
dest);
1897 ok(destsz == 0,
"Expected 0, got %u\n", destsz);
1902 destsz =
sizeof(
dest);
1903 hr = pConvertINetUnicodeToMultiByte(
NULL, 1252,
src, &srcsz,
dest, &destsz);
1904 ok(
hr ==
S_OK,
"Expected S_OK, got %08lx\n",
hr);
1907 ok(!
strncmp(
dest,
"abc", 3),
"Expected first three chars to be \"abc\"\n");
1909 "Expected rest of dest to be unchanged, got %s\n",
dest);
1916 destsz =
sizeof(
dest);
1917 hr = pConvertINetUnicodeToMultiByte(
NULL, 1252,
src, &srcsz,
dest, &destsz);
1918 ok(
hr ==
S_OK,
"Expected S_OK, got %08lx\n",
hr);
1919 ok(srcsz ==
lstrlenW(
src) + 1,
"Expected 3, got %u\n", srcsz);
1922 "Expected %u, got %u\n",
lstrlenW(
src) + 1, destsz);
1927 destsz =
sizeof(
dest);
1928 hr = pConvertINetUnicodeToMultiByte(
NULL, 1252,
src, &srcsz,
dest, &destsz);
1929 ok(
hr ==
S_OK,
"Expected S_OK, got %08lx\n",
hr);
1932 ok(!
strncmp(
dest,
"abc", 3),
"Expected first three chars to be \"abc\"\n");
1934 "Expected rest of dest to be unchanged, got %s\n",
dest);
1942 hr = pConvertINetUnicodeToMultiByte(
NULL, 1252,
src, &srcsz,
dest, &destsz);
1943 ok(
hr ==
S_OK,
"Expected S_OK, got %08lx\n",
hr);
1945 "Expected %u, got %u\n",
lstrlenW(
src) + 1, srcsz);
1947 "Expected dest to be unchanged, got %s\n",
dest);
1949 "Expected %u, got %u\n",
lstrlenW(
src) + 1, destsz);
1955 hr = pConvertINetUnicodeToMultiByte(
NULL, 1252,
src, &srcsz,
dest, &destsz);
1957 ok(srcsz == 0,
"Expected 0, got %u\n", srcsz);
1958 ok(!
strncmp(
dest,
"abc", 3),
"Expected first three chars to be \"abc\"\n");
1960 "Expected rest of dest to be unchanged, got %s\n",
dest);
1961 ok(destsz == 0,
"Expected 0, got %u\n", srcsz);
1967 hr = pConvertINetUnicodeToMultiByte(
NULL, 1252,
src, &srcsz,
dest, &destsz);
1968 ok(
hr ==
S_OK,
"Expected S_OK, got %08lx\n",
hr);
1970 "Expected %u, got %u\n",
lstrlenW(
src) + 1, srcsz);
1973 "Expected %u, got %u\n",
lstrlenW(
src) + 1, destsz);
1979 static WCHAR unc_jp[9][12] = {
1980 {9,0x31,0x20,0x3042,0x3044,0x3046,0x3048,0x304a,0x000d,0x000a},
1981 {9,0x31,0x20,0x30a2,0x30a4,0x30a6,0x30a8,0x30aa,0x000d,0x000a},
1982 {9,0x31,0x20,0xff71,0xff72,0xff73,0xff74,0xff75,0x000d,0x000a},
1983 {9,0x31,0x20,0x3041,0x3043,0x3045,0x3047,0x3049,0x000d,0x000a},
1984 {9,0x31,0x20,0x30a1,0x30a3,0x30a5,0x30a7,0x30a9,0x000d,0x000a},
1985 {9,0x31,0x20,0xff67,0xff68,0xff69,0xff6a,0xff6b,0x000d,0x000a},
1986 {9,0x31,0x20,0x300c,0x65e5,0x672c,0x8a9e,0x300d,0x000d,0x000a},
1987 {7,0x31,0x20,0x25c7,0x25c7,0x3012,0x000d,0x000a},
1988 {11,0x31,0x20,0x203b,0x3010,0x0074,0x0065,0x0073,0x0074,0x3011,0x000d,0x000a}
1990 static CHAR jis_jp[9][27] = {
1991 {20,0x31,0x20,0x1b,0x24,0x42,0x24,0x22,0x24,0x24,0x24,0x26,0x24,0x28,
1992 0x24,0x2a,0x1b,0x28,0x42,0x0d,0x0a},
1993 {20,0x31,0x20,0x1b,0x24,0x42,0x25,0x22,0x25,0x24,0x25,0x26,0x25,0x28,
1994 0x25,0x2a,0x1b,0x28,0x42,0x0d,0x0a},
1995 {20,0x31,0x20,0x1b,0x24,0x42,0x25,0x22,0x25,0x24,0x25,0x26,0x25,0x28,
1996 0x25,0x2a,0x1b,0x28,0x42,0x0d,0x0a},
1997 {20,0x31,0x20,0x1b,0x24,0x42,0x24,0x21,0x24,0x23,0x24,0x25,0x24,0x27,
1998 0x24,0x29,0x1b,0x28,0x42,0x0d,0x0a},
1999 {20,0x31,0x20,0x1b,0x24,0x42,0x25,0x21,0x25,0x23,0x25,0x25,0x25,0x27,
2000 0x25,0x29,0x1b,0x28,0x42,0x0d,0x0a},
2001 {20,0x31,0x20,0x1b,0x24,0x42,0x25,0x21,0x25,0x23,0x25,0x25,0x25,0x27,
2002 0x25,0x29,0x1b,0x28,0x42,0x0d,0x0a},
2003 {20,0x31,0x20,0x1b,0x24,0x42,0x21,0x56,0x46,0x7c,0x4b,0x5c,0x38,0x6c,
2004 0x21,0x57,0x1b,0x28,0x42,0x0d,0x0a},
2005 {16,0x31,0x20,0x1b,0x24,0x42,0x21,0x7e,0x21,0x7e,0x22,0x29,0x1b,0x28,
2007 {26,0x31,0x20,0x1b,0x24,0x42,0x22,0x28,0x21,0x5a,0x1b,0x28,0x42,0x74,
2008 0x65,0x73,0x74,0x1b,0x24,0x42,0x21,0x5b,0x1b,0x28,0x42,0x0d,0x0a}
2010 static CHAR sjis_jp[9][15] = {
2011 {14,0x31,0x20,0x82,0xa0,0x82,0xa2,0x82,0xa4,0x82,0xa6,0x82,0xa8,0x0d,0x0a},
2012 {14,0x31,0x20,0x83,0x41,0x83,0x43,0x83,0x45,0x83,0x47,0x83,0x49,0x0d,0x0a},
2013 {9,0x31,0x20,0xb1,0xb2,0xb3,0xb4,0xb5,0x0d,0x0a},
2014 {14,0x31,0x20,0x82,0x9f,0x82,0xa1,0x82,0xa3,0x82,0xa5,0x82,0xa7,0x0d,0x0a},
2015 {14,0x31,0x20,0x83,0x40,0x83,0x42,0x83,0x44,0x83,0x46,0x83,0x48,0x0d,0x0a},
2016 {9,0x31,0x20,0xa7,0xa8,0xa9,0xaa,0xab,0x0d,0x0a},
2017 {14,0x31,0x20,0x81,0x75,0x93,0xfa,0x96,0x7b,0x8c,0xea,0x81,0x76,0x0d,0x0a},
2018 {10,0x31,0x20,0x81,0x9e,0x81,0x9e,0x81,0xa7,0x0d,0x0a},
2019 {14,0x31,0x20,0x81,0xa6,0x81,0x79,0x74,0x65,0x73,0x74,0x81,0x7a,0x0d,0x0a}
2021 static CHAR euc_jp[9][15] = {
2022 {14,0x31,0x20,0xa4,0xa2,0xa4,0xa4,0xa4,0xa6,0xa4,0xa8,0xa4,0xaa,0x0d,0x0a},
2023 {14,0x31,0x20,0xa5,0xa2,0xa5,0xa4,0xa5,0xa6,0xa5,0xa8,0xa5,0xaa,0x0d,0x0a},
2024 {14,0x31,0x20,0x8e,0xb1,0x8e,0xb2,0x8e,0xb3,0x8e,0xb4,0x8e,0xb5,0x0d,0x0a},
2025 {14,0x31,0x20,0xa4,0xa1,0xa4,0xa3,0xa4,0xa5,0xa4,0xa7,0xa4,0xa9,0x0d,0x0a},
2026 {14,0x31,0x20,0xa5,0xa1,0xa5,0xa3,0xa5,0xa5,0xa5,0xa7,0xa5,0xa9,0x0d,0x0a},
2027 {14,0x31,0x20,0x8e,0xa7,0x8e,0xa8,0x8e,0xa9,0x8e,0xaa,0x8e,0xab,0x0d,0x0a},
2028 {14,0x31,0x20,0xa1,0xd6,0xc6,0xfc,0xcb,0xdc,0xb8,0xec,0xa1,0xd7,0x0d,0x0a},
2029 {10,0x31,0x20,0xa1,0xfe,0xa1,0xfe,0xa2,0xa9,0x0d,0x0a},
2030 {14,0x31,0x20,0xa2,0xa8,0xa1,0xda,0x74,0x65,0x73,0x74,0xa1,0xdb,0x0d,0x0a}
2041 for (
i = 0;
i < 9;
i++)
2045 outlen = jis_jp[
i][0];
2046 srcsz = unc_jp[
i][0];
2047 hr = pConvertINetUnicodeToMultiByte(
NULL, 50220, &unc_jp[
i][1], &srcsz, output, &destsz);
2050 skip(
"Code page identifier 50220 is not supported\n");
2053 ok(
hr ==
S_OK,
"(%i) Expected S_OK, got %08lx\n",
i,
hr);
2054 ok(destsz == outlen,
"(%i) Expected %i, got %i\n",
i,outlen,destsz);
2055 ok(srcsz == unc_jp[
i][0],
"(%i) Expected %i, got %i\n",
i,unc_jp[
i][0],srcsz);
2056 ok(
memcmp(output,&jis_jp[
i][1],destsz)==0,
"(%i) Strings do not match\n",
i);
2061 hr = pConvertINetMultiByteToUnicode(
NULL, 50220, output, &srcsz, outputW,&destsz);
2072 ok(
hr ==
S_OK,
"(%i) Expected S_OK, got %08lx\n",
i,
hr);
2073 ok(destsz == unc_jp[
j][0],
"(%i) Expected %i, got %i\n",
i,unc_jp[
j][0],destsz);
2074 ok(srcsz == outlen,
"(%i) Expected %i, got %i\n",
i,outlen,srcsz);
2075 ok(
memcmp(outputW,&unc_jp[
j][1],destsz)==0,
"(%i) Strings do not match\n",
i);
2079 for (
i = 0;
i < 9;
i++)
2082 outlen = sjis_jp[
i][0];
2083 srcsz = unc_jp[
i][0];
2085 hr = pConvertINetUnicodeToMultiByte(
NULL, 932, &unc_jp[
i][1], &srcsz, output, &destsz);
2088 skip(
"Code page identifier 932 is not supported\n");
2091 ok(
hr ==
S_OK,
"(%i) Expected S_OK, got %08lx\n",
i,
hr);
2092 ok(destsz == outlen,
"(%i) Expected %i, got %i\n",
i,outlen,destsz);
2093 ok(srcsz == unc_jp[
i][0],
"(%i) Expected %i, got %i\n",
i,unc_jp[
i][0],srcsz);
2094 ok(
memcmp(output,&sjis_jp[
i][1],outlen)==0,
"(%i) Strings do not match\n",
i);
2098 hr = pConvertINetMultiByteToUnicode(
NULL, 932, output, &srcsz, outputW,&destsz);
2100 ok(
hr ==
S_OK,
"(%i) Expected S_OK, got %08lx\n",
i,
hr);
2101 ok(destsz == unc_jp[
i][0],
"(%i) Expected %i, got %i\n",
i,unc_jp[
i][0],destsz);
2102 ok(srcsz == outlen,
"(%i) Expected %i, got %i\n",
i,outlen,srcsz);
2103 ok(
memcmp(outputW,&unc_jp[
i][1],destsz)==0,
"(%i) Strings do not match\n",
i);
2107 for (
i = 0;
i < 9;
i++)
2110 outlen = euc_jp[
i][0];
2111 srcsz = unc_jp[
i][0];
2113 hr = pConvertINetUnicodeToMultiByte(
NULL, 51932, &unc_jp[
i][1], &srcsz, output, &destsz);
2116 skip(
"Code page identifier 51932 is not supported\n");
2119 ok(
hr ==
S_OK,
"(%i) Expected S_OK, got %08lx\n",
i,
hr);
2120 ok(destsz == outlen,
"(%i) Expected %i, got %i\n",
i,outlen,destsz);
2121 ok(srcsz == unc_jp[
i][0],
"(%i) Expected %i, got %i\n",
i,unc_jp[
i][0],destsz);
2122 ok(
memcmp(output,&euc_jp[
i][1],outlen)==0,
"(%i) Strings do not match\n",
i);
2126 hr = pConvertINetMultiByteToUnicode(
NULL, 51932, output, &srcsz, outputW,&destsz);
2128 ok(
hr ==
S_OK,
"(%i) Expected S_OK, got %08lx\n",
i,
hr);
2129 ok(destsz == unc_jp[
i][0],
"(%i) Expected %i, got %i\n",
i,unc_jp[
i][0],destsz);
2130 ok(srcsz == outlen,
"(%i) Expected %i, got %i\n",
i,outlen,srcsz);
2131 ok(
memcmp(outputW,&unc_jp[
i][1],destsz)==0,
"(%i) Strings do not match\n",
i);
2137 srcsz = jis_jp[
i][0];
2138 hr = pConvertINetMultiByteToUnicode(
NULL, 50932, &jis_jp[
i][1], &srcsz, outputW, &destsz);
2141 skip(
"Code page identifier 50932 is not supported\n");
2144 ok(
hr ==
S_OK,
"(%i) Expected S_OK, got %08lx\n",
i,
hr);
2145 ok(destsz == unc_jp[
i][0],
"(%i) Expected %i, got %i\n",
i,unc_jp[
i][0],destsz);
2146 ok(srcsz == jis_jp[
i][0],
"(%i) Expected %i, got %i\n",
i,jis_jp[
i][0],srcsz);
2147 ok(
memcmp(outputW,&unc_jp[
i][1],destsz)==0,
"(%i) Strings do not match\n",
i);
2151 srcsz = sjis_jp[
i][0];
2152 hr = pConvertINetMultiByteToUnicode(
NULL, 50932, &sjis_jp[
i][1], &srcsz, outputW, &destsz);
2153 ok(
hr ==
S_OK,
"(%i) Expected S_OK, got %08lx\n",
i,
hr);
2154 ok(destsz == unc_jp[
i][0],
"(%i) Expected %i, got %i\n",
i,unc_jp[
i][0],destsz);
2155 ok(srcsz == sjis_jp[
i][0],
"(%i) Expected %i, got %i\n",
i,sjis_jp[
i][0],srcsz);
2156 ok(
memcmp(outputW,&unc_jp[
i][1],destsz)==0,
"(%i) Strings do not match\n",
i);
2163 SCRIPTFONTINFO sfi[1];
2166 hr = IMLangFontLink2_GetScriptFontInfo(font_link, sidAsciiLatin, 0, &nfonts,
NULL);
2168 ok(nfonts,
"unexpected result\n");
2171 hr = IMLangFontLink2_GetScriptFontInfo(font_link, sidAsciiLatin, SCRIPTCONTF_FIXED_FONT, &nfonts,
NULL);
2173 ok(nfonts,
"unexpected result\n");
2176 hr = IMLangFontLink2_GetScriptFontInfo(font_link, sidAsciiLatin, SCRIPTCONTF_PROPORTIONAL_FONT, &nfonts,
NULL);
2178 ok(nfonts,
"unexpected result\n");
2181 memset(sfi, 0,
sizeof(sfi));
2182 hr = IMLangFontLink2_GetScriptFontInfo(font_link, sidAsciiLatin, SCRIPTCONTF_FIXED_FONT, &nfonts, sfi);
2184 ok(nfonts == 1,
"got %u, expected 1\n", nfonts);
2185 ok(sfi[0].scripts != 0,
"unexpected result\n");
2186 ok(sfi[0].wszFont[0],
"unexpected result\n");
2189 memset(sfi, 0,
sizeof(sfi));
2190 hr = IMLangFontLink2_GetScriptFontInfo(font_link, sidAsciiLatin, SCRIPTCONTF_PROPORTIONAL_FONT, &nfonts, sfi);
2192 ok(nfonts == 1,
"got %u, expected 1\n", nfonts);
2193 ok(sfi[0].scripts != 0,
"unexpected result\n");
2194 ok(sfi[0].wszFont[0],
"unexpected result\n");
2215 {1250, sidAsciiLatin},
2216 {1251, sidCyrillic},
2217 {1252, sidAsciiLatin},
2219 {1254, sidAsciiLatin},
2222 {1257, sidAsciiLatin},
2223 {1258, sidAsciiLatin},
2229 hr = IMLangFontLink2_CodePageToScriptID(font_link, cp_sid[
i].
cp, &
sid);
2234 "%u got sid %u for codepage %u, expected %u\n",
i,
sid, cp_sid[
i].
cp, cp_sid[
i].
sid);
2243 HFONT
hfont, old_hfont;
2249 memset(&lf, 0,
sizeof(lf));
2255 hr = IMLangFontLink2_GetFontUnicodeRanges(font_link,
NULL, &
count,
NULL);
2256 ok(
hr ==
E_FAIL,
"expected E_FAIL, got 0x%08lx\n",
hr);
2258 hr = IMLangFontLink2_GetFontUnicodeRanges(font_link,
hdc,
NULL,
NULL);
2262 hr = IMLangFontLink2_GetFontUnicodeRanges(font_link,
hdc, &
count,
NULL);
2263 ok(
hr ==
S_OK,
"expected S_OK, got 0x%08lx\n",
hr);
2264 ok(
count,
"expected count > 0\n");
2268 hr = IMLangFontLink2_GetFontUnicodeRanges(font_link,
hdc, &
count, ur);
2269 ok(
hr ==
S_OK,
"expected S_OK, got 0x%08lx\n",
hr);
2272 hr = IMLangFontLink2_GetFontUnicodeRanges(font_link,
hdc, &
count, ur);
2273 ok(
hr ==
S_OK,
"expected S_OK, got 0x%08lx\n",
hr);
2287 for (
i = 0;
i < 1000;
i++)
2289 hr = IMultiLanguage2_IsCodePageInstallable(ml2,
i);
2298 "code page %u is valid but not installable 0x%08lx\n",
i,
hr);
2307 IMLangFontLink2 *IMLFL2;
2308 IMLangFontLink *IMLFL;
2309 IMLangCodePages *IMLCP;
2310 IMultiLanguage *IML;
2311 IMultiLanguage2 *IML2;
2320 "GetGlobalFontLinkObject() returned %p\n",
unknown);
2323 ret = IUnknown_QueryInterface((
IUnknown*)
unknown, &IID_IMLangFontLink2, (
void**)&IMLFL2);
2325 if (
ret ==
S_OK) IMLangFontLink2_Release(IMLFL2);
2327 ret = IUnknown_QueryInterface((
IUnknown*)
unknown, &IID_IMultiLanguage, (
void**)&IML);
2329 if (
ret ==
S_OK) IMultiLanguage_Release(IML);
2331 ret = IUnknown_QueryInterface((
IUnknown*)
unknown, &IID_IMultiLanguage2, (
void**)&IML2);
2333 if (
ret ==
S_OK) IMultiLanguage2_Release(IML2);
2335 ret = IUnknown_QueryInterface((
IUnknown*)
unknown, &IID_IMLangFontLink, (
void**)&IMLFL);
2337 IMLangFontLink_Release(IMLFL);
2339 ret = IUnknown_QueryInterface((
IUnknown*)
unknown, &IID_IMLangCodePages, (
void**)&IMLCP);
2341 IMLangCodePages_Release(IMLCP);
2343 ok(
unknown == IMLFL,
"IUnknown from GetGlobalFontLinkObject isn't IMLangFontLink\n");
2344 ok(
unknown == IMLCP,
"IUnknown from GetGlobalFontLinkObject isn't IMLangCodePages\n");
2347 ok(refcount == 1,
"Got refcount %ld\n", refcount);
2352 IMLangConvertCharset *
convert;
2354 UINT cp, src_size, dst_size;
2355 char strA[] =
"abcd";
2367 hr = IMLangConvertCharset_GetSourceCodePage(
convert, &
cp);
2368 ok(
hr ==
S_OK,
"expected S_OK got 0x%08lx\n",
hr);
2371 hr = IMLangConvertCharset_GetDestinationCodePage(
convert,
NULL);
2375 hr = IMLangConvertCharset_GetDestinationCodePage(
convert, &
cp);
2376 ok(
hr ==
S_OK,
"expected S_OK got 0x%08lx\n",
hr);
2381 ok(
hr ==
S_OK,
"expected S_OK got 0x%08lx\n",
hr);
2390 hr = IMLangConvertCharset_DoConversionToUnicode(
convert,
strA, &src_size, buffW, &dst_size);
2393 ok(dst_size == 4,
"got %d\n", dst_size);
2394 ok(buffW[4] == 4,
"got %d\n", buffW[4]);
2395 ok(src_size == 4,
"got %d\n", src_size);
2400 hr = IMLangConvertCharset_DoConversionToUnicode(
convert,
strA, &src_size, buffW, &dst_size);
2402 ok(buffW[0] == 1,
"got %d\n", buffW[0]);
2403 ok(dst_size == 4,
"got %d\n", dst_size);
2404 ok(src_size == 4,
"got %d\n", src_size);
2407 ok(
hr ==
S_OK,
"expected S_OK got 0x%08lx\n",
hr);
2409 IMLangConvertCharset_Release(
convert);
2417 ok(
FALSE,
"unexpected call\n");
2423 ok(
FALSE,
"unexpected call\n");
2429 ok(
FALSE,
"unexpected call\n");
2451 ok(
FALSE,
"unexpected call\n");
2458 if (
origin == STREAM_SEEK_SET)
2460 else if (
origin == STREAM_SEEK_CUR)
2462 else if (
origin == STREAM_SEEK_END)
2471 ok(
FALSE,
"unexpected call\n");
2478 ok(
FALSE,
"unexpected call\n");
2484 ok(
FALSE,
"unexpected call\n");
2490 ok(
FALSE,
"unexpected call\n");
2497 ok(
FALSE,
"unexpected call\n");
2504 ok(
FALSE,
"unexpected call\n");
2510 ok(
FALSE,
"unexpected call\n");
2516 ok(
FALSE,
"unexpected call\n");
2543 UINT nb_detected, detected[4];
2544 UINT preferred[] = {1250,1251,1252,65001};
2545 UINT preferred2[] = {1250,1251,1252};
2548 memset(detected, 0,
sizeof(detected));
2549 hr = IMultiLanguage3_DetectOutboundCodePageInIStream(ml,
2550 MLDETECTF_PRESERVE_ORDER, &
test_stream, preferred,
2555 memset(detected, 0,
sizeof(detected));
2556 hr = IMultiLanguage3_DetectOutboundCodePageInIStream(ml,
2557 MLDETECTF_PRESERVE_ORDER, &
test_stream, preferred,
2562 memset(detected, 0,
sizeof(detected));
2563 hr = IMultiLanguage3_DetectOutboundCodePageInIStream(ml,
2564 MLDETECTF_PRESERVE_ORDER, &
test_stream, preferred,
2567 ok(nb_detected == 1,
"got %u\n", nb_detected);
2568 ok(detected[0] == 65001,
"got %u\n", detected[0]);
2571 memset(detected, 0,
sizeof(detected));
2572 hr = IMultiLanguage3_DetectOutboundCodePageInIStream(ml,
2573 MLDETECTF_PRESERVE_ORDER, &
test_stream, preferred,
2576 todo_wine ok(nb_detected == 2,
"got %u\n", nb_detected);
2577 ok(detected[0] == 65001,
"got %u\n", detected[0]);
2578 todo_wine ok(detected[1] == 65000,
"got %u\n", detected[1]);
2581 memset(detected, 0,
sizeof(detected));
2582 hr = IMultiLanguage3_DetectOutboundCodePageInIStream(ml,
2583 MLDETECTF_PRESERVE_ORDER, &
test_stream, preferred,
2586 todo_wine ok(nb_detected == 3,
"got %u\n", nb_detected);
2587 ok(detected[0] == 65001,
"got %u\n", detected[0]);
2588 todo_wine ok(detected[1] == 65000,
"got %u\n", detected[1]);
2589 todo_wine ok(detected[2] == 1200,
"got %u\n", detected[2]);
2592 memset(detected, 0,
sizeof(detected));
2593 hr = IMultiLanguage3_DetectOutboundCodePageInIStream(ml,
2594 MLDETECTF_PRESERVE_ORDER, &
test_stream, preferred,
2597 todo_wine ok(nb_detected == 3,
"got %u\n", nb_detected);
2598 ok(detected[0] == 65001,
"got %u\n", detected[0]);
2599 todo_wine ok(detected[1] == 65000,
"got %u\n", detected[1]);
2600 todo_wine ok(detected[2] == 1200,
"got %u\n", detected[2]);
2601 ok(detected[3] == 0,
"got %u\n", detected[3]);
2604 memset(detected, 0,
sizeof(detected));
2605 hr = IMultiLanguage3_DetectOutboundCodePageInIStream(ml,
2606 MLDETECTF_PRESERVE_ORDER, &
test_stream, preferred2,
2609 todo_wine ok(nb_detected == 3,
"got %u\n", nb_detected);
2610 ok(detected[0] == 65001,
"got %u\n", detected[0]);
2611 todo_wine ok(detected[1] == 65000,
"got %u\n", detected[1]);
2612 todo_wine ok(detected[2] == 1200,
"got %u\n", detected[2]);
2630 if (pGetThreadUILanguage)
2632 if (pGetUserDefaultUILanguage)
2640 static const DWORD VALID_MASK = (
DWORD)(~(MIMECONTF_VALID_NLS | MIMECONTF_VALID));
2651 for (
i = 0;
i < test_data_num;
i++)
2655 ok(
ret ==
S_OK,
"%d: IMultiLanguage2_GetCodePageInfo failed: 0x%08lx.\n",
i,
ret);
2664 "%d: got wrong dwFlags expected 0x%lx return 0x%lx.\n",
2667 "%d: got wrong uiCodePage expected %u return %u.\n",
2671 "%d: got wrong uiFamilyCodePage expected %u return %u.\n",
2676 "%d: got wrong wszWebCharset expected %s return %s.\n",
2680 "%d: got wrong wszHeaderCharset expected %s return %s.\n",
2684 "%d: got wrong wszBodyCharset expected %s return %s.\n",
2690 skip(
"Non-English locale\n");
2696 "%d: got wrong wszDescription expected %s return %s.\n",
2700 "%d: got wrong wszFixedWidthFont expected %s return %s.\n",
2704 "%d: got wrong wszProportionalFont expected %s return %s.\n",
2711static void test_MapFont(IMLangFontLink *font_link, IMLangFontLink2 *font_link2)
2713 HFONT old_font =
NULL;
2714 HFONT new_font =
NULL;
2715 HFONT last_font =
NULL;
2719 DWORD font_codepages;
2735 ret = IMLangFontLink_ResetFontMapping(font_link);
2736 ok(
ret ==
S_OK,
"IMLangFontLink_ResetFontMapping: expected S_OK, got %08lx\n",
ret);
2739 ok(
ret ==
E_FAIL,
"IMLangFontLink_MapFont: expected E_FAIL, got %08lx\n",
ret);
2740 ret = IMLangFontLink_MapFont(font_link,
NULL,
codepages, old_font, &new_font);
2741 ok(
ret ==
E_FAIL,
"IMLangFontLink_MapFont: expected E_FAIL, got %08lx\n",
ret);
2743 ok(
ret ==
E_FAIL,
"IMLangFontLink_MapFont: expected E_FAIL, got %08lx\n",
ret);
2746 ok(
ret ==
S_OK,
"IMLangFontLink_MapFont: expected S_OK, got %08lx\n",
ret);
2747 ret = IMLangFontLink_MapFont(font_link,
hdc,
codepages, old_font, &new_font);
2748 ok(
ret ==
S_OK && new_font !=
NULL,
"IMLangFontLink_MapFont: expected S_OK/!NULL, got %08lx/%p\n",
ret, new_font);
2749 last_font = new_font;
2750 ret = IMLangFontLink_MapFont(font_link,
hdc,
codepages, old_font, &new_font);
2751 ok(
ret ==
S_OK && new_font == last_font,
"IMLangFontLink_MapFont: expected S_OK/%p, got %08lx/%p\n", last_font,
ret, new_font);
2753 ret = IMLangFontLink_ReleaseFont(font_link,
NULL);
2754 ok(
ret ==
E_FAIL,
"IMLangFontLink_ReleaseFont: expected E_FAIL, got %08lx\n",
ret);
2755 ret = IMLangFontLink_ReleaseFont(font_link, new_font);
2756 ok(
ret ==
S_OK,
"IMLangFontLink_ReleaseFont: expected S_OK, got %08lx\n",
ret);
2757 ret = IMLangFontLink_ResetFontMapping(font_link);
2758 ok(
ret ==
S_OK,
"IMLangFontLink_ResetFontMapping: expected S_OK, got %08lx\n",
ret);
2762 ret = IMLangFontLink2_ResetFontMapping(font_link2);
2763 ok(
ret ==
S_OK,
"IMLangFontLink2_ResetFontMapping: expected S_OK, got %08lx\n",
ret);
2765 ret = IMLangFontLink2_MapFont(font_link2,
NULL, 0, 0,
NULL);
2766 ok(
ret ==
E_FAIL,
"IMLangFontLink2_MapFont: expected E_FAIL, got %08lx\n",
ret);
2768 ok(
ret ==
E_FAIL,
"IMLangFontLink2_MapFont: expected E_FAIL, got %08lx\n",
ret);
2769 ret = IMLangFontLink2_MapFont(font_link2,
hdc, 0, 0,
NULL);
2771 ret = IMLangFontLink2_MapFont(font_link2,
hdc, 0,
ch,
NULL);
2774 ret = IMLangFontLink2_MapFont(font_link2,
hdc, 0,
ch, &new_font);
2777 "IMLangFontLink2_MapFont: expected S_OK || E_FAIL, got %08lx\n",
ret);
2779 ok(
ret ==
S_OK,
"IMLangFontLink2_MapFont: expected S_OK, got %08lx\n",
ret);
2780 ret = IMLangFontLink2_MapFont(font_link2,
hdc,
codepages, 0, &new_font);
2781 ok(
ret ==
S_OK && new_font !=
NULL,
"IMLangFontLink2_MapFont: expected S_OK/!NULL, got %08lx/%p\n",
ret, new_font);
2782 last_font = new_font;
2783 ret = IMLangFontLink2_MapFont(font_link2,
hdc,
codepages, 0, &new_font);
2784 ok(
ret ==
S_OK && new_font == last_font,
"IMLangFontLink2_MapFont: expected S_OK/%p, got %08lx/%p\n", last_font,
ret, new_font);
2800 ret = IMLangFontLink2_ReleaseFont(font_link2,
NULL);
2801 ok(
ret ==
E_FAIL,
"IMLangFontLink2_ReleaseFont: expected E_FAIL, got %08lx\n",
ret);
2802 ret = IMLangFontLink2_ReleaseFont(font_link2, new_font);
2803 ok(
ret ==
S_OK,
"IMLangFontLink2_ReleaseFont: expected S_OK, got %08lx\n",
ret);
2804 ret = IMLangFontLink2_ResetFontMapping(font_link2);
2805 ok(
ret ==
S_OK,
"IMLangFontLink2_ResetFontMapping: expected S_OK, got %08lx\n",
ret);
2808 ret = IMLangFontLink_MapFont(font_link,
hdc,
codepages, old_font, &font1);
2812 ok(font1 !=
NULL && font2 !=
NULL,
"expected !NULL/!NULL, got %p/%p\n", font1, font2);
2813 ok(font1 == font2,
"expected equal, got not equal\n");
2815 IMLangFontLink_GetFontCodePages(font_link,
hdc, font1, &font_codepages);
2817 "code pages of font is incorrect\n");
2820 ret = IMLangFontLink_GetFontCodePages(font_link,
NULL, font1, &font_codepages);
2821 ok(
ret ==
E_FAIL && !font_codepages,
"expected E_FAIL, but got: %lx, font_codepages:%lx \n",
2822 ret, font_codepages);
2824 ret = IMLangFontLink_GetFontCodePages(font_link,
hdc,
NULL, &font_codepages);
2825 ok(
ret ==
E_FAIL && !font_codepages,
"expected E_FAIL, but got: %lx, font_codepages:%lx \n",
2826 ret, font_codepages);
2829 ret = IMLangFontLink_GetFontCodePages(font_link, (
void*)0xabc, font1, &font_codepages);
2830 ok(
ret ==
E_FAIL && !font_codepages,
"expected E_FAIL, but got: %lx, font_codepages:%lx \n",
2831 ret, font_codepages);
2833 ret = IMLangFontLink_GetFontCodePages(font_link,
hdc, (
void*)0x123456, &font_codepages);
2834 ok(
ret ==
E_FAIL && !font_codepages,
"expected E_FAIL, but got: %lx, font_codepages:%lx \n",
2835 ret, font_codepages);
2837 IMLangFontLink_ResetFontMapping(font_link);
2838 IMLangFontLink2_ResetFontMapping(font_link2);
2844 IMultiLanguage *iML =
NULL;
2845 IMultiLanguage2 *iML2 =
NULL;
2846 IMultiLanguage3 *iML3 =
NULL;
2847 IMLangFontLink *iMLFL =
NULL;
2848 IMLangFontLink2 *iMLFL2 =
NULL;
2863 trace(
"IMultiLanguage\n");
2865 &IID_IMultiLanguage, (
void **)&iML);
2866 if (
ret !=
S_OK || !iML)
return;
2871 IMultiLanguage_Release(iML);
2875 trace(
"IMultiLanguage2\n");
2877 &IID_IMultiLanguage2, (
void **)&iML2);
2878 if (
ret !=
S_OK || !iML2)
return;
2897 test_EnumScripts(iML2, SCRIPTCONTF_SCRIPT_USER | SCRIPTCONTF_SCRIPT_HIDE | SCRIPTCONTF_SCRIPT_SYSTEM);
2900 ok(
ret ==
S_OK,
"IMultiLanguage2_IsConvertible(CP_UTF8 -> CP_UNICODE) = %08lx\n",
ret);
2902 ok(
ret ==
S_OK,
"IMultiLanguage2_IsConvertible(CP_UNICODE -> CP_UTF8) = %08lx\n",
ret);
2909 IMultiLanguage2_Release(iML2);
2914 &IID_IMLangFontLink, (
void **)&iMLFL);
2915 if (
ret !=
S_OK || !iMLFL)
return;
2921 &IID_IMLangFontLink2, (
void **)&iMLFL2);
2922 if (
ret !=
S_OK || !iMLFL2)
return;
2929 IMLangFontLink_Release(iMLFL);
2930 IMLangFontLink2_Release(iMLFL2);
2932 trace(
"IMultiLanguage3\n");
2934 &IID_IMultiLanguage3, (
void **)&iML3);
2938 IMultiLanguage3_Release(iML3);
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
static WCHAR unknown[MAX_STRING_RESOURCE_LEN]
#define GetProcAddress(x, y)
#define HeapFree(x, y, z)
#define WideCharToMultiByte
#define MultiByteToWideChar
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
INT WINAPI LCMapStringA(LCID lcid, DWORD flags, LPCSTR src, INT srclen, LPSTR dst, INT dstlen)
BOOL WINAPI IsValidCodePage(UINT codepage)
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
int WINAPI lstrcmpA(LPCSTR str1, LPCSTR str2)
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
LANGID WINAPI GetUserDefaultLangID(void)
static CPTABLEINFO codepages[128]
HRESULT WINAPI GetGlobalFontLinkObject(IMLangFontLink **obj)
static IMultiLanguage2 * mlang
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
_ACRTIMP wchar_t *__cdecl wcsstr(const wchar_t *, const wchar_t *)
_ACRTIMP int __cdecl strncmp(const char *, const char *, size_t)
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
static const WCHAR stringW[]
GLuint GLuint GLsizei count
GLenum GLuint GLenum GLsizei const GLchar * buf
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean flag
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
#define WC_COMPOSITECHECK
#define WC_NO_BEST_FIT_CHARS
static const WCHAR autoW[]
LPSTR WINAPI lstrcpyA(LPSTR lpString1, LPCSTR lpString2)
int WINAPI lstrlenA(LPCSTR lpString)
#define todo_wine_if(is_todo)
#define memcpy(s1, s2, n)
static void test_GetFontUnicodeRanges(void)
static HINSTANCE hkernel32
static HRESULT WINAPI stream_LockRegion(IStream *iface, ULARGE_INTEGER offset, ULARGE_INTEGER len, DWORD locktype)
static void test_LcidToRfc1766(void)
static const WCHAR de_engb2[]
static HRESULT WINAPI stream_Stat(IStream *iface, STATSTG *stg, DWORD flag)
static const WCHAR en_engb[]
static void test_GetLcidFromRfc1766(IMultiLanguage2 *iML2)
static const info_table_entry info_table[]
static void test_MapFont(IMLangFontLink *font_link, IMLangFontLink2 *font_link2)
static HRESULT check_convertible(IMultiLanguage2 *iML2, UINT from, UINT to)
static void test_CodePageToScriptID(IMLangFontLink2 *font_link)
static void test_JapaneseConversion(void)
static ULONG WINAPI stream_AddRef(IStream *iface)
static void test_GetGlobalFontLinkObject(void)
static const WCHAR de_en[]
static void IMLangFontLink_Test(IMLangFontLink *iMLFL)
static const WCHAR en_en[]
static const WCHAR de_engb[]
static const WCHAR en_de[]
static const WCHAR de_enca[]
static HRESULT WINAPI stream_Clone(IStream *iface, IStream **stream)
static void test_rfc1766(IMultiLanguage2 *iML2)
static const WCHAR fr_enca[]
static HRESULT WINAPI stream_CopyTo(IStream *iface, IStream *stream, ULARGE_INTEGER len, ULARGE_INTEGER *read, ULARGE_INTEGER *written)
static void test_GetRfc1766FromLcid(IMultiLanguage2 *iML2)
static const WCHAR de_deat[]
static const WCHAR fr_de2[]
static const struct cpinfo_test_data iml2_cpinfo_data[]
static void test_IMultiLanguage2_ConvertStringFromUnicode(IMultiLanguage2 *iML2)
#define ok_w2(format, szString1, szString2)
static BOOL is_lang_english(void)
static const WCHAR en_enca[]
static const WCHAR fr_enus2[]
static const WCHAR fr_enus[]
static const WCHAR fr_deat[]
static void test_EnumScripts(IMultiLanguage2 *iML2, DWORD flags)
struct info_table_tag info_table_entry
static HRESULT WINAPI stream_UnlockRegion(IStream *iface, ULARGE_INTEGER offset, ULARGE_INTEGER len, DWORD locktype)
static ULONG WINAPI stream_Release(IStream *iface)
static const WCHAR fr_dech[]
static void test_GetScriptFontInfo(IMLangFontLink2 *font_link)
static const WCHAR de_enus[]
static void test_GetCodePageInfo(IMultiLanguage2 *iML2)
static void test_ConvertINetUnicodeToMultiByte(void)
static void test_multibyte_to_unicode_translations(IMultiLanguage2 *iML2)
static void test_IsCodePageInstallable(IMultiLanguage2 *ml2)
static const char stream_data[]
static const WCHAR en_dech[]
static void test_Rfc1766ToLcid(void)
static const WCHAR fr_de[]
static HRESULT WINAPI stream_Revert(IStream *iface)
static const WCHAR en_enus[]
static HRESULT WINAPI stream_Seek(IStream *iface, LARGE_INTEGER move, DWORD origin, ULARGE_INTEGER *newpos)
static void test_GetRfc1766Info(IMultiLanguage2 *iML2)
static HRESULT WINAPI stream_SetSize(IStream *iface, ULARGE_INTEGER newsize)
static const WCHAR en_deat[]
static void test_IMLangConvertCharset(IMultiLanguage *ml)
static HRESULT WINAPI stream_Write(IStream *iface, const void *buf, ULONG len, ULONG *written)
static const WCHAR de_dech[]
static HRESULT WINAPI stream_QueryInterface(IStream *iface, REFIID riid, void **obj)
static const WCHAR fr_en[]
static void test_GetCharsetInfo_other(IMultiLanguage *ml)
static const lcid_table_entry lcid_table[]
static void test_EnumCodePages(IMultiLanguage2 *iML2, DWORD flags)
static const WCHAR fr_engb[]
static HRESULT WINAPI stream_Commit(IStream *iface, DWORD flags)
static HRESULT WINAPI stream_Read(IStream *iface, void *buf, ULONG len, ULONG *read)
static void cpinfo_cmp(MIMECPINFO *cpinfo1, MIMECPINFO *cpinfo2)
static BOOL init_function_ptrs(void)
static void scriptinfo_cmp(SCRIPTINFO *sinfo1, SCRIPTINFO *sinfo2)
static const IStreamVtbl stream_vtbl
static const WCHAR de_de[]
static void test_DetectOutboundCodePageInIStream(IMultiLanguage3 *ml)
struct lcid_tag_table lcid_table_entry
static const WCHAR de_enus2[]
static void test_GetNumberOfCodePageInfo(IMultiLanguage2 *iML2)
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
#define LOCALE_USER_DEFAULT
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
#define SUBLANG_GERMAN_SWISS
#define SUBLANG_ENGLISH_CAN
#define SUBLANG_ENGLISH_UK
#define SUBLANG_GERMAN_AUSTRIAN
#define SUBLANG_ENGLISH_US
#define _WIN32_WINNT_VISTA
CHAR lfFaceName[LF_FACESIZE]
BOOL todo_wszFixedWidthFont
BOOL todo_uiFamilyCodePage
BOOL todo_wszProportionalFont
BOOL todo_wszHeaderCharset
BOOL todo_GetCodePageInfo
static int processed(const type_t *type)
static const WCHAR lang[]
static const LCID english
DWORD WINAPI GetLastError(void)
int WINAPI GetTextCharsetInfo(_In_ HDC, _Out_opt_ LPFONTSIGNATURE, _In_ DWORD)
HFONT WINAPI CreateFontIndirectA(_In_ const LOGFONTA *)
HGDIOBJ WINAPI GetCurrentObject(_In_ HDC, _In_ UINT)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
BOOL WINAPI DeleteDC(_In_ HDC)
BOOL WINAPI TranslateCharsetInfo(_Inout_ PDWORD, _Out_ LPCHARSETINFO, _In_ DWORD)
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
HDC WINAPI GetDC(_In_opt_ HWND)