313 {{
SCRIPT_UNDEFINED, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
314 {
LANG_NEUTRAL, 0, 0, 0, 0,
ANSI_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
316 {{
Script_Latin, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
317 {
LANG_ENGLISH, 0, 0, 0, 0,
ANSI_CHARSET, 0, 0, 0, 0, 0, 0, 1, 0, 0},
319 {{
Script_CR, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
320 {
LANG_NEUTRAL, 0, 0, 0, 0,
ANSI_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
322 {{
Script_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
323 {
LANG_ENGLISH, 1, 0, 0, 0,
ANSI_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
324 0x00000000,
L"Microsoft Sans Serif"},
325 {{
Script_Control, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
326 {
LANG_ENGLISH, 0, 1, 0, 0,
ANSI_CHARSET, 1, 0, 0, 0, 0, 0, 1, 0, 0},
328 {{
Script_Punctuation, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
329 {
LANG_NEUTRAL, 0, 0, 0, 0,
ANSI_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
330 0x00000000,
L"Microsoft Sans Serif"},
331 {{
Script_Arabic, 1, 1, 0, 0, 0, 0, { 1,0,0,0,0,0,0,0,0,0,0}},
332 {
LANG_ARABIC, 0, 1, 0, 0,
ARABIC_CHARSET, 0, 0, 0, 0, 0, 0, 1, 1, 0},
334 {{
Script_Arabic_Numeric, 0, 1, 0, 0, 0, 0, { 2,0,0,0,0,0,0,0,0,0,0}},
335 {
LANG_ARABIC, 1, 1, 0, 0,
ARABIC_CHARSET, 0, 0, 0, 0, 0, 0, 1, 0, 0},
337 {{
Script_Hebrew, 1, 1, 0, 0, 0, 0, { 1,0,0,0,0,0,0,0,0,0,0}},
338 {
LANG_HEBREW, 0, 1, 0, 1,
HEBREW_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
340 {{
Script_Syriac, 1, 1, 0, 0, 0, 0, { 1,0,0,0,0,0,0,0,0,0,0}},
341 {
LANG_SYRIAC, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 1, 0, 0, 1, 0},
343 {{
Script_Persian, 0, 1, 0, 0, 0, 0, { 2,0,0,0,0,0,0,0,0,0,0}},
344 {
LANG_PERSIAN, 1, 1, 0, 0,
ARABIC_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
346 {{
Script_Thaana, 1, 1, 0, 0, 0, 0, { 1,0,0,0,0,0,0,0,0,0,0}},
347 {
LANG_DIVEHI, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
349 {{
Script_Greek, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
350 {
LANG_GREEK, 0, 0, 0, 0,
GREEK_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
352 {{
Script_Cyrillic, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
353 {
LANG_RUSSIAN, 0, 0, 0, 0,
RUSSIAN_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
355 {{
Script_Armenian, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
356 {
LANG_ARMENIAN, 0, 0, 0, 0,
ANSI_CHARSET, 0, 0, 0, 0, 0, 0, 1, 0, 0},
358 {{
Script_Georgian, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
359 {
LANG_GEORGIAN, 0, 0, 0, 0,
ANSI_CHARSET, 0, 0, 0, 0, 0, 0, 1, 0, 0},
361 {{
Script_Sinhala, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
362 {
LANG_SINHALESE, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
364 {{
Script_Tibetan, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
365 {
LANG_TIBETAN, 0, 1, 1, 1,
DEFAULT_CHARSET, 0, 0, 1, 0, 1, 0, 0, 0, 0},
367 {{
Script_Tibetan_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
368 {
LANG_TIBETAN, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
370 {{
Script_Phags_pa, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
371 {
LANG_MONGOLIAN, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
373 {{
Script_Thai, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
374 {
LANG_THAI, 0, 1, 1, 1,
THAI_CHARSET, 0, 0, 1, 0, 1, 0, 0, 0, 1},
376 {{
Script_Thai_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
377 {
LANG_THAI, 1, 1, 0, 0,
THAI_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
379 {{
Script_Lao, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
380 {
LANG_LAO, 0, 1, 1, 1,
DEFAULT_CHARSET, 0, 0, 1, 0, 1, 0, 0, 0, 0},
382 {{
Script_Lao_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
383 {
LANG_LAO, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
385 {{
Script_Devanagari, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
386 {
LANG_HINDI, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 1, 0, 0, 0, 0},
388 {{
Script_Devanagari_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
389 {
LANG_HINDI, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
391 {{
Script_Bengali, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
392 {
LANG_BENGALI, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 1, 0, 0, 0, 0},
394 {{
Script_Bengali_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
395 {
LANG_BENGALI, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
397 {{
Script_Bengali_Currency, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
398 {
LANG_BENGALI, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
400 {{
Script_Gurmukhi, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
401 {
LANG_PUNJABI, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 1, 0, 0, 0, 0},
403 {{
Script_Gurmukhi_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
404 {
LANG_PUNJABI, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
406 {{
Script_Gujarati, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
407 {
LANG_GUJARATI, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 1, 0, 0, 0, 0},
409 {{
Script_Gujarati_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
410 {
LANG_GUJARATI, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
412 {{
Script_Gujarati_Currency, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
413 {
LANG_GUJARATI, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
415 {{
Script_Oriya, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
416 {
LANG_ORIYA, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 1, 0, 0, 0, 0},
418 {{
Script_Oriya_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
419 {
LANG_ORIYA, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
421 {{
Script_Tamil, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
422 {
LANG_TAMIL, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 1, 0, 0, 0, 0},
424 {{
Script_Tamil_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
425 {
LANG_TAMIL, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
427 {{
Script_Telugu, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
428 {
LANG_TELUGU, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 1, 0, 0, 0, 0},
430 {{
Script_Telugu_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
431 {
LANG_TELUGU, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
433 {{
Script_Kannada, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
434 {
LANG_KANNADA, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 1, 0, 0, 0, 0},
436 {{
Script_Kannada_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
437 {
LANG_KANNADA, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
439 {{
Script_Malayalam, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
440 {
LANG_MALAYALAM, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 1, 0, 0, 0, 0},
442 {{
Script_Malayalam_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
443 {
LANG_MALAYALAM, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
445 {{
Script_Diacritical, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
446 {
LANG_ENGLISH, 0, 1, 0, 1,
ANSI_CHARSET, 0, 0, 0, 0, 0, 1, 1, 0, 0},
448 {{
Script_Punctuation2, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
449 {
LANG_ENGLISH, 0, 0, 0, 0,
ANSI_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
451 {{
Script_Numeric2, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
452 {
LANG_ENGLISH, 1, 0, 0, 0,
ANSI_CHARSET, 0, 0, 0, 0, 0, 0, 1, 0, 0},
454 {{
Script_Myanmar, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
455 {0x55, 0, 1, 1, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 1, 0, 0, 0, 0},
457 {{
Script_Myanmar_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
458 {0x55, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
460 {{
Script_Tai_Le, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
461 {0, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
463 {{
Script_New_Tai_Lue, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
464 {0, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
465 MS_MAKE_TAG(
't',
'a',
'l',
'u'),
L"Microsoft New Tai Lue"},
466 {{
Script_New_Tai_Lue_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
467 {0, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
468 MS_MAKE_TAG(
't',
'a',
'l',
'u'),
L"Microsoft New Tai Lue"},
469 {{
Script_Khmer, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
470 {0x53, 0, 1, 1, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 1, 0, 0, 0, 0},
472 {{
Script_Khmer_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
473 {0x53, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
475 {{
Script_CJK_Han, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
476 {
LANG_ENGLISH, 0, 0, 0, 0,
ANSI_CHARSET, 0, 0, 0, 0, 0, 0, 1, 0, 0},
478 {{
Script_Ideograph, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
479 {
LANG_ENGLISH, 0, 0, 0, 0,
ANSI_CHARSET, 0, 0, 0, 0, 0, 0, 1, 0, 0},
481 {{
Script_Bopomofo, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
482 {
LANG_ENGLISH, 0, 0, 0, 0,
ANSI_CHARSET, 0, 0, 0, 0, 0, 0, 1, 0, 0},
484 {{
Script_Kana, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
485 {
LANG_ENGLISH, 0, 0, 0, 0,
ANSI_CHARSET, 0, 0, 0, 0, 0, 0, 1, 0, 0},
487 {{
Script_Hangul, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
488 {
LANG_KOREAN, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 1, 0, 0},
490 {{
Script_Yi, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
491 {
LANG_ENGLISH, 0, 0, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 1, 0, 0},
493 {{
Script_Ethiopic, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
494 {0x5e, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
496 {{
Script_Ethiopic_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
497 {0x5e, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
499 {{
Script_Mongolian, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
500 {
LANG_MONGOLIAN, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
502 {{
Script_Mongolian_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
503 {
LANG_MONGOLIAN, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
505 {{
Script_Tifinagh, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
506 {0, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
508 {{
Script_NKo, 1, 1, 0, 0, 0, 0, { 1,0,0,0,0,0,0,0,0,0,0}},
509 {0, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
511 {{
Script_Vai, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
512 {0, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
514 {{
Script_Vai_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
515 {0, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
517 {{
Script_Cherokee, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
518 {0x5c, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
520 {{
Script_Canadian, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
521 {0x5d, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
523 {{
Script_Ogham, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
524 {0, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
526 {{
Script_Runic, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
527 {0, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
529 {{
Script_Braille, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
530 {
LANG_ENGLISH, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
532 {{
Script_Surrogates, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
533 {
LANG_ENGLISH, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 1, 0, 0},
535 {{
Script_Private, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
536 {0, 0, 0, 0, 0,
DEFAULT_CHARSET, 0, 1, 0, 0, 0, 0, 1, 0, 0},
538 {{
Script_Deseret, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
539 {0, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
541 {{
Script_Osmanya, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
542 {0, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
544 {{
Script_Osmanya_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
545 {0, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
547 {{
Script_MathAlpha, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
548 {0, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
550 {{
Script_Hebrew_Currency, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
551 {
LANG_HEBREW, 0, 1, 0, 0,
HEBREW_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
553 {{
Script_Vietnamese_Currency, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
554 {
LANG_VIETNAMESE, 0, 0, 0, 0,
VIETNAMESE_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
556 {{
Script_Thai_Currency, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
557 {
LANG_THAI, 0, 1, 0, 0,
THAI_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
611 0, 0, { (
DWORD_PTR)(__FILE__
": script_cache") }
657 SIZE_T max_capacity, new_capacity;
660 if (
count <= *capacity)
664 if (
count > max_capacity)
667 new_capacity =
max(1, *capacity);
668 while (new_capacity <
count && new_capacity <= max_capacity / 2)
670 if (new_capacity <
count)
671 new_capacity =
count;
673 new_elements =
realloc(*elements, new_capacity *
size);
676 memset( (
char *)new_elements + *capacity *
size, 0, (new_capacity - *capacity) *
size );
678 *elements = new_elements;
679 *capacity = new_capacity;
698 static const WCHAR chars[4] = {0x0020, 0x200B, 0xF71B, 0x0640};
716 else if (gi[1] != 0xFFFF)
718 else if (gi[0] != 0xFFFF)
755 if (!
block)
return 0;
796 if (*psc)
return S_OK;
810 if (!
memcmp(&sc->
lf, &lf,
sizeof(lf)))
847 if (sc != *psc && !
memcmp(&sc->
lf, &lf,
sizeof(lf)))
859 TRACE(
"<- %p\n", sc);
867 return mirror ? mirror :
ch;
945 return range->numericScript;
947 return range->punctScript;
948 return range->script;
962 if (!
find->ascending)
973 if (pwLogClust[0] < pwLogClust[
cChars-1])
984 for (
k = (
ptr - pwLogClust)-1;
k >= 0 && pwLogClust[
k] ==
target;
k--)
1104 TRACE(
"%p,%p,%p\n",
hdc, psc, sfp);
1204 TRACE(
"%p, %p, %p\n", sds, sc,
ss);
1216 ss->fDigitSubstitute = 0;
1274#define Numeric_space 0x0020
1289 WORD baselayout = 0;
1296 TRACE(
"%s,%d,%d,%p,%p,%p,%p\n",
debugstr_wn(pwcInChars, cInChars), cInChars, cMaxItems,
1297 psControl, psState, pItems, pcItems);
1299 if (!pwcInChars || !cInChars || !pItems || cMaxItems < 2)
1302 if (!(scripts =
calloc(cInChars,
sizeof(*scripts))))
1305 for (
i = 0;
i < cInChars;
i++)
1314 scripts[
i] = scripts[
i-1];
1319 if ((pwcInChars[
i] == 0x964 || pwcInChars[
i] ==0x965) && last_indic !=
Script_Undefined)
1320 scripts[
i] = last_indic;
1329 if (!forceLevels && ((pwcInChars[
i] >= 0x200B && pwcInChars[
i] <= 0x200F) ||
1330 (pwcInChars[
i] >= 0x202A && pwcInChars[
i] <= 0x202E) ||
1331 (pwcInChars[
i] >= 0x2066 && pwcInChars[
i] <= 0x2069)))
1341 scripts[
i] = scripts[
i-1];
1347 for (
j =
i-1;
j >= 0 && scripts[
j] == first_script && pwcInChars[
j] !=
Numeric_space;
j--)
1357 scripts[
j] = scripts[
i];
1362 scripts[
i] = scripts[
j];
1368 for (
i = 0;
i < cInChars;
i++)
1371 if (
i > 0 && (pwcInChars[
i] ==
ZWJ || pwcInChars[
i] ==
ZWNJ || pwcInChars[
i] ==
ZWSP))
1374 if (
i+1 == cInChars)
1375 scripts[
i] = scripts[
i-1];
1378 for (
j =
i+1;
j < cInChars;
j++)
1380 if (pwcInChars[
j] !=
ZWJ && pwcInChars[
j] !=
ZWNJ
1383 scripts[
i] = scripts[
j];
1391 if (psState && psControl)
1396 if (!(overrides =
calloc(cInChars,
sizeof(*overrides))))
1399 if (!(layout_levels =
calloc(cInChars,
sizeof(*layout_levels))))
1409 if (
odd(layout_levels[0]))
1411 else for (
i = 0;
i < cInChars;
i++)
1412 if (layout_levels[
i]!=layout_levels[0])
1427 baselayout = layout_levels[0];
1428 for (
i = 0;
i < cInChars;
i++)
1431 if (
i >= cInChars && !
odd(baselevel) && !
odd(psState->
uBidiLevel) && !forceLevels)
1435 free(layout_levels);
1438 layout_levels =
NULL;
1442 if (!(strength =
calloc(cInChars,
sizeof(*strength))))
1456 for (
i = 0;
i < cInChars;
i++)
1458 if (
i > 0 &&
i < cInChars-1 &&
1460 wcschr(
L"#$%+,-./:\x2212\x2044\x00a0", pwcInChars[
i]))
1464 scripts[
i] = scripts[
i+1];
1466 strength[
i] = strength[
i-1];
1469 else if (
wcschr(
L"#$%+-/\x2212\x2044", pwcInChars[
i]))
1472 for (
j =
i+1;
j < cInChars;
j++)
1478 scripts[
i] = scripts[
j];
1480 strength[
i] = strength[
i-1];
1483 else if (pwcInChars[
i] != pwcInChars[
j])
break;
1489 for (
i = 0;
i < cInChars;
i++)
1499 if (
i > 0 && (pwcInChars[
i] ==
ZWJ || pwcInChars[
i] ==
ZWNJ || pwcInChars[
i] ==
ZWSP))
1503 strength[
i] = strength[
i-1];
1506 if (pwcInChars[
j] !=
ZWJ && pwcInChars[
j] !=
ZWNJ
1509 strength[
i] = strength[
j];
1517 for (
i = 0;
i < cInChars;
i++)
1522 for (
j =
i;
j > 0;
j--)
1528 scripts[
i] = scripts[
j];
1529 strength[
i] = strength[
j];
1538 for (
j =
i;
j < cInChars;
j++)
1544 scripts[
i] = scripts[
j];
1545 strength[
i] = strength[
j];
1559 if (
cnt == cInChars)
1562 New_Script = scripts[
cnt];
1580 layoutRTL =
odd(layout_levels[
cnt]);
1592 else if (!pItems[
index].
a.s.uBidiLevel || (overrides && overrides[
cnt]))
1594 if (pItems[
index].
a.s.uBidiLevel != baselevel)
1596 layoutRTL =
odd(baselayout);
1605 TRACE(
"New_Level=%i New_Strength=%i New_Script=%d, eScript=%d index=%d cnt=%d iCharPos=%d\n",
1612 New_Script = scripts[
cnt];
1619 New_Script = scripts[
cnt+
j];
1621 New_Script = scripts[
cnt];
1641 TRACE(
"Strength break (%i/%i)\n",
str,strength[
cnt]);
1647 TRACE(
"Script break(%i/%i)\n",pItems[
index].
a.eScript,New_Script);
1653 layoutRTL =
odd(layout_levels[
cnt]);
1660 TRACE(
"New_Level = %i, New_Strength = %i, New_Script=%d, eScript=%d\n",
levels?
levels[
cnt]:-1, strength?strength[
cnt]:
str, New_Script, pItems[
index].
a.eScript);
1663 if (
index+1 > cMaxItems)
1679 if (layout_levels[
cnt] == 0)
1682 layoutRTL = (layoutRTL ||
odd(layout_levels[
cnt]));
1690 else if (!pItems[
index].
a.s.uBidiLevel || (overrides && overrides[
cnt]))
1692 if (pItems[
index].
a.s.uBidiLevel != baselevel)
1710 if (
index + 1 > cMaxItems)
goto nomemory;
1716 if (pcItems) *pcItems =
index;
1724 free(layout_levels);
1753 return _ItemizeInternal(pwcInChars, cInChars, cMaxItems, psControl, psState, pItems, pScriptTags, pcItems);
1778 return _ItemizeInternal(pwcInChars, cInChars, cMaxItems, psControl, psState, pItems,
NULL, pcItems);
1814 defWidth = (32 * pTabdef->
iScale) / 4;
1819 for (; cTabStops>0 ; lpTabPos++, cTabStops--)
1821 int position = *lpTabPos;
1823 position = -1 * position;
1825 position = (position * pTabdef->
iScale) / 4;
1829 if( nTabOrg + position > current_x)
1834 x = (nTabOrg + position) - current_x;
1839 FIXME(
"Negative tabstop\n");
1844 if ((!cTabStops) && (defWidth > 0))
1845 x =((((current_x - nTabOrg) / defWidth)+1) * defWidth) - current_x;
1846 else if ((!cTabStops) && (defWidth < 0))
1847 FIXME(
"TODO: Negative defWidth\n");
1916 int i, num_items = cString + 1;
1921 TRACE(
"(%p,%p,%d,%d,%d,0x%lx,%d,%p,%p,%p,%p,%p,%p)\n",
1923 psControl, psState, piDx, pTabdef, pbInClass, pssa);
1927 FIXME(
"Only Unicode strings are supported\n");
1933 if (!(analysis =
calloc(1,
sizeof(*analysis))))
1949 sControl = *psControl;
1955 if (!(iString =
calloc(cString,
sizeof(*iString))))
1960 for (
i = 0;
i < cString;
i++)
1990 if (!(BidiLevel =
calloc(analysis->
numItems,
sizeof(*BidiLevel))))
2007 WORD *pwLogClust =
calloc(cChar,
sizeof(*pwLogClust));
2008 int *piAdvance =
NULL;
2011 int numGlyphsReturned;
2012 HFONT originalFont = 0x0;
2068 if (!glyphs || !piAdvance || !psva || !pGoffset)
2075 &analysis->
pItem[
i].
a, glyphs, pwLogClust, psva, &numGlyphsReturned);
2083 piAdvance, pGoffset, &analysis->
glyphs[
i].
abc);
2103 for (tabi = 0; tabi < cChar; tabi++)
2107 tab_x+=piAdvance[tabi];
2148 if (pva[glyph].fClusterStart)
2173 INT runStart, runEnd;
2175 HFONT oldFont = 0x0;
2179 TRACE(
"(%p,%d,%d,%d,%d,%d, 0x%1x, %d, %d)\n",
2180 ssa, iX, iY, iItem, cStart, cEnd, uOptions, fSelected, fDisabled);
2184 if ((cStart >= 0 && analysis->
pItem[iItem+1].
iCharPos <= cStart) ||
2216 if (cEnd >= 0 && cEnd < analysis->pItem[iItem+1].iCharPos)
2220 crc.
left = iX + off_x;
2224 if (cStart >=0 && runStart)
2228 crc.
left = iX + off_x;
2266 clust_glyph = iGlyph +
cGlyphs;
2272 while(clust_glyph < analysis->glyphs[iItem].
numGlyphs &&
2282 iY, uOptions, &crc, &analysis->
pItem[iItem].
a,
NULL, 0,
2287 TRACE(
"ScriptTextOut hr=%08lx\n",
hr);
2336 TRACE(
"(%p,%d,%d,0x%08x,%s,%d,%d,%d)\n",
2349 if (iMinSel < iMaxSel && (iMinSel > 0 || iMaxSel > 0))
2351 if (iMaxSel > 0 && iMinSel < 0)
2374 TRACE(
"(%p), %d, %d, (%p)\n", ssa, icp, fTrailing, pX);
2376 if (!ssa || !pX)
return S_FALSE;
2406 if (icp >= analysis->
pItem[
i+1].
iCharPos || icp < analysis->pItem[
i].iCharPos)
2436 TRACE(
"(%p), %d, (%p), (%p)\n", ssa, iX, piCh, piTrailing);
2438 if (!ssa || !piCh || !piTrailing)
return S_FALSE;
2447 *piTrailing =
FALSE;
2487 &analysis->
pItem[
i].
a, piCh, piTrailing);
2495 *piTrailing =
FALSE;
2519 TRACE(
"(%p)\n", pssa);
2551 int direction,
int* iCluster,
int *check_out)
2559 if (pwLogClust[
check] == clust)
2562 if (iCluster && *iCluster == -1)
2581 if (pwLogClust[0] > pwLogClust[
cChars-1])
2582 log_clust_max = pwLogClust[0];
2584 log_clust_max = pwLogClust[
cChars-1];
2586 if (glyph > log_clust_max)
2594 if (glyph > log_clust_max)
2610 const WORD *pwLogClust,
2612 const int *piAdvance,
2621 float special_size = 0.0;
2626 TRACE(
"(%d,%d,%d,%d,%p,%p,%p,%p,%p)\n",
2627 iCP, fTrailing,
cChars,
cGlyphs, pwLogClust, psva, piAdvance,
2638 int max_clust = pwLogClust[0];
2641 if (pwLogClust[
item] > max_clust)
2643 ERR(
"We do not handle non reversed clusters properly\n");
2649 iMaxPos += piAdvance[
item];
2655 if (iSpecial == -1 && (iCluster == -1 || iCluster+clust_size <=
item))
2658 int clust = pwLogClust[
item];
2669 for (glyph = clust; glyph <
cGlyphs; glyph++)
2673 iPosX += special_size;
2680 if (clust_size == 0)
2687 else if (iSpecial != -1)
2688 iPosX += special_size;
2695 if (clust_size == 0)
2699 iPosX += adv / (
float)clust_size;
2705 iPosX = iMaxPos - iPosX;
2711 TRACE(
"*piX=%d\n", *piX);
2723 if (pwLogClust[
i] == cluster_index)
2725 if (!
size && start_index)
2733 else if (
size)
break;
2763 for (glyph_start = -1, glyph_end = -1; i < cChars && i >= 0 && (glyph_start < 0 || glyph_end < 0);
i+=
direction)
2765 if (glyph_start < 0 && pwLogClust[
i] != cluster)
continue;
2766 if (pwLogClust[
i] == cluster && glyph_start < 0) glyph_start = pwLogClust[
i];
2767 if (glyph_start >= 0 && glyph_end < 0 && pwLogClust[
i] != cluster) glyph_end = pwLogClust[
i];
2777 FIXME(
"multi-glyph reversed clusters found\n");
2778 glyph_end = glyph_start + 1;
2783 for (
i = glyph_start+1;
i< glyph_end;
i++)
2785 if (psva[
i].fClusterStart)
2792 for (
advance = 0,
i = glyph_start;
i < glyph_end;
i++)
2813 const WORD *pwLogClust,
2815 const int *piAdvance,
2823 int glyph_index, cluster_index;
2826 TRACE(
"(%d,%d,%d,%p,%p,%p,%p,%p,%p)\n",
2828 psa, piCP, piTrailing);
2852 int max_clust = pwLogClust[0];
2854 if (pwLogClust[
i] > max_clust)
2856 FIXME(
"We do not handle non reversed clusters properly\n");
2864 for (glyph_index = -1, iPosX = iX; iPosX >=0 && glyph_index <
cGlyphs; iPosX -= piAdvance[glyph_index+1], glyph_index++)
2869 for (glyph_index = -1, iPosX = iX; iPosX > 0 && glyph_index <
cGlyphs; iPosX -= piAdvance[glyph_index+1], glyph_index++)
2873 TRACE(
"iPosX %i -> glyph_index %i (%i)\n", iPosX, glyph_index,
cGlyphs);
2876 if (glyph_index >= 0 && glyph_index <
cGlyphs)
2880 for (
i = 0, cluster_index = pwLogClust[0];
i <
cChars && pwLogClust[
i] <= glyph_index; cluster_index=pwLogClust[
i++])
2883 for (
i = 0, cluster_index = pwLogClust[0]; i < cChars && pwLogClust[i] >= glyph_index; cluster_index=pwLogClust[
i++])
2886 TRACE(
"cluster_index %i\n", cluster_index);
2888 if (direction < 0 && iPosX >= 0 && glyph_index != cluster_index)
2898 TRACE(
"first char index %i\n",
i);
2902 if (glyph_index != cluster_index ||
2903 (
direction > 0 &&
abs(iPosX) <= (piAdvance[glyph_index] / 2)) ||
2904 (
direction < 0 &&
abs(iPosX) >= (piAdvance[glyph_index] / 2)))
2918 for (adv = iPosX, part_index = cluster_index; part_index <= glyph_index; part_index++)
2919 adv += piAdvance[part_index];
2920 if (adv > iX) adv = iX;
2922 TRACE(
"Multi-char cluster, no snap\n");
2924 TRACE(
"advance %i divides into %f per char\n", cluster_advance, cluster_part_width);
2927 for (part_index = 0; adv >= 0; adv-=cluster_part_width, part_index++)
2929 if (part_index) part_index--;
2933 for (part_index = 0; adv > 0; adv-=cluster_part_width, part_index++)
2937 adv += cluster_part_width;
2942 TRACE(
"base_char %i part_index %i, leftover advance %f\n",
i, part_index, adv);
2950 if ((
direction > 0 &&
fabs(adv) <= (cluster_part_width / 2.0)) ||
2951 (
direction < 0 && adv &&
fabs(adv) >= (cluster_part_width / 2.0)))
2957 if ((
direction > 0 &&
abs(iPosX) <= (piAdvance[glyph_index] / 2)) ||
2958 (
direction < 0 &&
abs(iPosX) >= (piAdvance[glyph_index] / 2)))
2965 TRACE(
"Point falls outside of string\n");
2966 if (glyph_index < 0)
2984 TRACE(
"*piCP=%d\n", *piCP);
2985 TRACE(
"*piTrailing=%d\n", *piTrailing);
3037 if (!chars ||
len < 0)
3085 int cMaxGlyphs,
WORD *pwLogClust,
3094 static int once = 0;
3096 TRACE(
"(%p, %p, %p, %s, %s, %p, %p, %d, %s, %d, %d, %p, %p, %p, %p, %p )\n",
3100 cChars, cMaxGlyphs, pwLogClust, pCharProps, pwOutGlyphs, pOutGlyphProps, pcGlyphs);
3102 if (psa)
TRACE(
"psa values: %d, %d, %d, %d, %d, %d, %d\n", psa->
eScript, psa->
fRTL, psa->
fLayoutRTL,
3105 if (!pOutGlyphProps || !pcGlyphs || !pCharProps)
return E_INVALIDARG;
3109 if(!once++)
FIXME(
"Ranges not supported yet\n");
3115 if (!pwLogClust)
return E_FAIL;
3136 pwLogClust[
i] =
idx;
3147 for (
i = 0,
g = 0, cluster = 0;
i <
cChars;
i++)
3161 chInput = pwcChars[
idx];
3162 rChars[
i] = chInput;
3166 rChars[
i] = pwcChars[
idx];
3191 pwLogClust[
idx] = (
rtl)?pwLogClust[
idx+1]:pwLogClust[
idx-1];
3214 if (pwcChars[
i] == 0x0009 || pwcChars[
i] ==
ZWSP || pwcChars[
i] ==
ZWNJ || pwcChars[
i] ==
ZWJ)
3216 pwOutGlyphs[pwLogClust[
i]] = ((
ScriptCache *)*psc)->sfp.wgBlank;
3224 TRACE(
"no glyph translation\n");
3230 pwOutGlyphs[
i] = pwcChars[
idx];
3240 pwOutGlyphs[
i] = 0x20;
3247 if (pwcChars[
idx] == 0x0009 || pwcChars[
idx] == 0x000A ||
3248 pwcChars[
idx] == 0x000D || pwcChars[
idx] >= 0x001C)
3283 int cChars,
int cMaxGlyphs,
3298 if (!(glyphProps =
calloc(cMaxGlyphs,
sizeof(*glyphProps))))
3304 hr =
ScriptShapeOpenType(
hdc, psc, psa,
scriptInformation[psa->
eScript].
scriptTag, 0,
NULL,
NULL, 0, pwcChars,
cChars, cMaxGlyphs, pwLogClust, charProps, pwOutGlyphs, glyphProps, pcGlyphs);
3308 for (
i = 0;
i < *pcGlyphs;
i++)
3309 psva[
i] = glyphProps[
i].sva;
3351 int cRanges,
const WCHAR *pwcChars,
WORD *pwLogClust,
3360 static int once = 0;
3362 TRACE(
"(%p, %p, %p, %s, %s, %p, %p, %d, %s, %p, %p, %d, %p, %p, %d, %p %p %p)\n",
3366 pwLogClust, pCharProps,
cChars, pwGlyphs, pGlyphProps,
cGlyphs, piAdvance,
3371 if (!pGoffset)
return E_FAIL;
3374 if (!once++)
FIXME(
"Ranges not supported yet\n");
3386 pGoffset[
i].
du = pGoffset[
i].
dv = 0;
3388 if (pGlyphProps[
i].sva.fZeroWidth)
3391 if (piAdvance) piAdvance[
i] = 0;
3402 glyph = pwGlyphs[
i];
3442 if (piAdvance) piAdvance[
i] = abc.
abcA + abc.
abcB + abc.
abcC;
3447 if (pABC)
TRACE(
"Total for run: abcA=%d, abcB=%d, abcC=%d\n", pABC->
abcA, pABC->
abcB, pABC->
abcC);
3479 TRACE(
"(%p, %p, %p, %d, %p, %p, %p, %p, %p)\n",
hdc, psc, pwGlyphs,
cGlyphs, psva, psa,
3480 piAdvance, pGoffset, pABC);
3483 if (!pGoffset)
return E_FAIL;
3489 glyphProps[
i].sva = psva[
i];
3491 hr =
ScriptPlaceOpenType(
hdc, psc, psa,
scriptInformation[psa->
eScript].
scriptTag, 0,
NULL,
NULL, 0,
NULL,
NULL,
NULL, 0, pwGlyphs, glyphProps,
cGlyphs, piAdvance, pGoffset, pABC);
3521 TRACE(
"(%p,%p,%s,%d,0x%lx,%p)\n",
hdc, psc,
debugstr_wn(pwcInChars,
cChars),
3534 inChar = pwcInChars[
i];
3541 if (glyph == 0xffff)
3559 int iReserved,
const WORD *pwGlyphs,
int cGlyphs,
const int *piAdvance,
3560 const int *piJustify,
const GOFFSET *pGoffset)
3565 WORD *reordered_glyphs = (
WORD *)pwGlyphs;
3567 TRACE(
"(%p, %p, %d, %d, %08x, %s, %p, %p, %d, %p, %d, %p, %p, %p)\n",
3568 hdc, psc,
x,
y, fuOptions,
wine_dbgstr_rect(
lprc), psa, pwcReserved, iReserved, pwGlyphs,
cGlyphs,
3569 piAdvance, piJustify, pGoffset);
3572 if (!piAdvance || !psa || !pwGlyphs)
return E_INVALIDARG;
3576 fuOptions |= ETO_IGNORELANGUAGE;
3578 fuOptions |= ETO_GLYPH_INDEX;
3586 if (!(reordered_glyphs =
calloc(
cGlyphs,
sizeof(*reordered_glyphs))))
3593 reordered_glyphs[
i] = pwGlyphs[
cGlyphs - 1 -
i];
3600 lpDx[
i * 2] = piAdvance[orig_index];
3601 lpDx[
i * 2 + 1] = 0;
3607 x += pGoffset[orig_index].
du *
dir;
3608 y += pGoffset[orig_index].
dv;
3612 lpDx[(
i - 1) * 2] += pGoffset[orig_index].du *
dir;
3613 lpDx[(
i - 1) * 2 + 1] += pGoffset[orig_index].dv;
3615 lpDx[
i * 2] -= pGoffset[orig_index].
du *
dir;
3616 lpDx[
i * 2 + 1] -= pGoffset[orig_index].
dv;
3623 if (reordered_glyphs != pwGlyphs)
free( reordered_glyphs );
3675 TRACE(
"(%p, %p, 0x%04x, %p)\n",
hdc, psc, glyph, abc);
3720 TRACE(
"(%d, %p, %p, %p)\n", runs,
level, vistolog, logtovis);
3722 if (!
level || (!vistolog && !logtovis))
3730 for( ich = 0; ich < runs; ich++)
3741 for( ich = 0; ich < runs; ich++)
3772 TRACE(
"%p, %p\n", ssa, piDx);
3774 if (!analysis)
return S_FALSE;
3785 for (
j = 0;
j < cChar;
j++)
3793 for (
k = 0;
k < clust_size;
k++)
3821 TRACE(
"(%p)\n", ssa);
3844 TRACE(
"(%p)\n", ssa);
3846 if (!analysis)
return NULL;
3853 analysis->
sz.
cx = 0;
3863 return &analysis->
sz;
3882 TRACE(
"(%p)\n", ssa);
3884 if (!analysis)
return NULL;
3905 TRACE(
"(%p)\n", ssa);
3907 if (!analysis)
return NULL;
3930 TRACE(
"(%p)\n", ssa);
3932 if (!analysis)
return S_FALSE;
3962 const int *advances,
const WORD *log_clust,
3967 TRACE(
"(%p, %d, %d, %p, %p, %p, %p)\n",
3968 sa, nbchars, nbglyphs, advances, log_clust, sva, widths);
3970 if (
sa->fRTL && !
sa->fLogicalOrder)
3975 for (
i = 0;
i < nbchars;
i++)
3981 for (
j = 0;
j < clust_size;
j++)
4015 ABC *abc,
int *justify)
4019 FIXME(
"(%p, %d, %d, %p, %p, %p, %p, %p, %p)\n",
4020 dx, num_chars, num_glyphs, log_clust, sva,
advance,
sa, abc, justify);
4022 for (
i = 0;
i < num_chars;
i++) justify[
i] =
advance[
i];
4027 int num_glyphs,
int dx,
int min_kashida,
int *justify)
4031 FIXME(
"(%p, %p, %d, %d, %d, %p)\n", sva,
advance, num_glyphs,
dx, min_kashida, justify);
4033 for (
i = 0;
i < num_glyphs;
i++) justify[
i] =
advance[
i];
4040 if (!pScriptTags || !pcTags || cMaxTags == 0)
return E_INVALIDARG;
4049 if (!pLangSysTags || !pcTags || cMaxTags == 0)
return E_INVALIDARG;
4058 if (!pFeatureTags || !pcTags || cMaxTags == 0)
return E_INVALIDARG;
4067 FIXME(
"(%p, %p, %p, %s, %s, %s, 0x%04x, %d, %p, %p)\n",
hdc, sc,
sa,
debugstr_an((
char*)&tag_script,4),
debugstr_an((
char*)&tag_langsys,4),
4080 gbLpkPresent =
TRUE;
_STLP_MOVE_TO_STD_NAMESPACE void _STLP_CALL advance(_InputIterator &__i, _Distance __n)
static struct sockaddr_in sa
static const char * wine_dbgstr_rect(const RECT *prc)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static void list_remove(struct list_entry *entry)
static void list_add_head(struct list_entry *head, struct list_entry *entry)
#define RegCloseKey(hKey)
void BREAK_line(const WCHAR *chars, int count, const SCRIPT_ANALYSIS *sa, SCRIPT_LOGATTR *la)
const unsigned short wine_mirror_map[1428]
LONG WINAPI RegOpenKeyA(HKEY hKey, LPCSTR lpSubKey, PHKEY phkResult)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
static __inline const char * debugstr_an(const char *s, int n)
#define MS_MAKE_TAG(ch0, ch1, ch2, ch3)
BOOL WINAPI GetStringTypeW(DWORD type, LPCWSTR src, INT count, LPWORD chartype)
BOOL WINAPI IsValidLocale(LCID lcid, DWORD flags)
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
LCID WINAPI ConvertDefaultLocale(LCID lcid)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
_ACRTIMP double __cdecl fabs(double)
static BOOL script_is_numeric(enum usp10_script script)
HRESULT WINAPI ScriptPlace(HDC hdc, SCRIPT_CACHE *psc, const WORD *pwGlyphs, int cGlyphs, const SCRIPT_VISATTR *psva, SCRIPT_ANALYSIS *psa, int *piAdvance, GOFFSET *pGoffset, ABC *pABC)
HRESULT WINAPI ScriptGetFontAlternateGlyphs(HDC hdc, SCRIPT_CACHE *sc, SCRIPT_ANALYSIS *sa, OPENTYPE_TAG tag_script, OPENTYPE_TAG tag_langsys, OPENTYPE_TAG tag_feature, WORD id, int size, WORD *list, int *count)
static struct list script_cache_list
HRESULT WINAPI ScriptGetFontScriptTags(HDC hdc, SCRIPT_CACHE *psc, SCRIPT_ANALYSIS *psa, int cMaxTags, OPENTYPE_TAG *pScriptTags, int *pcTags)
static WORD get_cache_glyph(SCRIPT_CACHE *psc, DWORD c)
HRESULT WINAPI ScriptStringFree(SCRIPT_STRING_ANALYSIS *pssa)
HRESULT WINAPI ScriptGetFontFeatureTags(HDC hdc, SCRIPT_CACHE *psc, SCRIPT_ANALYSIS *psa, OPENTYPE_TAG tagScript, OPENTYPE_TAG tagLangSys, int cMaxTags, OPENTYPE_TAG *pFeatureTags, int *pcTags)
static HRESULT SS_ItemOut(SCRIPT_STRING_ANALYSIS ssa, int iX, int iY, int iItem, int cStart, int cEnd, UINT uOptions, const RECT *prc, BOOL fSelected, BOOL fDisabled)
static BOOL is_indic(enum usp10_script script)
static int getGivenTabWidth(ScriptCache *psc, SCRIPT_TABDEF *pTabdef, int charPos, int current_x)
static enum usp10_script base_indic(enum usp10_script script)
HRESULT WINAPI ScriptApplyLogicalWidth(const int *dx, int num_chars, int num_glyphs, const WORD *log_clust, const SCRIPT_VISATTR *sva, const int *advance, const SCRIPT_ANALYSIS *sa, ABC *abc, int *justify)
const SCRIPT_LOGATTR *WINAPI ScriptString_pLogAttr(SCRIPT_STRING_ANALYSIS ssa)
HRESULT WINAPI ScriptShapeOpenType(HDC hdc, SCRIPT_CACHE *psc, SCRIPT_ANALYSIS *psa, OPENTYPE_TAG tagScript, OPENTYPE_TAG tagLangSys, int *rcRangeChars, TEXTRANGE_PROPERTIES **rpRangeProperties, int cRanges, const WCHAR *pwcChars, int cChars, int cMaxGlyphs, WORD *pwLogClust, SCRIPT_CHARPROP *pCharProps, WORD *pwOutGlyphs, SCRIPT_GLYPHPROP *pOutGlyphProps, int *pcGlyphs)
BOOL usp10_array_reserve(void **elements, SIZE_T *capacity, SIZE_T count, SIZE_T size)
HRESULT WINAPI ScriptCacheGetHeight(HDC hdc, SCRIPT_CACHE *psc, LONG *height)
HRESULT WINAPI ScriptGetCMap(HDC hdc, SCRIPT_CACHE *psc, const WCHAR *pwcInChars, int cChars, DWORD dwFlags, WORD *pwOutGlyphs)
HRESULT WINAPI ScriptFreeCache(SCRIPT_CACHE *psc)
HRESULT WINAPI ScriptItemize(const WCHAR *pwcInChars, int cInChars, int cMaxItems, const SCRIPT_CONTROL *psControl, const SCRIPT_STATE *psState, SCRIPT_ITEM *pItems, int *pcItems)
static BYTE get_cache_pitch_family(SCRIPT_CACHE *psc)
static const struct usp10_script_range script_ranges[]
static BOOL set_cache_glyph_widths(SCRIPT_CACHE *psc, WORD glyph, ABC *abc)
HRESULT WINAPI ScriptXtoCP(int iX, int cChars, int cGlyphs, const WORD *pwLogClust, const SCRIPT_VISATTR *psva, const int *piAdvance, const SCRIPT_ANALYSIS *psa, int *piCP, int *piTrailing)
HRESULT WINAPI ScriptGetLogicalWidths(const SCRIPT_ANALYSIS *sa, int nbchars, int nbglyphs, const int *advances, const WORD *log_clust, const SCRIPT_VISATTR *sva, int *widths)
static HRESULT _ItemizeInternal(const WCHAR *pwcInChars, int cInChars, int cMaxItems, const SCRIPT_CONTROL *psControl, const SCRIPT_STATE *psState, SCRIPT_ITEM *pItems, OPENTYPE_TAG *pScriptTags, int *pcItems)
HRESULT WINAPI ScriptShape(HDC hdc, SCRIPT_CACHE *psc, const WCHAR *pwcChars, int cChars, int cMaxGlyphs, SCRIPT_ANALYSIS *psa, WORD *pwOutGlyphs, WORD *pwLogClust, SCRIPT_VISATTR *psva, int *pcGlyphs)
HRESULT WINAPI ScriptLayout(int runs, const BYTE *level, int *vistolog, int *logtovis)
static LONG get_cache_height(SCRIPT_CACHE *psc)
const scriptData scriptInformation[]
HRESULT WINAPI ScriptStringGetLogicalWidths(SCRIPT_STRING_ANALYSIS ssa, int *piDx)
static void get_cache_font_properties(SCRIPT_FONTPROPERTIES *sfp, ScriptCache *sc)
HRESULT WINAPI ScriptStringAnalyse(HDC hdc, const void *pString, int cString, int cGlyphs, int iCharset, DWORD dwFlags, int iReqWidth, SCRIPT_CONTROL *psControl, SCRIPT_STATE *psState, const int *piDx, SCRIPT_TABDEF *pTabdef, const BYTE *pbInClass, SCRIPT_STRING_ANALYSIS *pssa)
static int get_cluster_size(const WORD *pwLogClust, int cChars, int item, int direction, int *iCluster, int *check_out)
HRESULT WINAPI ScriptStringOut(SCRIPT_STRING_ANALYSIS ssa, int iX, int iY, UINT uOptions, const RECT *prc, int iMinSel, int iMaxSel, BOOL fDisabled)
static BOOL requires_fallback(HDC hdc, SCRIPT_CACHE *psc, SCRIPT_ANALYSIS *psa, const WCHAR *pwcInChars, int cChars)
static int get_cluster_advance(const int *piAdvance, const SCRIPT_VISATTR *psva, const WORD *pwLogClust, int cGlyphs, int cChars, int cluster, int direction)
HRESULT WINAPI ScriptGetFontProperties(HDC hdc, SCRIPT_CACHE *psc, SCRIPT_FONTPROPERTIES *sfp)
static CRITICAL_SECTION cs_script_cache
static HRESULT init_script_cache(const HDC hdc, SCRIPT_CACHE *psc)
HRESULT WINAPI ScriptPlaceOpenType(HDC hdc, SCRIPT_CACHE *psc, SCRIPT_ANALYSIS *psa, OPENTYPE_TAG tagScript, OPENTYPE_TAG tagLangSys, int *rcRangeChars, TEXTRANGE_PROPERTIES **rpRangeProperties, int cRanges, const WCHAR *pwcChars, WORD *pwLogClust, SCRIPT_CHARPROP *pCharProps, int cChars, const WORD *pwGlyphs, const SCRIPT_GLYPHPROP *pGlyphProps, int cGlyphs, int *piAdvance, GOFFSET *pGoffset, ABC *pABC)
const SIZE *WINAPI ScriptString_pSize(SCRIPT_STRING_ANALYSIS ssa)
static BOOL get_cache_glyph_widths(SCRIPT_CACHE *psc, WORD glyph, ABC *abc)
static int get_glyph_cluster_advance(const int *piAdvance, const SCRIPT_VISATTR *pva, const WORD *pwLogClust, int cGlyphs, int cChars, int glyph, int direction)
static enum usp10_script get_char_script(const WCHAR *str, unsigned int index, unsigned int end, unsigned int *consumed)
static DWORD decode_surrogate_pair(const WCHAR *str, unsigned int index, unsigned int end)
HRESULT WINAPI ScriptGetProperties(const SCRIPT_PROPERTIES ***props, int *num)
static void find_fallback_font(enum usp10_script scriptid, WCHAR *FaceName)
HRESULT WINAPI ScriptStringGetOrder(SCRIPT_STRING_ANALYSIS ssa, UINT *order)
HRESULT WINAPI ScriptStringValidate(SCRIPT_STRING_ANALYSIS ssa)
HRESULT WINAPI ScriptItemizeOpenType(const WCHAR *pwcInChars, int cInChars, int cMaxItems, const SCRIPT_CONTROL *psControl, const SCRIPT_STATE *psState, SCRIPT_ITEM *pItems, OPENTYPE_TAG *pScriptTags, int *pcItems)
const int *WINAPI ScriptString_pcOutChars(SCRIPT_STRING_ANALYSIS ssa)
HRESULT WINAPI ScriptStringXtoCP(SCRIPT_STRING_ANALYSIS ssa, int iX, int *piCh, int *piTrailing)
HRESULT WINAPI ScriptStringCPtoX(SCRIPT_STRING_ANALYSIS ssa, int icp, BOOL fTrailing, int *pX)
int USP10_FindGlyphInLogClust(const WORD *pwLogClust, int cChars, WORD target)
static int __cdecl usp10_compare_script_range(const void *key, const void *value)
HRESULT WINAPI ScriptApplyDigitSubstitution(const SCRIPT_DIGITSUBSTITUTE *sds, SCRIPT_CONTROL *sc, SCRIPT_STATE *ss)
static CRITICAL_SECTION_DEBUG cs_script_cache_dbg
HRESULT WINAPI ScriptRecordDigitSubstitution(LCID locale, SCRIPT_DIGITSUBSTITUTE *sds)
static BOOL does_glyph_start_cluster(const SCRIPT_VISATTR *pva, const WORD *pwLogClust, int cChars, int glyph, int direction)
static int __cdecl compare_FindGlyph(const void *a, const void *b)
HRESULT WINAPI ScriptIsComplex(const WCHAR *chars, int len, DWORD flag)
HRESULT WINAPI ScriptGetFontLanguageTags(HDC hdc, SCRIPT_CACHE *psc, SCRIPT_ANALYSIS *psa, OPENTYPE_TAG tagScript, int cMaxTags, OPENTYPE_TAG *pLangSysTags, int *pcTags)
static WORD set_cache_glyph(SCRIPT_CACHE *psc, WCHAR c, WORD glyph)
static WCHAR mirror_char(WCHAR ch)
HRESULT WINAPI ScriptCPtoX(int iCP, BOOL fTrailing, int cChars, int cGlyphs, const WORD *pwLogClust, const SCRIPT_VISATTR *psva, const int *piAdvance, const SCRIPT_ANALYSIS *psa, int *piX)
HRESULT WINAPI ScriptBreak(const WCHAR *chars, int count, const SCRIPT_ANALYSIS *sa, SCRIPT_LOGATTR *la)
HRESULT WINAPI ScriptJustify(const SCRIPT_VISATTR *sva, const int *advance, int num_glyphs, int dx, int min_kashida, int *justify)
static BOOL get_cluster_data(const WORD *pwLogClust, int cChars, int cluster_index, int *cluster_size, int *start_index)
static const SCRIPT_PROPERTIES * script_props[]
HRESULT WINAPI ScriptGetGlyphABCWidth(HDC hdc, SCRIPT_CACHE *psc, WORD glyph, ABC *abc)
@ SCRIPT_STRING_ANALYSIS_FLAGS_SIZE
@ SCRIPT_STRING_ANALYSIS_FLAGS_INVALID
static BOOL set_cache_font_properties(const HDC hdc, ScriptCache *sc)
HRESULT WINAPI ScriptTextOut(const HDC hdc, SCRIPT_CACHE *psc, int x, int y, UINT fuOptions, const RECT *lprc, const SCRIPT_ANALYSIS *psa, const WCHAR *pwcReserved, int iReserved, const WORD *pwGlyphs, int cGlyphs, const int *piAdvance, const int *piJustify, const GOFFSET *pGoffset)
#define check(expected, result)
#define GLYPH_BLOCK_SHIFT
static unsigned short get_table_entry_16(const unsigned short *table, WCHAR ch)
@ SCRIPT_JUSTIFY_CHARACTER
GLint GLint GLint GLint GLint x
GLuint GLuint GLsizei count
GLint GLint GLsizei GLsizei height
GLuint GLuint GLsizei GLenum type
GLint GLint GLint GLint GLint GLint y
GLint GLint GLsizei width
GLuint GLuint GLsizei GLenum const GLvoid * indices
GLenum const GLvoid GLbitfield GLsizei numGlyphs
GLboolean GLboolean GLboolean b
GLuint GLdouble GLdouble GLint GLint order
GLboolean GLboolean GLboolean GLboolean a
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 const GLfloat const GLdouble const GLfloat GLint GLint GLint j
#define memcpy(s1, s2, n)
static float(__cdecl *square_half_float)(float x
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
#define LOCALE_USER_DEFAULT
#define COLOR_HIGHLIGHTTEXT
_In_ int _Inout_ LPRECT lprc
static unsigned __int64 next
VOID WINAPI LpkPresent(VOID)
#define LANGIDFROMLCID(l)
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
WORD * glyphs[GLYPH_MAX/GLYPH_BLOCK_SIZE]
WCHAR lfFaceName[LF_FACESIZE]
LoadedLanguage * languages
LoadedLanguage default_language
SCRIPT_FONTPROPERTIES sfp
ABC * widths[GLYPH_MAX/GLYPH_BLOCK_SIZE]
CacheGlyphPage * page[NUM_PAGES]
SCRIPT_LOGATTR * logattrs
LIST_ENTRY ProcessLocksList
DWORD TraditionalDigitLanguage
DWORD NationalDigitLanguage
enum usp10_script numericScript
enum usp10_script punctScript
#define SCRIPT_DIGITSUBSTITUTE_TRADITIONAL
#define SCRIPT_DIGITSUBSTITUTE_NONE
#define SCRIPT_DIGITSUBSTITUTE_CONTEXT
#define SCRIPT_DIGITSUBSTITUTE_NATIONAL
@ Script_Gurmukhi_Numeric
@ Script_Devanagari_Numeric
@ Script_Malayalam_Numeric
@ Script_Vietnamese_Currency
@ Script_Mongolian_Numeric
@ Script_Gujarati_Numeric
@ Script_Bengali_Currency
@ Script_New_Tai_Lue_Numeric
@ Script_Gujarati_Currency
@ Script_Ethiopic_Numeric
static const WCHAR props[]
int BIDI_ReorderL2vLevel(int level, int *pIndices, const BYTE *plevel, int cch, BOOL fReverse)
int BIDI_ReorderV2lLevel(int level, int *pIndices, const BYTE *plevel, int cch, BOOL fReverse)
BOOL BIDI_DetermineLevels(const WCHAR *lpString, unsigned int uCount, const SCRIPT_STATE *s, const SCRIPT_CONTROL *c, WORD *lpOutLevels, WORD *lpOutOverrides)
BOOL BIDI_GetStrengths(const WCHAR *string, unsigned int count, const SCRIPT_CONTROL *c, WORD *strength)
DWORD OpenType_CMAP_GetGlyphIndex(HDC hdc, ScriptCache *psc, DWORD utf32c, WORD *glyph_index, DWORD flags)
void SHAPE_ApplyDefaultOpentypeFeatures(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, WORD *pwOutGlyphs, INT *pcGlyphs, INT cMaxGlyphs, INT cChars, WORD *pwLogClust)
void SHAPE_CharGlyphProp(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, const WCHAR *pwcChars, const INT cChars, const WORD *pwGlyphs, const INT cGlyphs, WORD *pwLogClust, SCRIPT_CHARPROP *pCharProp, SCRIPT_GLYPHPROP *pGlyphProp)
HRESULT SHAPE_ContextualShaping(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, WCHAR *pwcChars, INT cChars, WORD *pwOutGlyphs, INT *pcGlyphs, INT cMaxGlyphs, WORD *pwLogClust)
void SHAPE_ApplyOpenTypePositions(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, const WORD *pwGlyphs, INT cGlyphs, int *piAdvance, GOFFSET *pGoffset)
HRESULT SHAPE_CheckFontForRequiredFeatures(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa)
HRESULT SHAPE_GetFontLanguageTags(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, OPENTYPE_TAG tagScript, int cMaxTags, OPENTYPE_TAG *pLangSysTags, int *pcTags)
HRESULT SHAPE_GetFontFeatureTags(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, OPENTYPE_TAG tagScript, OPENTYPE_TAG tagLangSys, int cMaxTags, OPENTYPE_TAG *pFeatureTags, int *pcTags)
HRESULT SHAPE_GetFontScriptTags(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, int cMaxTags, OPENTYPE_TAG *pScriptTags, int *pcTags)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
_In_ FONTOBJ _In_ ULONG _In_ ULONG cGlyphs
#define NtUserGetSysColor(A)
#define NtGdiGetGlyphIndicesW(A, B, C, D, E)
#define NtGdiGetFontData(A, B, C, D, E)
int WINAPI GetBkMode(_In_ HDC)
BOOL WINAPI GetTextMetricsW(_In_ HDC, _Out_ LPTEXTMETRICW)
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
BOOL WINAPI GetCharWidthI(_In_ HDC hdc, _In_ UINT giFirst, _In_ UINT cgi, _In_reads_opt_(cgi) LPWORD pgi, _Out_writes_(cgi) LPINT piWidths)
COLORREF WINAPI SetBkColor(_In_ HDC, _In_ COLORREF)
COLORREF WINAPI GetTextColor(_In_ HDC)
HGDIOBJ WINAPI GetCurrentObject(_In_ HDC, _In_ UINT)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
COLORREF WINAPI GetBkColor(_In_ HDC)
BOOL WINAPI ExtTextOutW(_In_ HDC hdc, _In_ int x, _In_ int y, _In_ UINT options, _In_opt_ const RECT *lprect, _In_reads_opt_(c) LPCWSTR lpString, _In_ UINT c, _In_reads_opt_(c) const INT *lpDx)
BOOL WINAPI GetCharABCWidthsI(_In_ HDC hdc, _In_ UINT giFirst, _In_ UINT cgi, _In_reads_opt_(cgi) LPWORD pgi, _Out_writes_(cgi) LPABC pabc)
UINT WINAPI GetOutlineTextMetricsW(_In_ HDC hdc, _In_ UINT cjCopy, _Out_writes_bytes_opt_(cjCopy) LPOUTLINETEXTMETRICW potm)
#define VIETNAMESE_CHARSET
HFONT WINAPI CreateFontIndirectW(_In_ const LOGFONTW *)
int WINAPI SetBkMode(_In_ HDC, _In_ int)
COLORREF WINAPI SetTextColor(_In_ HDC, _In_ COLORREF)
BOOL WINAPI GetCharWidth32W(_In_ HDC hdc, _In_ UINT iFirst, _In_ UINT iLast, _Out_writes_(iLast+1 - iFirst) LPINT lpBuffer)
#define GGI_MARK_NONEXISTING_GLYPHS
BOOL WINAPI GetCharABCWidthsW(_In_ HDC hdc, _In_ UINT wFirst, _In_ UINT wLast, _Out_writes_(wLast - wFirst+1) LPABC lpABC)
#define IS_SURROGATE_PAIR(high, low)
#define HKEY_CURRENT_USER
static unsigned int block