39#define CP_UNICODE 1200
75 {
"de-ch", 0x0807,
S_OK},
76 {
"de-at", 0x0c07,
S_OK},
77 {
"de-lu", 0x1007,
S_OK},
78 {
"de-li", 0x1407,
S_OK},
81 {
"en-gb", 0x809,
S_OK},
82 {
"en-GB", 0x809,
S_OK},
83 {
"EN-GB", 0x809,
S_OK},
84 {
"en-US", 0x409,
S_OK},
85 {
"en-us", 0x409,
S_OK},
88 {
"fr-be", 0x080c,
S_OK},
89 {
"fr-ca", 0x0c0c,
S_OK},
90 {
"fr-ch", 0x100c,
S_OK},
91 {
"fr-lu", 0x140c,
S_OK},
92 {
"fr-mc", 0x180c,
S_OK, 0x040c,
"fr"},
95 {
"it-ch", 0x0810,
S_OK},
98 {
"nl-be", 0x0813,
S_OK},
100 {
"ru", 0x0419,
S_OK},
102 {
"kok", 0x0457,
S_OK, 0x0412,
"x-kok"}
117static const WCHAR de_en[] = {
'E',
'n',
'g',
'l',
'i',
's',
'c',
'h',0};
119 '(',
'K',
'a',
'n',
'a',
'd',
'a',
')',0};
121 '(',
'G',
'r',
'o',0xDF,
'b',
'r',
'i',
't',
'a',
'n',
'n',
'i',
'e',
'n',
')',0};
123 '(',
'V',
'e',
'r',
'e',
'i',
'n',
'i',
'g',
't',
'e',
's',
' ',
124 'K',0xF6,
'n',
'i',
'g',
'r',
'e',
'i',
'c',0};
126 '(',
'U',
'S',
'A',
')',0};
128 '(',
'V',
'e',
'r',
'e',
'i',
'n',
'i',
'g',
't',
'e',
' ',
129 'S',
't',
'a',
'a',
't',
'e',
'n',
')',0};
130static const WCHAR de_de[] = {
'D',
'e',
'u',
't',
's',
'c',
'h',
' ',
131 '(',
'D',
'e',
'u',
't',
's',
'c',
'h',
'l',
'a',
'n',
'd',
')',0};
133 '(',0xD6,
's',
't',
'e',
'r',
'r',
'e',
'i',
'c',
'h',
')',0};
135 '(',
'S',
'c',
'h',
'w',
'e',
'i',
'z',
')',0};
139 '(',
'C',
'a',
'n',
'a',
'd',
'a',
')',0};
141 '(',
'U',
'n',
'i',
't',
'e',
'd',
' ',
'K',
'i',
'n',
'g',
'd',
'o',
'm',
')',0};
143 '(',
'U',
'n',
'i',
't',
'e',
'd',
' ',
'S',
't',
'a',
't',
'e',
's',
')',0};
145 '(',
'G',
'e',
'r',
'm',
'a',
'n',
'y',
')',0};
147 '(',
'A',
'u',
's',
't',
'r',
'i',
'a',
')',0};
149 '(',
'S',
'w',
'i',
't',
'z',
'e',
'r',
'l',
'a',
'n',
'd',
')',0};
153 '(',
'C',
'a',
'n',
'a',
'd',
'a',
')',0};
155 '(',
'R',
'o',
'y',
'a',
'u',
'm',
'e',
'-',
'U',
'n',
'i',
')',0};
157 '(',0xC9,
't',
'a',
't',
's',
'-',
'U',
'n',
'i',
's',
')',0};
159 '(',
'U',
'.',
'S',
'.',
')',0};
160static const WCHAR fr_de[] = {
'A',
'l',
'l',
'e',
'm',
'a',
'n',
'd',
' ',
161 '(',
'A',
'l',
'l',
'e',
'm',
'a',
'g',
'n',
'e',
')',0};
162static const WCHAR fr_de2[] = {
'A',
'l',
'l',
'e',
'm',
'a',
'n',
'd',
' ',
163 '(',
'S',
't',
'a',
'n',
'd',
'a',
'r',
'd',
')',0};
165 '(',
'A',
'u',
't',
'r',
'i',
'c',
'h',
'e',
')',0};
167 '(',
'S',
'u',
'i',
's',
's',
'e',
')',0};
252 MIMECONTF_IMPORT | MIMECONTF_VALID | MIMECONTF_VALID_NLS | MIMECONTF_MIME_LATEST,
253 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},
254 {
'_',
'a',
'u',
't',
'o',
'd',
'e',
't',
'e',
'c',
't',
'_',
'c',
'h',
's',0},
255 {
'_',
'a',
'u',
't',
'o',
'd',
'e',
't',
'e',
'c',
't',
'_',
'c',
'h',
's',0},
256 {
'_',
'a',
'u',
't',
'o',
'd',
'e',
't',
'e',
'c',
't',
'_',
'c',
'h',
's',0},
257 {
'S',
'i',
'm',
's',
'u',
'n',0},
258 {
'S',
'i',
'm',
's',
'u',
'n',0}, 134
264 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_MINIMAL | MIMECONTF_IMPORT |
265 MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID |
266 MIMECONTF_VALID_NLS | MIMECONTF_MIME_IE4 | MIMECONTF_MIME_LATEST,
267 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},
268 {
'g',
'b',
'2',
'3',
'1',
'2',0},
269 {
'g',
'b',
'2',
'3',
'1',
'2',0},
270 {
'g',
'b',
'2',
'3',
'1',
'2',0},
271 {
'S',
'i',
'm',
's',
'u',
'n',0},
272 {
'S',
'i',
'm',
's',
'u',
'n',0}, 134
278 MIMECONTF_IMPORT | MIMECONTF_EXPORT | MIMECONTF_VALID | MIMECONTF_VALID_NLS |
279 MIMECONTF_MIME_LATEST,
280 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},
281 {
'x',
'-',
'c',
'p',
'2',
'0',
'9',
'3',
'6',0},
282 {
'x',
'-',
'c',
'p',
'2',
'0',
'9',
'3',
'6',0},
283 {
'x',
'-',
'c',
'p',
'2',
'0',
'9',
'3',
'6',0},
284 {
'S',
'i',
'm',
's',
'u',
'n',0},
285 {
'S',
'i',
'm',
's',
'u',
'n',0}, 134
291 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_IMPORT | MIMECONTF_SAVABLE_MAILNEWS |
292 MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID | MIMECONTF_VALID_NLS |
293 MIMECONTF_MIME_IE4 | MIMECONTF_MIME_LATEST,
294 52936, 936, {
'C',
'h',
'i',
'n',
'e',
's',
'e',
' ',
'S',
'i',
'm',
'p',
'l',
'i',
'f',
'i',
'e',
'd',
' ',
'(',
'H',
'Z',
')',0},
295 {
'h',
'z',
'-',
'g',
'b',
'-',
'2',
'3',
'1',
'2',0},
296 {
'h',
'z',
'-',
'g',
'b',
'-',
'2',
'3',
'1',
'2',0},
297 {
'h',
'z',
'-',
'g',
'b',
'-',
'2',
'3',
'1',
'2',0},
298 {
'S',
'i',
'm',
's',
'u',
'n',0},
299 {
'S',
'i',
'm',
's',
'u',
'n',0}, 134
305 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_MINIMAL | MIMECONTF_IMPORT |
306 MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID |
307 MIMECONTF_VALID_NLS | MIMECONTF_MIME_LATEST,
308 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},
309 {
'G',
'B',
'1',
'8',
'0',
'3',
'0',0},
310 {
'G',
'B',
'1',
'8',
'0',
'3',
'0',0},
311 {
'G',
'B',
'1',
'8',
'0',
'3',
'0',0},
312 {
'S',
'i',
'm',
's',
'u',
'n',0},
313 {
'S',
'i',
'm',
's',
'u',
'n',0}, 134
319 MIMECONTF_IMPORT | MIMECONTF_VALID | MIMECONTF_VALID_NLS | MIMECONTF_MIME_LATEST,
320 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},
321 {
'_',
'a',
'u',
't',
'o',
'd',
'e',
't',
'e',
'c',
't',
'_',
'c',
'h',
't',0},
322 {
'_',
'a',
'u',
't',
'o',
'd',
'e',
't',
'e',
'c',
't',
'_',
'c',
'h',
't',0},
323 {
'_',
'a',
'u',
't',
'o',
'd',
'e',
't',
'e',
'c',
't',
'_',
'c',
'h',
't',0},
324 {
'M',
'i',
'n',
'g',
'L',
'i',
'u',0},
325 {
'N',
'e',
'w',
' ',
'M',
'i',
'n',
'g',
'L',
'i',
'u',0}, 136
331 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_MINIMAL | MIMECONTF_IMPORT |
332 MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID |
333 MIMECONTF_VALID_NLS | MIMECONTF_MIME_IE4 | MIMECONTF_MIME_LATEST,
334 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},
338 {
'M',
'i',
'n',
'g',
'L',
'i',
'u',0},
339 {
'N',
'e',
'w',
' ',
'M',
'i',
'n',
'g',
'L',
'i',
'u',0}, 136
345 MIMECONTF_IMPORT | MIMECONTF_EXPORT | MIMECONTF_VALID | MIMECONTF_VALID_NLS |
346 MIMECONTF_MIME_LATEST,
347 20000, 950, {
'C',
'h',
'i',
'n',
'e',
's',
'e',
' ',
'T',
'r',
'a',
'd',
'i',
't',
'i',
'o',
'n',
'a',
'l',
' ',
'(',
'C',
'N',
'S',
')',0},
348 {
'x',
'-',
'C',
'h',
'i',
'n',
'e',
's',
'e',
'-',
'C',
'N',
'S',0},
349 {
'x',
'-',
'C',
'h',
'i',
'n',
'e',
's',
'e',
'-',
'C',
'N',
'S',0},
350 {
'x',
'-',
'C',
'h',
'i',
'n',
'e',
's',
'e',
'-',
'C',
'N',
'S',0},
351 {
'M',
'i',
'n',
'g',
'L',
'i',
'u',0},
352 {
'N',
'e',
'w',
' ',
'M',
'i',
'n',
'g',
'L',
'i',
'u',0}, 136
358 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_IMPORT | MIMECONTF_SAVABLE_MAILNEWS |
359 MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID | MIMECONTF_VALID_NLS |
360 MIMECONTF_MIME_LATEST,
361 1256, 1256, {
'A',
'r',
'a',
'b',
'i',
'c',
' ',
'(',
'W',
'i',
'n',
'd',
'o',
'w',
's',
')',0},
362 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'6',0},
363 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'6',0},
364 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'6',0},
365 {
'S',
'i',
'm',
'p',
'l',
'i',
'f',
'i',
'e',
'd',
' ',
'A',
'r',
'a',
'b',
'i',
'c',
' ',
'F',
'i',
'x',
'e',
'd',0},
366 {
'S',
'i',
'm',
'p',
'l',
'i',
'f',
'i',
'e',
'd',
' ',
'A',
'r',
'a',
'b',
'i',
'c',0}, 178
372 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_MINIMAL | MIMECONTF_IMPORT |
373 MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID |
374 MIMECONTF_VALID_NLS | MIMECONTF_MIME_LATEST,
375 1257, 1257, {
'B',
'a',
'l',
't',
'i',
'c',
' ',
'(',
'W',
'i',
'n',
'd',
'o',
'w',
's',
')',0},
376 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'7',0},
377 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'7',0},
378 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'7',0},
379 {
'C',
'o',
'u',
'r',
'i',
'e',
'r',
' ',
'N',
'e',
'w',0},
380 {
'A',
'r',
'i',
'a',
'l',0}, 186
386 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_IMPORT | MIMECONTF_SAVABLE_MAILNEWS |
387 MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID | MIMECONTF_VALID_NLS |
388 MIMECONTF_MIME_LATEST,
389 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},
390 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'0',0},
391 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'0',0},
392 {
'i',
's',
'o',
'-',
'8',
'8',
'5',
'9',
'-',
'2',0},
393 {
'C',
'o',
'u',
'r',
'i',
'e',
'r',
' ',
'N',
'e',
'w',0},
394 {
'A',
'r',
'i',
'a',
'l',0}, 238
401 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_IMPORT | MIMECONTF_SAVABLE_MAILNEWS |
402 MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID | MIMECONTF_VALID_NLS |
403 MIMECONTF_MIME_LATEST,
404 1251, 1251, {
'C',
'y',
'r',
'i',
'l',
'l',
'i',
'c',
' ',
'(',
'W',
'i',
'n',
'd',
'o',
'w',
's',
')',0},
405 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'1',0},
406 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'1',0},
407 {
'k',
'o',
'i',
'8',
'-',
'r',0},
408 {
'C',
'o',
'u',
'r',
'i',
'e',
'r',
' ',
'N',
'e',
'w',0},
409 {
'A',
'r',
'i',
'a',
'l',0}, 204
416 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_IMPORT | MIMECONTF_SAVABLE_MAILNEWS |
417 MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID | MIMECONTF_VALID_NLS |
418 MIMECONTF_MIME_LATEST,
419 1253, 1253, {
'G',
'r',
'e',
'e',
'k',
' ',
'(',
'W',
'i',
'n',
'd',
'o',
'w',
's',
')',0},
420 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'3',0},
421 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'3',0},
422 {
'i',
's',
'o',
'-',
'8',
'8',
'5',
'9',
'-',
'7',0},
423 {
'C',
'o',
'u',
'r',
'i',
'e',
'r',
' ',
'N',
'e',
'w',0},
424 {
'A',
'r',
'i',
'a',
'l',0}, 161
431 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_IMPORT | MIMECONTF_SAVABLE_MAILNEWS |
432 MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID | MIMECONTF_VALID_NLS |
433 MIMECONTF_MIME_LATEST,
434 1255, 1255, {
'H',
'e',
'b',
'r',
'e',
'w',
' ',
'(',
'W',
'i',
'n',
'd',
'o',
'w',
's',
')',0},
435 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'5',0},
436 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'5',0},
437 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'5',0},
438 {
'M',
'i',
'r',
'i',
'a',
'm',
' ',
'F',
'i',
'x',
'e',
'd',0},
439 {
'D',
'a',
'v',
'i',
'd',0}, 177
445 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_MINIMAL | MIMECONTF_IMPORT |
446 MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID |
447 MIMECONTF_VALID_NLS | MIMECONTF_MIME_IE4 | MIMECONTF_MIME_LATEST,
448 932, 932, {
'J',
'a',
'p',
'a',
'n',
'e',
's',
'e',
' ',
'(',
'S',
'h',
'i',
'f',
't',
'-',
'J',
'I',
'S',
')',0},
449 {
's',
'h',
'i',
'f',
't',
'_',
'j',
'i',
's',0},
450 {
'i',
's',
'o',
'-',
'2',
'0',
'2',
'2',
'-',
'j',
'p',0},
451 {
'i',
's',
'o',
'-',
'2',
'0',
'2',
'2',
'-',
'j',
'p',0},
452 {
'M',
'S',
' ',
'G',
'o',
't',
'h',
'i',
'c',0},
453 {
'M',
'S',
' ',
'P',
'G',
'o',
't',
'h',
'i',
'c',0}, 128
459 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_MINIMAL | MIMECONTF_IMPORT |
460 MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID |
461 MIMECONTF_VALID_NLS | MIMECONTF_MIME_LATEST,
462 949, 949, {
'K',
'o',
'r',
'e',
'a',
'n',0},
463 {
'k',
's',
'_',
'c',
'_',
'5',
'6',
'0',
'1',
'-',
'1',
'9',
'8',
'7',0},
464 {
'k',
's',
'_',
'c',
'_',
'5',
'6',
'0',
'1',
'-',
'1',
'9',
'8',
'7',0},
465 {
'k',
's',
'_',
'c',
'_',
'5',
'6',
'0',
'1',
'-',
'1',
'9',
'8',
'7',0},
466 {
'G',
'u',
'l',
'i',
'm',
'C',
'h',
'e',0},
467 {
'G',
'u',
'l',
'i',
'm',0}, 129
473 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_MINIMAL | MIMECONTF_IMPORT |
474 MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID |
475 MIMECONTF_VALID_NLS | MIMECONTF_MIME_LATEST,
476 874, 874, {
'T',
'h',
'a',
'i',
' ',
'(',
'W',
'i',
'n',
'd',
'o',
'w',
's',
')',0},
477 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'8',
'7',
'4',0},
478 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'8',
'7',
'4',0},
479 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'8',
'7',
'4',0},
480 {
'T',
'a',
'h',
'o',
'm',
'a',0},
481 {
'T',
'a',
'h',
'o',
'm',
'a',0}, 222
488 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_MINIMAL | MIMECONTF_IMPORT |
489 MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID |
490 MIMECONTF_VALID_NLS | MIMECONTF_MIME_LATEST,
491 1254, 1254, {
'T',
'u',
'r',
'k',
'i',
's',
'h',
' ',
'(',
'W',
'i',
'n',
'd',
'o',
'w',
's',
')',0},
492 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'4',0},
493 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'4',0},
494 {
'i',
's',
'o',
'-',
'8',
'8',
'5',
'9',
'-',
'9',0},
495 {
'C',
'o',
'u',
'r',
'i',
'e',
'r',
' ',
'N',
'e',
'w',0},
496 {
'A',
'r',
'i',
'a',
'l',0}, 162
503 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_IMPORT | MIMECONTF_SAVABLE_MAILNEWS |
504 MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID | MIMECONTF_VALID_NLS |
505 MIMECONTF_MIME_IE4 | MIMECONTF_MIME_LATEST,
506 1258, 1258, {
'V',
'i',
'e',
't',
'n',
'a',
'm',
'e',
's',
'e',
' ',
'(',
'W',
'i',
'n',
'd',
'o',
'w',
's',
')',0},
507 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'8',0},
508 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'8',0},
509 {
'w',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'8',0},
510 {
'C',
'o',
'u',
'r',
'i',
'e',
'r',
' ',
'N',
'e',
'w',0},
511 {
'A',
'r',
'i',
'a',
'l',0}, 163
517 MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_MINIMAL | MIMECONTF_IMPORT |
518 MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT | MIMECONTF_VALID |
519 MIMECONTF_VALID_NLS | MIMECONTF_MIME_LATEST,
520 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},
521 {
'W',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'2',0},
522 {
'W',
'i',
'n',
'd',
'o',
'w',
's',
'-',
'1',
'2',
'5',
'2',0},
523 {
'i',
's',
'o',
'-',
'8',
'8',
'5',
'9',
'-',
'1',0},
524 {
'C',
'o',
'u',
'r',
'i',
'e',
'r',
' ',
'N',
'e',
'w',0},
525 {
'A',
'r',
'i',
'a',
'l',0}, 0
532 MIMECONTF_MINIMAL | MIMECONTF_IMPORT | MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT |
533 MIMECONTF_VALID | MIMECONTF_VALID_NLS | MIMECONTF_MIME_IE4 | MIMECONTF_MIME_LATEST,
534 1200, 1200, {
'U',
'n',
'i',
'c',
'o',
'd',
'e',0},
535 {
'u',
'n',
'i',
'c',
'o',
'd',
'e',0},
536 {
'u',
'n',
'i',
'c',
'o',
'd',
'e',0},
537 {
'u',
'n',
'i',
'c',
'o',
'd',
'e',0},
538 {
'C',
'o',
'u',
'r',
'i',
'e',
'r',
' ',
'N',
'e',
'w',0},
539 {
'A',
'r',
'i',
'a',
'l',0}, 1
549 pConvertINetMultiByteToUnicode = (
void *)
GetProcAddress(hMlang,
"ConvertINetMultiByteToUnicode");
550 pConvertINetUnicodeToMultiByte = (
void *)
GetProcAddress(hMlang,
"ConvertINetUnicodeToMultiByte");
551 pRfc1766ToLcidA = (
void *)
GetProcAddress(hMlang,
"Rfc1766ToLcidA");
552 pLcidToRfc1766A = (
void *)
GetProcAddress(hMlang,
"LcidToRfc1766A");
559#define ok_w2(format, szString1, szString2) \
561 if (lstrcmpW((szString1), (szString2)) != 0) \
563 CHAR string1[256], string2[256]; \
564 WideCharToMultiByte(CP_ACP, 0, (szString1), -1, string1, 256, NULL, NULL); \
565 WideCharToMultiByte(CP_ACP, 0, (szString2), -1, string2, 256, NULL, NULL); \
566 ok(0, (format), string1, string2); \
572 char stringA[] =
"Just a test string\0";
573 WCHAR stringW[] = {
'J',
'u',
's',
't',
' ',
'a',
' ',
't',
'e',
's',
't',
' ',
's',
't',
'r',
'i',
'n',
'g',0};
576 UINT lenA, lenW, expected_len;
581 memset(bufW,
'x',
sizeof(bufW));
584 ret = IMultiLanguage2_ConvertStringToUnicode(iML2,
NULL, 1252, stringA, &lenA, bufW, &lenW);
585 ok(
ret ==
S_OK,
"IMultiLanguage2_ConvertStringToUnicode failed: %08x\n",
ret);
586 ok(lenA == 0,
"expected lenA 0, got %u\n", lenA);
587 ok(lenW == 0,
"expected lenW 0, got %u\n", lenW);
589 memset(bufW,
'x',
sizeof(bufW));
592 ret = IMultiLanguage2_ConvertStringToUnicode(iML2,
NULL, 1252, stringA, &lenA, bufW, &lenW);
593 ok(
ret ==
S_OK,
"IMultiLanguage2_ConvertStringToUnicode failed: %08x\n",
ret);
598 ok(bufW[lenW] != 0,
"buf should not be 0 terminated\n");
603 memset(bufW,
'x',
sizeof(bufW));
606 ret = IMultiLanguage2_ConvertStringToUnicode(iML2,
NULL, 1252, stringA, &lenA, bufW, &lenW);
607 ok(
ret ==
E_FAIL,
"IMultiLanguage2_ConvertStringToUnicode should fail: %08x\n",
ret);
608 ok(lenW == 0,
"expected lenW 0, got %u\n", lenW);
612 memset(bufW,
'x',
sizeof(bufW));
615 ret = IMultiLanguage2_ConvertStringToUnicode(iML2,
NULL,
CP_UNICODE, stringA, &lenA, bufW, &lenW);
616 ok(
ret ==
S_OK,
"IMultiLanguage2_ConvertStringToUnicode failed: %08x\n",
ret);
619 ok(bufW[lenW] != 0,
"buf should not be 0 terminated\n");
623 memset(bufW,
'x',
sizeof(bufW));
626 ret = IMultiLanguage2_ConvertStringToUnicode(iML2,
NULL, 1252, stringA, &lenA,
NULL, &lenW);
627 ok(
ret ==
S_OK,
"IMultiLanguage2_ConvertStringToUnicode failed: %08x\n",
ret);
630 ok(lenW == expected_len,
"expected lenW %u, got %u\n", expected_len, lenW);
632 memset(bufW,
'x',
sizeof(bufW));
635 ret = pConvertINetMultiByteToUnicode(
NULL, 1252, stringA, (
INT *)&lenA,
NULL, (
INT *)&lenW);
636 ok(
ret ==
S_OK,
"ConvertINetMultiByteToUnicode failed: %08x\n",
ret);
639 ok(lenW == expected_len,
"expected lenW %u, got %u\n", expected_len, lenW);
641 memset(bufW,
'x',
sizeof(bufW));
644 ret = pConvertINetMultiByteToUnicode(
NULL, 1252, stringA, (
INT *)&lenA,
NULL, (
INT *)&lenW);
645 ok(
ret ==
S_OK,
"ConvertINetMultiByteToUnicode failed: %08x\n",
ret);
648 ok(lenW == expected_len,
"expected lenW %u, got %u\n", expected_len, lenW);
652 memset(bufA,
'x',
sizeof(bufA));
655 ret = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
stringW, &lenW, bufA, &lenA);
656 ok(
ret ==
S_OK,
"IMultiLanguage2_ConvertStringFromUnicode failed: %08x\n",
ret);
657 ok(lenA == 0,
"expected lenA 0, got %u\n", lenA);
658 ok(lenW == 0,
"expected lenW 0, got %u\n", lenW);
660 memset(bufA,
'x',
sizeof(bufA));
663 ret = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
stringW, &lenW, bufA, &lenA);
664 ok(
ret ==
S_OK,
"IMultiLanguage2_ConvertStringFromUnicode failed: %08x\n",
ret);
667 ok(bufA[lenA] != 0,
"buf should not be 0 terminated\n");
669 ok(!
lstrcmpA(bufA, stringA),
"bufA/stringA mismatch\n");
671 memset(bufA,
'x',
sizeof(bufA));
674 ret = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
stringW, &lenW, bufA, &lenA);
675 ok(
ret ==
E_FAIL,
"IMultiLanguage2_ConvertStringFromUnicode should fail: %08x\n",
ret);
676 ok(lenA == 0,
"expected lenA 0, got %u\n", lenA);
678 ok(!
memcmp(bufA, stringA, 5),
"bufW/stringW mismatch\n");
680 memset(bufA,
'x',
sizeof(bufA));
684 ok(
ret ==
S_OK,
"IMultiLanguage2_ConvertStringFromUnicode failed: %08x\n",
ret);
685 ok(lenA ==
lstrlenA(stringA) * (
int)
sizeof(
WCHAR),
"wrong lenA %u\n", lenA);
687 ok(bufA[lenA] != 0 && bufA[lenA+1] != 0,
"buf should not be 0 terminated\n");
692 memset(bufA,
'x',
sizeof(bufA));
695 ret = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
stringW, &lenW,
NULL, &lenA);
696 ok(
ret ==
S_OK,
"IMultiLanguage2_ConvertStringFromUnicode failed: %08x\n",
ret);
699 ok(lenA == expected_len,
"expected lenA %u, got %u\n", expected_len, lenA);
702static void cpinfo_cmp(MIMECPINFO *cpinfo1, MIMECPINFO *cpinfo2)
704 ok(cpinfo1->dwFlags == cpinfo2->dwFlags,
"dwFlags mismatch: %08x != %08x\n", cpinfo1->dwFlags, cpinfo2->dwFlags);
705 ok(cpinfo1->uiCodePage == cpinfo2->uiCodePage,
"uiCodePage mismatch: %u != %u\n", cpinfo1->uiCodePage, cpinfo2->uiCodePage);
706 ok(cpinfo1->uiFamilyCodePage == cpinfo2->uiFamilyCodePage,
"uiFamilyCodePage mismatch: %u != %u\n", cpinfo1->uiFamilyCodePage, cpinfo2->uiFamilyCodePage);
707 ok(!
lstrcmpW(cpinfo1->wszDescription, cpinfo2->wszDescription),
"wszDescription mismatch\n");
708 ok(!
lstrcmpW(cpinfo1->wszWebCharset, cpinfo2->wszWebCharset),
"wszWebCharset mismatch\n");
709 ok(!
lstrcmpW(cpinfo1->wszHeaderCharset, cpinfo2->wszHeaderCharset),
"wszHeaderCharset mismatch\n");
710 ok(!
lstrcmpW(cpinfo1->wszBodyCharset, cpinfo2->wszBodyCharset),
"wszBodyCharset mismatch\n");
711 ok(!
lstrcmpW(cpinfo1->wszFixedWidthFont, cpinfo2->wszFixedWidthFont),
"wszFixedWidthFont mismatch\n");
712 ok(!
lstrcmpW(cpinfo1->wszProportionalFont, cpinfo2->wszProportionalFont),
"wszProportionalFont mismatch\n");
713 ok(cpinfo1->bGDICharset == cpinfo2->bGDICharset,
"bGDICharset mismatch: %d != %d\n", cpinfo1->bGDICharset, cpinfo2->bGDICharset);
717static const char *dump_mime_flags(
DWORD flags)
719 static char buf[1024];
723 if (
flags & MIMECONTF_MAILNEWS)
strcat(
buf,
" MIMECONTF_MAILNEWS");
727 if (
flags & MIMECONTF_SAVABLE_MAILNEWS)
strcat(
buf,
" MIMECONTF_SAVABLE_MAILNEWS");
728 if (
flags & MIMECONTF_SAVABLE_BROWSER)
strcat(
buf,
" MIMECONTF_SAVABLE_BROWSER");
730 if (
flags & MIMECONTF_PRIVCONVERTER)
strcat(
buf,
" MIMECONTF_PRIVCONVERTER");
732 if (
flags & MIMECONTF_VALID_NLS)
strcat(
buf,
" MIMECONTF_VALID_NLS");
733 if (
flags & MIMECONTF_MIME_IE4)
strcat(
buf,
" MIMECONTF_MIME_IE4");
734 if (
flags & MIMECONTF_MIME_LATEST)
strcat(
buf,
" MIMECONTF_MIME_LATEST");
735 if (
flags & MIMECONTF_MIME_REGISTRY)
strcat(
buf,
" MIMECONTF_MIME_REGISTRY");
757 strW, 3, ch,
sizeof(ch),
NULL, &fDefaultChar);
759 if(
cb == 0 || fDefaultChar)
761 trace(
"target codepage %i does not contain 'abc'\n",
from);
768 hr = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL,
from,
strW,
776 &srcsz,
dest, &destsz);
785 IEnumCodePage *iEnumCP =
NULL;
793 ret = IMultiLanguage2_GetNumberOfCodePageInfo(iML2, &
total);
794 ok(
ret ==
S_OK &&
total != 0,
"IMultiLanguage2_GetNumberOfCodePageInfo: expected S_OK/!0, got %08x/%u\n",
ret,
total);
796 trace(
"total mlang supported codepages %u\n",
total);
799 ok(
ret ==
S_OK && iEnumCP,
"IMultiLanguage2_EnumCodePages: expected S_OK/!NULL, got %08x/%p\n",
ret, iEnumCP);
801 ret = IEnumCodePage_Reset(iEnumCP);
802 ok(
ret ==
S_OK,
"IEnumCodePage_Reset: expected S_OK, got %08x\n",
ret);
804 ret = IEnumCodePage_Next(iEnumCP, 0,
NULL, &
n);
806 "IEnumCodePage_Next: expected S_FALSE or E_FAIL, got %08x\n",
ret);
808 ok(
n == 0,
"IEnumCodePage_Next: expected 0/S_FALSE, got %u/%08x\n",
n,
ret);
810 ok(
n == 65536,
"IEnumCodePage_Next: expected 65536/E_FAIL, got %u/%08x\n",
n,
ret);
813 "IEnumCodePage_Next: expected S_FALSE or E_FAIL, got %08x\n",
ret);
818 ret = IEnumCodePage_Next(iEnumCP, 0,
cpinfo, &
n);
819 ok(
ret ==
S_FALSE &&
n == 0,
"IEnumCodePage_Next: expected S_FALSE/0, got %08x/%u\n",
ret,
n);
823 ok(
ret ==
S_OK &&
n != 0,
"IEnumCodePage_Next: expected S_OK/!0, got %08x/%u\n",
ret,
n);
825 trace(
"flags %08x, enumerated codepages %u\n",
flags,
n);
829 ok(
n ==
total,
"IEnumCodePage_Next: expected %u, got %u\n",
total,
n);
831 flags = MIMECONTF_MIME_LATEST;
836 for (
i = 0;
i <
n;
i++)
841 static const WCHAR autoW[] = {
'_',
'a',
'u',
't',
'o',0};
842 static const WCHAR feffW[] = {
'u',
'n',
'i',
'c',
'o',
'd',
'e',
'F',
'E',
'F',
'F',0};
845 trace(
"MIMECPINFO #%u:\n"
848 "uiFamilyCodePage %u\n"
849 "wszDescription %s\n"
851 "wszHeaderCharset %s\n"
852 "wszBodyCharset %s\n"
853 "wszFixedWidthFont %s\n"
854 "wszProportionalFont %s\n"
855 "bGDICharset %d\n\n",
874 trace(
"TranslateCharsetInfo failed for cp %u\n",
cpinfo[
i].uiFamilyCodePage);
886 ok(
ret ==
S_OK,
"IMultiLanguage2_IsConvertible(%u -> CP_UNICODE) = %08x\n",
cpinfo[
i].uiCodePage,
ret);
888 ok(
ret ==
S_OK,
"IMultiLanguage2_IsConvertible(CP_UNICODE -> %u) = %08x\n",
cpinfo[
i].uiCodePage,
ret);
891 if (convertible !=
E_FAIL)
894 ok(
ret == convertible,
"IMultiLanguage2_IsConvertible(%u -> CP_UTF8) = %08x\n",
cpinfo[
i].uiCodePage,
ret);
896 ok(
ret == convertible,
"IMultiLanguage2_IsConvertible(CP_UTF8 -> %u) = %08x\n",
cpinfo[
i].uiCodePage,
ret);
901 trace(
"IsValidCodePage failed for cp %u\n",
cpinfo[
i].uiCodePage);
904 skip(
"Legacy windows bug returning invalid charset of unicodeFEFF\n");
907 ret = IMultiLanguage2_GetCharsetInfo(iML2,
cpinfo[
i].wszWebCharset, &mcsi);
911 ok (
ret ==
S_OK,
"IMultiLanguage2_GetCharsetInfo failed: %08x\n",
ret);
921 ok(mcsi.uiInternetEncoding ==
cpinfo[
i].uiCodePage || mcsi.uiInternetEncoding ==
cpinfo[
i].uiFamilyCodePage,
922 "%u != %u || %u\n", mcsi.uiInternetEncoding,
cpinfo[
i].uiCodePage,
cpinfo[
i].uiFamilyCodePage);
923 ok(mcsi.uiCodePage ==
cpinfo[
i].uiCodePage || mcsi.uiCodePage ==
cpinfo[
i].uiFamilyCodePage,
924 "%u != %u || %u\n", mcsi.uiCodePage,
cpinfo[
i].uiCodePage,
cpinfo[
i].uiFamilyCodePage);
930 skip(
"Legacy windows bug returning invalid charset of unicodeFEFF\n");
933 ret = IMultiLanguage2_GetCharsetInfo(iML2,
cpinfo[
i].wszHeaderCharset, &mcsi);
937 ok (
ret ==
S_OK,
"IMultiLanguage2_GetCharsetInfo failed: %08x\n",
ret);
947 ok(mcsi.uiInternetEncoding ==
cpinfo[
i].uiCodePage || mcsi.uiInternetEncoding ==
cpinfo[
i].uiFamilyCodePage,
948 "%u != %u || %u\n", mcsi.uiInternetEncoding,
cpinfo[
i].uiCodePage,
cpinfo[
i].uiFamilyCodePage);
949 ok(mcsi.uiCodePage ==
cpinfo[
i].uiCodePage || mcsi.uiCodePage ==
cpinfo[
i].uiFamilyCodePage,
950 "%u != %u || %u\n", mcsi.uiCodePage,
cpinfo[
i].uiCodePage,
cpinfo[
i].uiFamilyCodePage);
956 skip(
"Legacy windows bug returning invalid charset of unicodeFEFF\n");
959 ret = IMultiLanguage2_GetCharsetInfo(iML2,
cpinfo[
i].wszBodyCharset, &mcsi);
963 ok (
ret ==
S_OK,
"IMultiLanguage2_GetCharsetInfo failed: %08x\n",
ret);
973 ok(mcsi.uiInternetEncoding ==
cpinfo[
i].uiCodePage || mcsi.uiInternetEncoding ==
cpinfo[
i].uiFamilyCodePage,
974 "%u != %u || %u\n", mcsi.uiInternetEncoding,
cpinfo[
i].uiCodePage,
cpinfo[
i].uiFamilyCodePage);
975 ok(mcsi.uiCodePage ==
cpinfo[
i].uiCodePage || mcsi.uiCodePage ==
cpinfo[
i].uiFamilyCodePage,
976 "%u != %u || %u\n", mcsi.uiCodePage,
cpinfo[
i].uiCodePage,
cpinfo[
i].uiFamilyCodePage);
984 ret = IEnumCodePage_Next(iEnumCP, 1, &cpinfo2, &
n);
985 ok(
ret ==
S_FALSE &&
n == 0,
"IEnumCodePage_Next: expected S_FALSE/0, got %08x/%u\n",
ret,
n);
987 ret = IEnumCodePage_Reset(iEnumCP);
988 ok(
ret ==
S_OK,
"IEnumCodePage_Reset: expected S_OK, got %08x\n",
ret);
990 ret = IEnumCodePage_Next(iEnumCP, 1, &cpinfo2, &
n);
991 ok(
n == 1 &&
ret ==
S_OK,
"IEnumCodePage_Next: expected 1/S_OK, got %u/%08x\n",
n,
ret);
999 ret = IEnumCodePage_Skip(iEnumCP, 1);
1000 ok(
ret ==
S_OK,
"IEnumCodePage_Skip: expected S_OK, got %08x\n",
ret);
1005 ret = IEnumCodePage_Next(iEnumCP, 1, &cpinfo2, &
n);
1006 ok(
n == 1 &&
ret ==
S_OK,
"IEnumCodePage_Next: expected 1/S_OK, got %u/%08x\n",
n,
ret);
1011 IEnumCodePage_Release(iEnumCP);
1017 WCHAR iso88591_1W[] = {
'I',
'S',
'O',
'-',
'8',
'8',
'5',
'9',
'-',
'1',0};
1018 WCHAR iso88591_1retW[] = {
'i',
's',
'o',
'-',
'8',
'8',
'5',
'9',
'-',
'1',0};
1019 WCHAR iso88591_2W[] = {
'I',
'S',
'O',
'8',
'8',
'5',
'9',
'-',
'1',0};
1020 WCHAR iso88591_2retW[] = {
'i',
's',
'o',
'8',
'8',
'5',
'9',
'-',
'1',0};
1021 WCHAR iso88591_3W[] = {
'I',
'S',
'O',
'8',
'8',
'5',
'9',
'1',0};
1022 WCHAR iso88591_4W[] = {
'I',
'S',
'O',
'-',
'8',
'8',
'5',
'9',
'1',0};
1023 WCHAR iso88591_5W[] = {
'I',
'S',
'O',
'8',
'8',
'-',
'5',
'9',
'1',0};
1024 WCHAR iso88591_6W[] = {
'-',
'I',
'S',
'O',
'8',
'8',
'5',
'9',
'1',0};
1025 WCHAR iso88591_7W[] = {
' ',
'I',
'S',
'O',
'-',
'8',
'8',
'5',
'9',
'-',
'1',0};
1033 { 0,
S_OK, iso88591_1W, iso88591_1retW },
1034 { 1,
S_OK, iso88591_2W, iso88591_2retW },
1035 { 0,
E_FAIL, iso88591_3W, 0 },
1036 { 0,
E_FAIL, iso88591_4W, 0 },
1037 { 0,
E_FAIL, iso88591_5W, 0 },
1038 { 0,
E_FAIL, iso88591_6W, 0 },
1039 { 0,
E_FAIL, iso88591_7W, 0 },
1061 ok(sinfo1->ScriptId == sinfo2->ScriptId,
"ScriptId mismatch: %d != %d\n", sinfo1->ScriptId, sinfo2->ScriptId);
1062 ok(sinfo1->uiCodePage == sinfo2->uiCodePage,
"uiCodePage mismatch: %u != %u\n", sinfo1->uiCodePage, sinfo2->uiCodePage);
1063 ok(!
lstrcmpW(sinfo1->wszDescription, sinfo2->wszDescription),
"wszDescription mismatch\n");
1064 ok(!
lstrcmpW(sinfo1->wszFixedWidthFont, sinfo2->wszFixedWidthFont),
"wszFixedWidthFont mismatch\n");
1065 ok(!
lstrcmpW(sinfo1->wszProportionalFont, sinfo2->wszProportionalFont),
"wszProportionalFont mismatch\n");
1070 IEnumScript *iEnumScript =
NULL;
1078 ret = IMultiLanguage2_GetNumberOfScripts(iML2, &
total);
1079 ok(
ret ==
S_OK &&
total != 0,
"IMultiLanguage2_GetNumberOfScripts: expected S_OK/!0, got %08x/%u\n",
ret,
total);
1081 trace(
"total mlang supported scripts %u\n",
total);
1084 ok(
ret ==
S_OK && iEnumScript,
"IMultiLanguage2_EnumScripts: expected S_OK/!NULL, got %08x/%p\n",
ret, iEnumScript);
1086 ret = IEnumScript_Reset(iEnumScript);
1087 ok(
ret ==
S_OK,
"IEnumScript_Reset: expected S_OK, got %08x\n",
ret);
1089 ret = IEnumScript_Next(iEnumScript, 0,
NULL, &
n);
1090 ok(
n == 65536 &&
ret ==
E_FAIL,
"IEnumScript_Next: expected 65536/E_FAIL, got %u/%08x\n",
n,
ret);
1091 ret = IEnumScript_Next(iEnumScript, 0,
NULL,
NULL);
1092 ok(
ret ==
E_FAIL,
"IEnumScript_Next: expected E_FAIL, got %08x\n",
ret);
1097 ret = IEnumScript_Next(iEnumScript, 0,
sinfo, &
n);
1098 ok(
ret ==
S_FALSE &&
n == 0,
"IEnumScript_Next: expected S_FALSE/0, got %08x/%u\n",
ret,
n);
1101 ret = IEnumScript_Next(iEnumScript,
n,
sinfo, &
n);
1102 ok(
ret ==
S_OK &&
n != 0,
"IEnumScript_Next: expected S_OK, got %08x/%u\n",
ret,
n);
1104 trace(
"flags %08x, enumerated scripts %u\n",
flags,
n);
1108 ok(
n ==
total,
"IEnumScript_Next: expected %u, got %u\n",
total,
n);
1113 for (
i = 0; pGetCPInfoExA &&
i <
n;
i++)
1115#ifdef DUMP_SCRIPT_INFO
1116 trace(
"SCRIPTINFO #%u:\n"
1119 "wszDescription %s\n"
1120 "wszFixedWidthFont %s\n"
1121 "wszProportionalFont %s\n\n",
1134 ret = IEnumScript_Next(iEnumScript, 1, &sinfo2, &
n);
1135 ok(
ret ==
S_FALSE &&
n == 0,
"IEnumScript_Next: expected S_FALSE/0, got %08x/%u\n",
ret,
n);
1137 ret = IEnumScript_Reset(iEnumScript);
1138 ok(
ret ==
S_OK,
"IEnumScript_Reset: expected S_OK, got %08x\n",
ret);
1140 ret = IEnumScript_Next(iEnumScript, 1, &sinfo2, &
n);
1141 ok(
n == 1 &&
ret ==
S_OK,
"IEnumScript_Next: expected 1/S_OK, got %u/%08x\n",
n,
ret);
1149 ret = IEnumScript_Skip(iEnumScript, 1);
1150 ok(
ret ==
S_OK,
"IEnumScript_Skip: expected S_OK, got %08x\n",
ret);
1155 ret = IEnumScript_Next(iEnumScript, 1, &sinfo2, &
n);
1156 ok(
n == 1 &&
ret ==
S_OK,
"IEnumScript_Next: expected 1/S_OK, got %u/%08x\n",
n,
ret);
1161 IEnumScript_Release(iEnumScript);
1166 DWORD dwCodePages, dwManyCodePages;
1167 DWORD dwCmpCodePages;
1169 static const WCHAR str[] = {
'd', 0x0436, 0xff90 };
1174 ret = IMLangFontLink_CodePageToCodePages(iMLFL, -1, &dwCodePages);
1175 ok(
ret ==
E_FAIL,
"IMLangFontLink_CodePageToCodePages should fail: %x\n",
ret);
1176 ok(dwCodePages == 0,
"expected 0, got %u\n", dwCodePages);
1179 ret = IMLangFontLink_CodePageToCodePages(iMLFL, 932, &dwCodePages);
1180 ok(
ret ==
S_OK,
"IMLangFontLink_CodePageToCodePages error %x\n",
ret);
1181 ok(dwCodePages ==
FS_JISJAPAN,
"expected FS_JISJAPAN, got %08x\n", dwCodePages);
1183 ret = IMLangFontLink_CodePagesToCodePage(iMLFL, dwCodePages, 1035, &CodePage);
1184 ok(
ret ==
S_OK,
"IMLangFontLink_CodePagesToCodePage error %x\n",
ret);
1185 ok(CodePage == 932,
"Incorrect CodePage Returned (%i)\n",CodePage);
1187 dwManyCodePages = 0;
1188 ret = IMLangFontLink_CodePageToCodePages(iMLFL, 1252, &dwManyCodePages);
1189 ok(
ret ==
S_OK,
"IMLangFontLink_CodePageToCodePages error %x\n",
ret);
1190 ok(dwManyCodePages ==
FS_LATIN1,
"expected FS_LATIN1, got %08x\n", dwManyCodePages);
1192 ret = IMLangFontLink_CodePageToCodePages(iMLFL, 1256, &dwCodePages);
1193 ok(
ret ==
S_OK,
"IMLangFontLink_CodePageToCodePages error %x\n",
ret);
1194 ok(dwCodePages ==
FS_ARABIC,
"expected FS_ARABIC, got %08x\n", dwCodePages);
1195 dwManyCodePages |= dwCodePages;
1196 ret = IMLangFontLink_CodePageToCodePages(iMLFL, 874, &dwCodePages);
1197 ok(
ret ==
S_OK,
"IMLangFontLink_CodePageToCodePages error %x\n",
ret);
1198 ok(dwCodePages ==
FS_THAI,
"expected FS_THAI, got %08x\n", dwCodePages);
1199 dwManyCodePages |= dwCodePages;
1201 ret = IMLangFontLink_CodePagesToCodePage(iMLFL, dwManyCodePages, 1256, &CodePage);
1202 ok(
ret ==
S_OK,
"IMLangFontLink_CodePagesToCodePage error %x\n",
ret);
1203 ok(CodePage == 1256,
"Incorrect CodePage Returned (%i)\n",CodePage);
1205 ret = IMLangFontLink_CodePagesToCodePage(iMLFL, dwManyCodePages, 936, &CodePage);
1206 ok(
ret ==
S_OK,
"IMLangFontLink_CodePagesToCodePage error %x\n",
ret);
1207 ok(CodePage == 1252,
"Incorrect CodePage Returned (%i)\n",CodePage);
1215 ret = IMLangFontLink_GetCharCodePages(iMLFL,
'd', &dwCodePages);
1216 ok(
ret ==
S_OK,
"IMLangFontLink_GetCharCodePages error %x\n",
ret);
1217 ok(dwCodePages == dwCmpCodePages,
"expected %x, got %x\n", dwCmpCodePages, dwCodePages);
1221 ret = IMLangFontLink_GetStrCodePages(iMLFL,
str, 1, 0, &dwCodePages, &
processed);
1222 ok(
ret ==
S_OK,
"IMLangFontLink_GetStrCodePages error %x\n",
ret);
1223 ok(dwCodePages == dwCmpCodePages,
"expected %x, got %x\n", dwCmpCodePages, dwCodePages);
1228 ret = IMLangFontLink_GetCharCodePages(iMLFL, 0x0436, &dwCodePages);
1229 ok(
ret ==
S_OK,
"IMLangFontLink_GetCharCodePages error %x\n",
ret);
1230 ok(dwCodePages == dwCmpCodePages,
"expected %x, got %x\n", dwCmpCodePages, dwCodePages);
1234 ret = IMLangFontLink_GetStrCodePages(iMLFL, &
str[1], 1, 0, &dwCodePages, &
processed);
1235 ok(
ret ==
S_OK,
"IMLangFontLink_GetStrCodePages error %x\n",
ret);
1236 ok(dwCodePages == dwCmpCodePages,
"expected %x, got %x\n", dwCmpCodePages, dwCodePages);
1241 ret = IMLangFontLink_GetCharCodePages(iMLFL, 0xff90, &dwCodePages);
1242 ok(
ret ==
S_OK,
"IMLangFontLink_GetCharCodePages error %x\n",
ret);
1243 ok(dwCodePages == dwCmpCodePages,
"expected %x, got %x\n", dwCmpCodePages, dwCodePages);
1247 ret = IMLangFontLink_GetStrCodePages(iMLFL, &
str[2], 1, 0, &dwCodePages, &
processed);
1248 ok(
ret ==
S_OK,
"IMLangFontLink_GetStrCodePages error %x\n",
ret);
1249 ok(dwCodePages == dwCmpCodePages,
"expected %x, got %x\n", dwCmpCodePages, dwCodePages);
1255 ret = IMLangFontLink_GetStrCodePages(iMLFL,
str, 2, 0, &dwCodePages, &
processed);
1256 ok(
ret ==
S_OK,
"IMLangFontLink_GetStrCodePages error %x\n",
ret);
1257 ok(dwCodePages == dwCmpCodePages,
"expected %x, got %x\n", dwCmpCodePages, dwCodePages);
1263 ret = IMLangFontLink_GetStrCodePages(iMLFL,
str, 3, 0, &dwCodePages, &
processed);
1264 ok(
ret ==
S_OK,
"IMLangFontLink_GetStrCodePages error %x\n",
ret);
1265 ok(dwCodePages == dwCmpCodePages,
"expected %x, got %x\n", dwCmpCodePages, dwCodePages);
1268 dwCodePages = 0xffff;
1270 ret = IMLangFontLink_GetStrCodePages(iMLFL, &
str[2], 1, 0, &dwCodePages, &
processed);
1271 ok(
ret ==
S_OK,
"IMLangFontLink_GetStrCodePages error %x\n",
ret);
1272 ok(dwCodePages == dwCmpCodePages,
"expected %x, got %x\n", dwCmpCodePages, dwCodePages);
1275 ret = IMLangFontLink_GetStrCodePages(iMLFL, &
str[2], 1, 0,
NULL,
NULL);
1276 ok(
ret ==
S_OK,
"IMLangFontLink_GetStrCodePages error %x\n",
ret);
1278 dwCodePages = 0xffff;
1280 ret = IMLangFontLink_GetStrCodePages(iMLFL,
str, -1, 0, &dwCodePages, &
processed);
1282 ok(dwCodePages == 0,
"expected %x, got %x\n", dwCmpCodePages, dwCodePages);
1285 dwCodePages = 0xffff;
1287 ret = IMLangFontLink_GetStrCodePages(iMLFL,
NULL, 1, 0, &dwCodePages, &
processed);
1289 ok(dwCodePages == 0,
"expected %x, got %x\n", dwCmpCodePages, dwCodePages);
1292 dwCodePages = 0xffff;
1294 ret = IMLangFontLink_GetStrCodePages(iMLFL,
str, 0, 0, &dwCodePages, &
processed);
1296 ok(dwCodePages == 0,
"expected %x, got %x\n", dwCmpCodePages, dwCodePages);
1306 while (*p1 && *p2 && *p1 == *p2) { p1++; p2++; }
1315 IEnumRfc1766 *pEnumRfc1766;
1322 ok(
ret ==
S_OK,
"IMultiLanguage2_EnumRfc1766 error %08x\n",
ret);
1326 ret = IEnumRfc1766_Next(pEnumRfc1766, 1, &
info, &
n);
1330 trace(
"lcid %04x rfc_name %s locale_name %s\n",
1334 ok(
n == 1,
"couldn't fetch 1 RFC1766INFO structure\n");
1337 ret = IMultiLanguage2_GetRfc1766FromLcid(iML2,
info.lcid, &rfcstr);
1343 "Expected matching locale names\n");
1347 IEnumRfc1766_Release(pEnumRfc1766);
1352 WCHAR rfc1766W[MAX_RFC1766_NAME + 1];
1357 static WCHAR en[] = {
'e',
'n',0 };
1358 static WCHAR en_them[] = {
'e',
'n',
'-',
't',
'h',
'e',
'm',0 };
1359 static WCHAR english[] = {
'e',
'n',
'g',
'l',
'i',
's',
'h',0 };
1365 ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, &lcid, rfc1766W);
1374 "#%02d: got LCID 0x%x (expected 0x%x)\n",
i, lcid,
lcid_table[
i].lcid);
1378 ret = IMultiLanguage2_GetLcidFromRfc1766(iML2,
NULL,
en);
1381 ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, &lcid,
NULL);
1384 ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, &lcid, en_them);
1389 static WCHAR en[] = {
'e',
'n',0};
1391 ret = IMultiLanguage2_GetRfc1766FromLcid(iML2, lcid, &rfcstr);
1393 ok_w2(
"Expected \"%s\", got \"%s\"n",
en, rfcstr);
1396 ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, &lcid,
english);
1401 static WCHAR en[] = {
'e',
'n',0};
1403 ret = IMultiLanguage2_GetRfc1766FromLcid(iML2, lcid, &rfcstr);
1405 ok_w2(
"Expected \"%s\", got \"%s\"n",
en, rfcstr);
1427 "#%02d: got LCID 0x%x (expected 0x%x)\n",
i, lcid,
lcid_table[
i].lcid);
1430 ret = pRfc1766ToLcidA(&lcid,
NULL);
1433 ret = pRfc1766ToLcidA(
NULL,
"en");
1443 hr = IMultiLanguage2_GetNumberOfCodePageInfo(iML2, &
value);
1445 "got 0x%x with %d (expected S_OK with '!= 0')\n",
hr,
value);
1447 hr = IMultiLanguage2_GetNumberOfCodePageInfo(iML2,
NULL);
1464 hr = IMultiLanguage2_GetRfc1766FromLcid(iML2,
lcid_table[
i].lcid, &rfcstr);
1522 hr = pLcidToRfc1766A(-1,
buffer, MAX_RFC1766_NAME);
1541 WCHAR short_broken_name[MAX_LOCALE_NAME];
1542 CHAR rfc1766A[MAX_RFC1766_NAME + 1];
1544 PRFC1766INFO prfc = (RFC1766INFO *)
buffer;
1555 ok(
ret ==
S_OK,
"#%02d: got 0x%x (expected S_OK)\n",
i,
ret);
1557 "#%02d: got 0x%04x (expected 0x%04x)\n",
i, prfc->lcid,
info_table[
i].
lcid);
1560 "#%02d: got '%s' (expected '%s')\n",
i, rfc1766A,
info_table[
i].rfc1766);
1565 short_broken_name[MAX_LOCALE_NAME - 2] = 0;
1573 "#%02d: got %s (expected %s)\n",
i,
1600 static WCHAR src[] = {
'a',
'b',
'c',0};
1602 memset(invariate,
'x',
sizeof(invariate));
1607 destsz =
sizeof(
dest);
1608 hr = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
NULL,
1609 &srcsz,
dest, &destsz);
1614 "Expected %u, got %u\n",
lstrlenW(
src) + 1, srcsz);
1619 "Expected %u, got %u\n", 0, srcsz);
1623 "Expected dest to be unchanged, got %s\n",
dest);
1624 ok(destsz == 0,
"Expected 0, got %u\n", destsz);
1628 destsz =
sizeof(
dest);
1629 hr = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
src,
1631 ok(
hr ==
S_OK,
"Expected S_OK, got %08x\n",
hr);
1633 "Expected first three chars to be \"abc\"\n");
1635 "Expected rest of dest to be unchanged, got %s\n",
dest);
1641 destsz =
sizeof(
dest);
1642 hr = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
NULL,
1646 "Expected dest to be unchanged, got %s\n",
dest);
1647 ok(destsz == 0,
"Expected 0, got %u\n", destsz);
1652 destsz =
sizeof(
dest);
1653 hr = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
src,
1654 &srcsz,
NULL, &destsz);
1655 ok(
hr ==
S_OK,
"Expected S_OK, got %08x\n",
hr);
1657 "Expected %u, got %u\n",
lstrlenW(
src) + 1, srcsz);
1659 "Expected %u, got %u\n",
lstrlenW(
src) + 1, srcsz);
1663 hr = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
src,
1665 ok(
hr ==
S_OK,
"Expected S_OK, got %08x\n",
hr);
1667 "Expected %u, got %u\n",
lstrlenW(
src) + 1, srcsz);
1669 "Expected dest to be unchanged, got %s\n",
dest);
1674 destsz =
sizeof(
dest);
1675 hr = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
src,
1676 &srcsz,
dest, &destsz);
1677 ok(
hr ==
S_OK,
"Expected S_OK, got %08x\n",
hr);
1678 ok(srcsz == 0,
"Expected 0, got %u\n", srcsz);
1680 "Expected dest to be unchanged, got %s\n",
dest);
1681 ok(destsz == 0,
"Expected 0, got %u\n", destsz);
1686 destsz =
sizeof(
dest);
1687 hr = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
src,
1688 &srcsz,
dest, &destsz);
1689 ok(
hr ==
S_OK,
"Expected S_OK, got %08x\n",
hr);
1692 ok(!
strncmp(
dest,
"abc", 3),
"Expected first three chars to be \"abc\"\n");
1694 "Expected rest of dest to be unchanged, got %s\n",
dest);
1701 destsz =
sizeof(
dest);
1702 hr = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
src,
1703 &srcsz,
dest, &destsz);
1704 ok(
hr ==
S_OK,
"Expected S_OK, got %08x\n",
hr);
1705 ok(srcsz ==
lstrlenW(
src) + 1,
"Expected 3, got %u\n", srcsz);
1708 "Expected %u, got %u\n",
lstrlenW(
src) + 1, destsz);
1713 destsz =
sizeof(
dest);
1714 hr = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
src,
1715 &srcsz,
dest, &destsz);
1716 ok(
hr ==
S_OK,
"Expected S_OK, got %08x\n",
hr);
1719 ok(!
strncmp(
dest,
"abc", 3),
"Expected first three chars to be \"abc\"\n");
1721 "Expected rest of dest to be unchanged, got %s\n",
dest);
1729 hr = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
src,
1730 &srcsz,
dest, &destsz);
1731 ok(
hr ==
S_OK,
"Expected S_OK, got %08x\n",
hr);
1733 "Expected %u, got %u\n",
lstrlenW(
src) + 1, srcsz);
1735 "Expected dest to be unchanged, got %s\n",
dest);
1737 "Expected %u, got %u\n",
lstrlenW(
src) + 1, destsz);
1743 hr = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
src,
1744 &srcsz,
dest, &destsz);
1746 ok(srcsz == 0,
"Expected 0, got %u\n", srcsz);
1747 ok(!
strncmp(
dest,
"abc", 3),
"Expected first three chars to be \"abc\"\n");
1749 "Expected rest of dest to be unchanged, got %s\n",
dest);
1750 ok(destsz == 0,
"Expected 0, got %u\n", srcsz);
1756 hr = IMultiLanguage2_ConvertStringFromUnicode(iML2,
NULL, 1252,
src,
1757 &srcsz,
dest, &destsz);
1758 ok(
hr ==
S_OK,
"Expected S_OK, got %08x\n",
hr);
1760 "Expected %u, got %u\n",
lstrlenW(
src) + 1, srcsz);
1763 "Expected %u, got %u\n",
lstrlenW(
src) + 1, destsz);
1773 static WCHAR src[] = {
'a',
'b',
'c',0};
1775 memset(invariate,
'x',
sizeof(invariate));
1780 destsz =
sizeof(
dest);
1781 hr = pConvertINetUnicodeToMultiByte(
NULL, 1252,
NULL, &srcsz,
dest, &destsz);
1785 "Expected %u, got %u\n",
lstrlenW(
src) + 1, srcsz);
1788 "Expected %u, got %u\n", 0, srcsz);
1790 "Expected dest to be unchanged, got %s\n",
dest);
1791 ok(destsz == 0,
"Expected 0, got %u\n", destsz);
1795 destsz =
sizeof(
dest);
1797 ok(
hr ==
S_OK,
"Expected S_OK, got %08x\n",
hr);
1799 "Expected first three chars to be \"abc\"\n");
1801 "Expected rest of dest to be unchanged, got %s\n",
dest);
1807 destsz =
sizeof(
dest);
1811 "Expected dest to be unchanged, got %s\n",
dest);
1812 ok(destsz == 0,
"Expected 0, got %u\n", destsz);
1817 destsz =
sizeof(
dest);
1818 hr = pConvertINetUnicodeToMultiByte(
NULL, 1252,
src, &srcsz,
NULL, &destsz);
1819 ok(
hr ==
S_OK,
"Expected S_OK, got %08x\n",
hr);
1821 "Expected %u, got %u\n",
lstrlenW(
src) + 1, srcsz);
1823 "Expected %u, got %u\n",
lstrlenW(
src) + 1, srcsz);
1828 ok(
hr ==
S_OK,
"Expected S_OK, got %08x\n",
hr);
1830 "Expected %u, got %u\n",
lstrlenW(
src) + 1, srcsz);
1832 "Expected dest to be unchanged, got %s\n",
dest);
1837 destsz =
sizeof(
dest);
1838 hr = pConvertINetUnicodeToMultiByte(
NULL, 1252,
src, &srcsz,
dest, &destsz);
1839 ok(
hr ==
S_OK,
"Expected S_OK, got %08x\n",
hr);
1840 ok(srcsz == 0,
"Expected 0, got %u\n", srcsz);
1842 "Expected dest to be unchanged, got %s\n",
dest);
1843 ok(destsz == 0,
"Expected 0, got %u\n", destsz);
1848 destsz =
sizeof(
dest);
1849 hr = pConvertINetUnicodeToMultiByte(
NULL, 1252,
src, &srcsz,
dest, &destsz);
1850 ok(
hr ==
S_OK,
"Expected S_OK, got %08x\n",
hr);
1853 ok(!
strncmp(
dest,
"abc", 3),
"Expected first three chars to be \"abc\"\n");
1855 "Expected rest of dest to be unchanged, got %s\n",
dest);
1862 destsz =
sizeof(
dest);
1863 hr = pConvertINetUnicodeToMultiByte(
NULL, 1252,
src, &srcsz,
dest, &destsz);
1864 ok(
hr ==
S_OK,
"Expected S_OK, got %08x\n",
hr);
1865 ok(srcsz ==
lstrlenW(
src) + 1,
"Expected 3, got %u\n", srcsz);
1868 "Expected %u, got %u\n",
lstrlenW(
src) + 1, destsz);
1873 destsz =
sizeof(
dest);
1874 hr = pConvertINetUnicodeToMultiByte(
NULL, 1252,
src, &srcsz,
dest, &destsz);
1875 ok(
hr ==
S_OK,
"Expected S_OK, got %08x\n",
hr);
1878 ok(!
strncmp(
dest,
"abc", 3),
"Expected first three chars to be \"abc\"\n");
1880 "Expected rest of dest to be unchanged, got %s\n",
dest);
1888 hr = pConvertINetUnicodeToMultiByte(
NULL, 1252,
src, &srcsz,
dest, &destsz);
1889 ok(
hr ==
S_OK,
"Expected S_OK, got %08x\n",
hr);
1891 "Expected %u, got %u\n",
lstrlenW(
src) + 1, srcsz);
1893 "Expected dest to be unchanged, got %s\n",
dest);
1895 "Expected %u, got %u\n",
lstrlenW(
src) + 1, destsz);
1901 hr = pConvertINetUnicodeToMultiByte(
NULL, 1252,
src, &srcsz,
dest, &destsz);
1903 ok(srcsz == 0,
"Expected 0, got %u\n", srcsz);
1904 ok(!
strncmp(
dest,
"abc", 3),
"Expected first three chars to be \"abc\"\n");
1906 "Expected rest of dest to be unchanged, got %s\n",
dest);
1907 ok(destsz == 0,
"Expected 0, got %u\n", srcsz);
1913 hr = pConvertINetUnicodeToMultiByte(
NULL, 1252,
src, &srcsz,
dest, &destsz);
1914 ok(
hr ==
S_OK,
"Expected S_OK, got %08x\n",
hr);
1916 "Expected %u, got %u\n",
lstrlenW(
src) + 1, srcsz);
1919 "Expected %u, got %u\n",
lstrlenW(
src) + 1, destsz);
1925 static WCHAR unc_jp[9][12] = {
1926 {9,0x31,0x20,0x3042,0x3044,0x3046,0x3048,0x304a,0x000d,0x000a},
1927 {9,0x31,0x20,0x30a2,0x30a4,0x30a6,0x30a8,0x30aa,0x000d,0x000a},
1928 {9,0x31,0x20,0xff71,0xff72,0xff73,0xff74,0xff75,0x000d,0x000a},
1929 {9,0x31,0x20,0x3041,0x3043,0x3045,0x3047,0x3049,0x000d,0x000a},
1930 {9,0x31,0x20,0x30a1,0x30a3,0x30a5,0x30a7,0x30a9,0x000d,0x000a},
1931 {9,0x31,0x20,0xff67,0xff68,0xff69,0xff6a,0xff6b,0x000d,0x000a},
1932 {9,0x31,0x20,0x300c,0x65e5,0x672c,0x8a9e,0x300d,0x000d,0x000a},
1933 {7,0x31,0x20,0x25c7,0x25c7,0x3012,0x000d,0x000a},
1934 {11,0x31,0x20,0x203b,0x3010,0x0074,0x0065,0x0073,0x0074,0x3011,0x000d,0x000a}
1936 static CHAR jis_jp[9][27] = {
1937 {20,0x31,0x20,0x1b,0x24,0x42,0x24,0x22,0x24,0x24,0x24,0x26,0x24,0x28,
1938 0x24,0x2a,0x1b,0x28,0x42,0x0d,0x0a},
1939 {20,0x31,0x20,0x1b,0x24,0x42,0x25,0x22,0x25,0x24,0x25,0x26,0x25,0x28,
1940 0x25,0x2a,0x1b,0x28,0x42,0x0d,0x0a},
1941 {20,0x31,0x20,0x1b,0x24,0x42,0x25,0x22,0x25,0x24,0x25,0x26,0x25,0x28,
1942 0x25,0x2a,0x1b,0x28,0x42,0x0d,0x0a},
1943 {20,0x31,0x20,0x1b,0x24,0x42,0x24,0x21,0x24,0x23,0x24,0x25,0x24,0x27,
1944 0x24,0x29,0x1b,0x28,0x42,0x0d,0x0a},
1945 {20,0x31,0x20,0x1b,0x24,0x42,0x25,0x21,0x25,0x23,0x25,0x25,0x25,0x27,
1946 0x25,0x29,0x1b,0x28,0x42,0x0d,0x0a},
1947 {20,0x31,0x20,0x1b,0x24,0x42,0x25,0x21,0x25,0x23,0x25,0x25,0x25,0x27,
1948 0x25,0x29,0x1b,0x28,0x42,0x0d,0x0a},
1949 {20,0x31,0x20,0x1b,0x24,0x42,0x21,0x56,0x46,0x7c,0x4b,0x5c,0x38,0x6c,
1950 0x21,0x57,0x1b,0x28,0x42,0x0d,0x0a},
1951 {16,0x31,0x20,0x1b,0x24,0x42,0x21,0x7e,0x21,0x7e,0x22,0x29,0x1b,0x28,
1953 {26,0x31,0x20,0x1b,0x24,0x42,0x22,0x28,0x21,0x5a,0x1b,0x28,0x42,0x74,
1954 0x65,0x73,0x74,0x1b,0x24,0x42,0x21,0x5b,0x1b,0x28,0x42,0x0d,0x0a}
1956 static CHAR sjis_jp[9][15] = {
1957 {14,0x31,0x20,0x82,0xa0,0x82,0xa2,0x82,0xa4,0x82,0xa6,0x82,0xa8,0x0d,0x0a},
1958 {14,0x31,0x20,0x83,0x41,0x83,0x43,0x83,0x45,0x83,0x47,0x83,0x49,0x0d,0x0a},
1959 {9,0x31,0x20,0xb1,0xb2,0xb3,0xb4,0xb5,0x0d,0x0a},
1960 {14,0x31,0x20,0x82,0x9f,0x82,0xa1,0x82,0xa3,0x82,0xa5,0x82,0xa7,0x0d,0x0a},
1961 {14,0x31,0x20,0x83,0x40,0x83,0x42,0x83,0x44,0x83,0x46,0x83,0x48,0x0d,0x0a},
1962 {9,0x31,0x20,0xa7,0xa8,0xa9,0xaa,0xab,0x0d,0x0a},
1963 {14,0x31,0x20,0x81,0x75,0x93,0xfa,0x96,0x7b,0x8c,0xea,0x81,0x76,0x0d,0x0a},
1964 {10,0x31,0x20,0x81,0x9e,0x81,0x9e,0x81,0xa7,0x0d,0x0a},
1965 {14,0x31,0x20,0x81,0xa6,0x81,0x79,0x74,0x65,0x73,0x74,0x81,0x7a,0x0d,0x0a}
1967 static CHAR euc_jp[9][15] = {
1968 {14,0x31,0x20,0xa4,0xa2,0xa4,0xa4,0xa4,0xa6,0xa4,0xa8,0xa4,0xaa,0x0d,0x0a},
1969 {14,0x31,0x20,0xa5,0xa2,0xa5,0xa4,0xa5,0xa6,0xa5,0xa8,0xa5,0xaa,0x0d,0x0a},
1970 {14,0x31,0x20,0x8e,0xb1,0x8e,0xb2,0x8e,0xb3,0x8e,0xb4,0x8e,0xb5,0x0d,0x0a},
1971 {14,0x31,0x20,0xa4,0xa1,0xa4,0xa3,0xa4,0xa5,0xa4,0xa7,0xa4,0xa9,0x0d,0x0a},
1972 {14,0x31,0x20,0xa5,0xa1,0xa5,0xa3,0xa5,0xa5,0xa5,0xa7,0xa5,0xa9,0x0d,0x0a},
1973 {14,0x31,0x20,0x8e,0xa7,0x8e,0xa8,0x8e,0xa9,0x8e,0xaa,0x8e,0xab,0x0d,0x0a},
1974 {14,0x31,0x20,0xa1,0xd6,0xc6,0xfc,0xcb,0xdc,0xb8,0xec,0xa1,0xd7,0x0d,0x0a},
1975 {10,0x31,0x20,0xa1,0xfe,0xa1,0xfe,0xa2,0xa9,0x0d,0x0a},
1976 {14,0x31,0x20,0xa2,0xa8,0xa1,0xda,0x74,0x65,0x73,0x74,0xa1,0xdb,0x0d,0x0a}
1987 for (
i = 0;
i < 9;
i++)
1991 outlen = jis_jp[
i][0];
1992 srcsz = unc_jp[
i][0];
1993 hr = pConvertINetUnicodeToMultiByte(
NULL, 50220, &unc_jp[
i][1], &srcsz, output, &destsz);
1996 skip(
"Code page identifier 50220 is not supported\n");
1999 ok(
hr ==
S_OK,
"(%i) Expected S_OK, got %08x\n",
i,
hr);
2000 ok(destsz == outlen,
"(%i) Expected %i, got %i\n",
i,outlen,destsz);
2001 ok(srcsz == unc_jp[
i][0],
"(%i) Expected %i, got %i\n",
i,unc_jp[
i][0],srcsz);
2002 ok(
memcmp(output,&jis_jp[
i][1],destsz)==0,
"(%i) Strings do not match\n",
i);
2007 hr = pConvertINetMultiByteToUnicode(
NULL, 50220, output, &srcsz, outputW,&destsz);
2018 ok(
hr ==
S_OK,
"(%i) Expected S_OK, got %08x\n",
i,
hr);
2019 ok(destsz == unc_jp[
j][0],
"(%i) Expected %i, got %i\n",
i,unc_jp[
j][0],destsz);
2020 ok(srcsz == outlen,
"(%i) Expected %i, got %i\n",
i,outlen,srcsz);
2021 ok(
memcmp(outputW,&unc_jp[
j][1],destsz)==0,
"(%i) Strings do not match\n",
i);
2025 for (
i = 0;
i < 9;
i++)
2028 outlen = sjis_jp[
i][0];
2029 srcsz = unc_jp[
i][0];
2031 hr = pConvertINetUnicodeToMultiByte(
NULL, 932, &unc_jp[
i][1], &srcsz, output, &destsz);
2034 skip(
"Code page identifier 932 is not supported\n");
2037 ok(
hr ==
S_OK,
"(%i) Expected S_OK, got %08x\n",
i,
hr);
2038 ok(destsz == outlen,
"(%i) Expected %i, got %i\n",
i,outlen,destsz);
2039 ok(srcsz == unc_jp[
i][0],
"(%i) Expected %i, got %i\n",
i,unc_jp[
i][0],srcsz);
2040 ok(
memcmp(output,&sjis_jp[
i][1],outlen)==0,
"(%i) Strings do not match\n",
i);
2044 hr = pConvertINetMultiByteToUnicode(
NULL, 932, output, &srcsz, outputW,&destsz);
2046 ok(
hr ==
S_OK,
"(%i) Expected S_OK, got %08x\n",
i,
hr);
2047 ok(destsz == unc_jp[
i][0],
"(%i) Expected %i, got %i\n",
i,unc_jp[
i][0],destsz);
2048 ok(srcsz == outlen,
"(%i) Expected %i, got %i\n",
i,outlen,srcsz);
2049 ok(
memcmp(outputW,&unc_jp[
i][1],destsz)==0,
"(%i) Strings do not match\n",
i);
2053 for (
i = 0;
i < 9;
i++)
2056 outlen = euc_jp[
i][0];
2057 srcsz = unc_jp[
i][0];
2059 hr = pConvertINetUnicodeToMultiByte(
NULL, 51932, &unc_jp[
i][1], &srcsz, output, &destsz);
2062 skip(
"Code page identifier 51932 is not supported\n");
2065 ok(
hr ==
S_OK,
"(%i) Expected S_OK, got %08x\n",
i,
hr);
2066 ok(destsz == outlen,
"(%i) Expected %i, got %i\n",
i,outlen,destsz);
2067 ok(srcsz == unc_jp[
i][0],
"(%i) Expected %i, got %i\n",
i,unc_jp[
i][0],destsz);
2068 ok(
memcmp(output,&euc_jp[
i][1],outlen)==0,
"(%i) Strings do not match\n",
i);
2072 hr = pConvertINetMultiByteToUnicode(
NULL, 51932, output, &srcsz, outputW,&destsz);
2074 ok(
hr ==
S_OK,
"(%i) Expected S_OK, got %08x\n",
i,
hr);
2075 ok(destsz == unc_jp[
i][0],
"(%i) Expected %i, got %i\n",
i,unc_jp[
i][0],destsz);
2076 ok(srcsz == outlen,
"(%i) Expected %i, got %i\n",
i,outlen,srcsz);
2077 ok(
memcmp(outputW,&unc_jp[
i][1],destsz)==0,
"(%i) Strings do not match\n",
i);
2083 srcsz = jis_jp[
i][0];
2084 hr = pConvertINetMultiByteToUnicode(
NULL, 50932, &jis_jp[
i][1], &srcsz, outputW, &destsz);
2087 skip(
"Code page identifier 50932 is not supported\n");
2090 ok(
hr ==
S_OK,
"(%i) Expected S_OK, got %08x\n",
i,
hr);
2091 ok(destsz == unc_jp[
i][0],
"(%i) Expected %i, got %i\n",
i,unc_jp[
i][0],destsz);
2092 ok(srcsz == jis_jp[
i][0],
"(%i) Expected %i, got %i\n",
i,jis_jp[
i][0],srcsz);
2093 ok(
memcmp(outputW,&unc_jp[
i][1],destsz)==0,
"(%i) Strings do not match\n",
i);
2097 srcsz = sjis_jp[
i][0];
2098 hr = pConvertINetMultiByteToUnicode(
NULL, 50932, &sjis_jp[
i][1], &srcsz, outputW, &destsz);
2099 ok(
hr ==
S_OK,
"(%i) Expected S_OK, got %08x\n",
i,
hr);
2100 ok(destsz == unc_jp[
i][0],
"(%i) Expected %i, got %i\n",
i,unc_jp[
i][0],destsz);
2101 ok(srcsz == sjis_jp[
i][0],
"(%i) Expected %i, got %i\n",
i,sjis_jp[
i][0],srcsz);
2102 ok(
memcmp(outputW,&unc_jp[
i][1],destsz)==0,
"(%i) Strings do not match\n",
i);
2109 SCRIPTFONTINFO sfi[1];
2112 hr = IMLangFontLink2_GetScriptFontInfo(font_link, sidAsciiLatin, 0, &nfonts,
NULL);
2114 ok(nfonts,
"unexpected result\n");
2117 hr = IMLangFontLink2_GetScriptFontInfo(font_link, sidAsciiLatin, SCRIPTCONTF_FIXED_FONT, &nfonts,
NULL);
2119 ok(nfonts,
"unexpected result\n");
2122 hr = IMLangFontLink2_GetScriptFontInfo(font_link, sidAsciiLatin, SCRIPTCONTF_PROPORTIONAL_FONT, &nfonts,
NULL);
2124 ok(nfonts,
"unexpected result\n");
2127 memset(sfi, 0,
sizeof(sfi));
2128 hr = IMLangFontLink2_GetScriptFontInfo(font_link, sidAsciiLatin, SCRIPTCONTF_FIXED_FONT, &nfonts, sfi);
2130 ok(nfonts == 1,
"got %u, expected 1\n", nfonts);
2131 ok(sfi[0].scripts != 0,
"unexpected result\n");
2132 ok(sfi[0].wszFont[0],
"unexpected result\n");
2135 memset(sfi, 0,
sizeof(sfi));
2136 hr = IMLangFontLink2_GetScriptFontInfo(font_link, sidAsciiLatin, SCRIPTCONTF_PROPORTIONAL_FONT, &nfonts, sfi);
2138 ok(nfonts == 1,
"got %u, expected 1\n", nfonts);
2139 ok(sfi[0].scripts != 0,
"unexpected result\n");
2140 ok(sfi[0].wszFont[0],
"unexpected result\n");
2161 {1250, sidAsciiLatin},
2162 {1251, sidCyrillic},
2163 {1252, sidAsciiLatin},
2165 {1254, sidAsciiLatin},
2168 {1257, sidAsciiLatin},
2169 {1258, sidAsciiLatin},
2175 hr = IMLangFontLink2_CodePageToScriptID(font_link, cp_sid[
i].
cp, &
sid);
2180 "%u got sid %u for codepage %u, expected %u\n",
i,
sid, cp_sid[
i].
cp, cp_sid[
i].
sid);
2195 memset(&lf, 0,
sizeof(lf));
2201 hr = IMLangFontLink2_GetFontUnicodeRanges(font_link,
NULL, &
count,
NULL);
2204 hr = IMLangFontLink2_GetFontUnicodeRanges(font_link,
hdc,
NULL,
NULL);
2208 hr = IMLangFontLink2_GetFontUnicodeRanges(font_link,
hdc, &
count,
NULL);
2209 ok(
hr ==
S_OK,
"expected S_OK, got 0x%08x\n",
hr);
2210 ok(
count,
"expected count > 0\n");
2214 hr = IMLangFontLink2_GetFontUnicodeRanges(font_link,
hdc, &
count, ur);
2215 ok(
hr ==
S_OK,
"expected S_OK, got 0x%08x\n",
hr);
2218 hr = IMLangFontLink2_GetFontUnicodeRanges(font_link,
hdc, &
count, ur);
2219 ok(
hr ==
S_OK,
"expected S_OK, got 0x%08x\n",
hr);
2233 for (
i = 0;
i < 0xffff;
i++)
2235 hr = IMultiLanguage2_IsCodePageInstallable(ml2,
i);
2244 "code page %u is valid but not installable 0x%08x\n",
i,
hr);
2261 "GetGlobalFontLinkObject() returned %p\n",
unknown);
2267 IMLangConvertCharset *
convert;
2269 UINT cp, src_size, dst_size;
2270 char strA[] =
"abcd";
2282 hr = IMLangConvertCharset_GetSourceCodePage(
convert, &
cp);
2283 ok(
hr ==
S_OK,
"expected S_OK got 0x%08x\n",
hr);
2286 hr = IMLangConvertCharset_GetDestinationCodePage(
convert,
NULL);
2290 hr = IMLangConvertCharset_GetDestinationCodePage(
convert, &
cp);
2291 ok(
hr ==
S_OK,
"expected S_OK got 0x%08x\n",
hr);
2296 ok(
hr ==
S_OK,
"expected S_OK got 0x%08x\n",
hr);
2305 hr = IMLangConvertCharset_DoConversionToUnicode(
convert,
strA, &src_size, buffW, &dst_size);
2308 ok(dst_size == 4,
"got %d\n", dst_size);
2309 ok(buffW[4] == 4,
"got %d\n", buffW[4]);
2310 ok(src_size == 4,
"got %d\n", src_size);
2315 hr = IMLangConvertCharset_DoConversionToUnicode(
convert,
strA, &src_size, buffW, &dst_size);
2317 ok(buffW[0] == 1,
"got %d\n", buffW[0]);
2318 ok(dst_size == 4,
"got %d\n", dst_size);
2319 ok(src_size == 4,
"got %d\n", src_size);
2322 ok(
hr ==
S_OK,
"expected S_OK got 0x%08x\n",
hr);
2324 IMLangConvertCharset_Release(
convert);
2332 ok(
FALSE,
"unexpected call\n");
2338 ok(
FALSE,
"unexpected call\n");
2344 ok(
FALSE,
"unexpected call\n");
2366 ok(
FALSE,
"unexpected call\n");
2373 if (
origin == STREAM_SEEK_SET)
2375 else if (
origin == STREAM_SEEK_CUR)
2377 else if (
origin == STREAM_SEEK_END)
2386 ok(
FALSE,
"unexpected call\n");
2393 ok(
FALSE,
"unexpected call\n");
2399 ok(
FALSE,
"unexpected call\n");
2405 ok(
FALSE,
"unexpected call\n");
2412 ok(
FALSE,
"unexpected call\n");
2419 ok(
FALSE,
"unexpected call\n");
2425 ok(
FALSE,
"unexpected call\n");
2431 ok(
FALSE,
"unexpected call\n");
2458 UINT nb_detected, detected[4];
2459 UINT preferred[] = {1250,1251,1252,65001};
2460 UINT preferred2[] = {1250,1251,1252};
2463 memset(detected, 0,
sizeof(detected));
2464 hr = IMultiLanguage3_DetectOutboundCodePageInIStream(ml,
2465 MLDETECTF_PRESERVE_ORDER, &
test_stream, preferred,
2470 memset(detected, 0,
sizeof(detected));
2471 hr = IMultiLanguage3_DetectOutboundCodePageInIStream(ml,
2472 MLDETECTF_PRESERVE_ORDER, &
test_stream, preferred,
2477 memset(detected, 0,
sizeof(detected));
2478 hr = IMultiLanguage3_DetectOutboundCodePageInIStream(ml,
2479 MLDETECTF_PRESERVE_ORDER, &
test_stream, preferred,
2482 ok(nb_detected == 1,
"got %u\n", nb_detected);
2483 ok(detected[0] == 65001,
"got %u\n", detected[0]);
2486 memset(detected, 0,
sizeof(detected));
2487 hr = IMultiLanguage3_DetectOutboundCodePageInIStream(ml,
2488 MLDETECTF_PRESERVE_ORDER, &
test_stream, preferred,
2491 todo_wine ok(nb_detected == 2,
"got %u\n", nb_detected);
2492 ok(detected[0] == 65001,
"got %u\n", detected[0]);
2493 todo_wine ok(detected[1] == 65000,
"got %u\n", detected[1]);
2496 memset(detected, 0,
sizeof(detected));
2497 hr = IMultiLanguage3_DetectOutboundCodePageInIStream(ml,
2498 MLDETECTF_PRESERVE_ORDER, &
test_stream, preferred,
2501 todo_wine ok(nb_detected == 3,
"got %u\n", nb_detected);
2502 ok(detected[0] == 65001,
"got %u\n", detected[0]);
2503 todo_wine ok(detected[1] == 65000,
"got %u\n", detected[1]);
2504 todo_wine ok(detected[2] == 1200,
"got %u\n", detected[2]);
2507 memset(detected, 0,
sizeof(detected));
2508 hr = IMultiLanguage3_DetectOutboundCodePageInIStream(ml,
2509 MLDETECTF_PRESERVE_ORDER, &
test_stream, preferred,
2512 todo_wine ok(nb_detected == 3,
"got %u\n", nb_detected);
2513 ok(detected[0] == 65001,
"got %u\n", detected[0]);
2514 todo_wine ok(detected[1] == 65000,
"got %u\n", detected[1]);
2515 todo_wine ok(detected[2] == 1200,
"got %u\n", detected[2]);
2516 ok(detected[3] == 0,
"got %u\n", detected[3]);
2519 memset(detected, 0,
sizeof(detected));
2520 hr = IMultiLanguage3_DetectOutboundCodePageInIStream(ml,
2521 MLDETECTF_PRESERVE_ORDER, &
test_stream, preferred2,
2524 todo_wine ok(nb_detected == 3,
"got %u\n", nb_detected);
2525 ok(detected[0] == 65001,
"got %u\n", detected[0]);
2526 todo_wine ok(detected[1] == 65000,
"got %u\n", detected[1]);
2527 todo_wine ok(detected[2] == 1200,
"got %u\n", detected[2]);
2532 static const DWORD VALID_MASK = (
DWORD)(~(MIMECONTF_VALID_NLS | MIMECONTF_VALID));
2543 for (
i = 0;
i < test_data_num;
i++)
2547 ok(
ret ==
S_OK,
"%d: IMultiLanguage2_GetCodePageInfo failed: 0x%08x.\n",
i,
ret);
2556 "%d: got wrong dwFlags expected 0x%x return 0x%x.\n",
2559 "%d: got wrong uiCodePage expected %u return %u.\n",
2563 "%d: got wrong uiFamilyCodePage expected %u return %u.\n",
2568 "%d: got wrong wszWebCharset expected %s return %s.\n",
2572 "%d: got wrong wszHeaderCharset expected %s return %s.\n",
2576 "%d: got wrong wszBodyCharset expected %s return %s.\n",
2583 skip(
"Non-English locale\n");
2589 "%d: got wrong wszDescription expected %s return %s.\n",
2593 "%d: got wrong wszFixedWidthFont expected %s return %s.\n",
2597 "%d: got wrong wszProportionalFont expected %s return %s.\n",
2604static void test_MapFont(IMLangFontLink *font_link, IMLangFontLink2 *font_link2)
2612 DWORD font_codepages;
2626 ret = IMLangFontLink_ResetFontMapping(font_link);
2627 ok(
ret ==
S_OK,
"IMLangFontLink_ResetFontMapping: expected S_OK, got %08x\n",
ret);
2630 ok(
ret ==
E_FAIL,
"IMLangFontLink_MapFont: expected E_FAIL, got %08x\n",
ret);
2631 ret = IMLangFontLink_MapFont(font_link,
NULL, codepages, old_font, &new_font);
2632 ok(
ret ==
E_FAIL,
"IMLangFontLink_MapFont: expected E_FAIL, got %08x\n",
ret);
2633 ret = IMLangFontLink_MapFont(font_link,
hdc, codepages,
NULL, &new_font);
2634 ok(
ret ==
E_FAIL,
"IMLangFontLink_MapFont: expected E_FAIL, got %08x\n",
ret);
2636 ret = IMLangFontLink_MapFont(font_link,
hdc, codepages, old_font,
NULL);
2637 ok(
ret ==
S_OK,
"IMLangFontLink_MapFont: expected S_OK, got %08x\n",
ret);
2638 ret = IMLangFontLink_MapFont(font_link,
hdc, codepages, old_font, &new_font);
2639 ok(
ret ==
S_OK && new_font !=
NULL,
"IMLangFontLink_MapFont: expected S_OK/!NULL, got %08x/%p\n",
ret, new_font);
2640 last_font = new_font;
2641 ret = IMLangFontLink_MapFont(font_link,
hdc, codepages, old_font, &new_font);
2642 ok(
ret ==
S_OK && new_font == last_font,
"IMLangFontLink_MapFont: expected S_OK/%p, got %08x/%p\n", last_font,
ret, new_font);
2644 ret = IMLangFontLink_ReleaseFont(font_link,
NULL);
2645 ok(
ret ==
E_FAIL,
"IMLangFontLink_ReleaseFont: expected E_FAIL, got %08x\n",
ret);
2646 ret = IMLangFontLink_ReleaseFont(font_link, new_font);
2647 ok(
ret ==
S_OK,
"IMLangFontLink_ReleaseFont: expected S_OK, got %08x\n",
ret);
2648 ret = IMLangFontLink_ResetFontMapping(font_link);
2649 ok(
ret ==
S_OK,
"IMLangFontLink_ResetFontMapping: expected S_OK, got %08x\n",
ret);
2653 ret = IMLangFontLink2_ResetFontMapping(font_link2);
2654 ok(
ret ==
S_OK,
"IMLangFontLink2_ResetFontMapping: expected S_OK, got %08x\n",
ret);
2656 ret = IMLangFontLink2_MapFont(font_link2,
NULL, 0, 0,
NULL);
2657 ok(
ret ==
E_FAIL,
"IMLangFontLink2_MapFont: expected E_FAIL, got %08x\n",
ret);
2658 ret = IMLangFontLink2_MapFont(font_link2,
NULL, codepages, ch, &new_font);
2659 ok(
ret ==
E_FAIL,
"IMLangFontLink2_MapFont: expected E_FAIL, got %08x\n",
ret);
2660 ret = IMLangFontLink2_MapFont(font_link2,
hdc, 0, 0,
NULL);
2662 ret = IMLangFontLink2_MapFont(font_link2,
hdc, 0, ch,
NULL);
2665 ret = IMLangFontLink2_MapFont(font_link2,
hdc, 0, ch, &new_font);
2668 "IMLangFontLink2_MapFont: expected S_OK || E_FAIL, got %08x\n",
ret);
2669 ret = IMLangFontLink2_MapFont(font_link2,
hdc, codepages, 0,
NULL);
2670 ok(
ret ==
S_OK,
"IMLangFontLink2_MapFont: expected S_OK, got %08x\n",
ret);
2671 ret = IMLangFontLink2_MapFont(font_link2,
hdc, codepages, 0, &new_font);
2672 ok(
ret ==
S_OK && new_font !=
NULL,
"IMLangFontLink2_MapFont: expected S_OK/!NULL, got %08x/%p\n",
ret, new_font);
2673 last_font = new_font;
2674 ret = IMLangFontLink2_MapFont(font_link2,
hdc, codepages, 0, &new_font);
2675 ok(
ret ==
S_OK && new_font == last_font,
"IMLangFontLink2_MapFont: expected S_OK/%p, got %08x/%p\n", last_font,
ret, new_font);
2677 ret = IMLangFontLink2_ReleaseFont(font_link2,
NULL);
2678 ok(
ret ==
E_FAIL,
"IMLangFontLink2_ReleaseFont: expected E_FAIL, got %08x\n",
ret);
2679 ret = IMLangFontLink2_ReleaseFont(font_link2, new_font);
2680 ok(
ret ==
S_OK,
"IMLangFontLink2_ReleaseFont: expected S_OK, got %08x\n",
ret);
2681 ret = IMLangFontLink2_ResetFontMapping(font_link2);
2682 ok(
ret ==
S_OK,
"IMLangFontLink2_ResetFontMapping: expected S_OK, got %08x\n",
ret);
2685 ret = IMLangFontLink_MapFont(font_link,
hdc, codepages, old_font, &font1);
2687 ret = IMLangFontLink2_MapFont(font_link2,
hdc, codepages, 0, &font2);
2689 ok(font1 !=
NULL && font2 !=
NULL,
"expected !NULL/!NULL, got %p/%p\n", font1, font2);
2690 ok(font1 == font2,
"expected equal, got not equal\n");
2692 IMLangFontLink_GetFontCodePages(font_link,
hdc, font1, &font_codepages);
2693 ok((codepages & (~font_codepages)) != 0 && (codepages & font_codepages) != 0,
2694 "code pages of font is incorrect\n");
2696 IMLangFontLink_ResetFontMapping(font_link);
2697 IMLangFontLink2_ResetFontMapping(font_link2);
2703 IMultiLanguage *iML =
NULL;
2704 IMultiLanguage2 *iML2 =
NULL;
2705 IMultiLanguage3 *iML3 =
NULL;
2706 IMLangFontLink *iMLFL =
NULL;
2707 IMLangFontLink2 *iMLFL2 =
NULL;
2722 trace(
"IMultiLanguage\n");
2724 &IID_IMultiLanguage, (
void **)&iML);
2725 if (
ret !=
S_OK || !iML)
return;
2730 IMultiLanguage_Release(iML);
2734 trace(
"IMultiLanguage2\n");
2736 &IID_IMultiLanguage2, (
void **)&iML2);
2737 if (
ret !=
S_OK || !iML2)
return;
2756 test_EnumScripts(iML2, SCRIPTCONTF_SCRIPT_USER | SCRIPTCONTF_SCRIPT_HIDE | SCRIPTCONTF_SCRIPT_SYSTEM);
2759 ok(
ret ==
S_OK,
"IMultiLanguage2_IsConvertible(CP_UTF8 -> CP_UNICODE) = %08x\n",
ret);
2761 ok(
ret ==
S_OK,
"IMultiLanguage2_IsConvertible(CP_UNICODE -> CP_UTF8) = %08x\n",
ret);
2768 IMultiLanguage2_Release(iML2);
2773 &IID_IMLangFontLink, (
void **)&iMLFL);
2774 if (
ret !=
S_OK || !iMLFL)
return;
2780 &IID_IMLangFontLink2, (
void **)&iMLFL2);
2781 if (
ret !=
S_OK || !iMLFL2)
return;
2788 IMLangFontLink_Release(iMLFL);
2789 IMLangFontLink2_Release(iMLFL2);
2791 trace(
"IMultiLanguage3\n");
2793 &IID_IMultiLanguage3, (
void **)&iML3);
2797 IMultiLanguage3_Release(iML3);
char * strcat(char *DstString, const char *SrcString)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
int strncmp(const char *String1, const char *String2, ACPI_SIZE Count)
static WCHAR unknown[MAX_STRING_RESOURCE_LEN]
const char * wine_dbgstr_wn(const WCHAR *str, int n)
#define GetProcAddress(x, y)
#define HeapFree(x, y, z)
#define WideCharToMultiByte
#define MultiByteToWideChar
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
LCID WINAPI GetThreadLocale(void)
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)
LCID WINAPI GetSystemDefaultLCID(void)
HRESULT WINAPI GetGlobalFontLinkObject(void **unknown)
static const WCHAR asciiW[]
static IMultiLanguage2 * mlang
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
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 memcpy(s1, s2, n)
static void test_GetFontUnicodeRanges(void)
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
static HMODULE MODULEINFO DWORD cb
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 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)
#define todo_wine_if(is_todo)
#define LOCALE_USER_DEFAULT
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
#define SUBLANG_GERMAN_SWISS
#define SUBLANG_ENGLISH_CAN
#define SUBLANG_ENGLISH_UK
#define LANGIDFROMLCID(l)
#define SUBLANG_GERMAN_AUSTRIAN
#define SUBLANG_ENGLISH_US
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)
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
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)