306 {{
SCRIPT_UNDEFINED, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
307 {
LANG_NEUTRAL, 0, 0, 0, 0,
ANSI_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
310 {{
Script_Latin, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
311 {
LANG_ENGLISH, 0, 0, 0, 0,
ANSI_CHARSET, 0, 0, 0, 0, 0, 0, 1, 0, 0},
313 {
'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
' ',
'S',
'a',
'n',
's',
' ',
'S',
'e',
'r',
'i',
'f',0}},
314 {{
Script_CR, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
315 {
LANG_NEUTRAL, 0, 0, 0, 0,
ANSI_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
318 {{
Script_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
319 {
LANG_ENGLISH, 1, 0, 0, 0,
ANSI_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
321 {
'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
' ',
'S',
'a',
'n',
's',
' ',
'S',
'e',
'r',
'i',
'f',0}},
322 {{
Script_Control, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
323 {
LANG_ENGLISH, 0, 1, 0, 0,
ANSI_CHARSET, 1, 0, 0, 0, 0, 0, 1, 0, 0},
326 {{
Script_Punctuation, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
327 {
LANG_NEUTRAL, 0, 0, 0, 0,
ANSI_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
329 {
'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
' ',
'S',
'a',
'n',
's',
' ',
'S',
'e',
'r',
'i',
'f',0}},
330 {{
Script_Arabic, 1, 1, 0, 0, 0, 0, { 1,0,0,0,0,0,0,0,0,0,0}},
331 {
LANG_ARABIC, 0, 1, 0, 0,
ARABIC_CHARSET, 0, 0, 0, 0, 0, 0, 1, 1, 0},
333 {
'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
' ',
'S',
'a',
'n',
's',
' ',
'S',
'e',
'r',
'i',
'f',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 {
'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
' ',
'S',
'a',
'n',
's',
' ',
'S',
'e',
'r',
'i',
'f',0}},
338 {{
Script_Hebrew, 1, 1, 0, 0, 0, 0, { 1,0,0,0,0,0,0,0,0,0,0}},
339 {
LANG_HEBREW, 0, 1, 0, 1,
HEBREW_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
341 {
'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
' ',
'S',
'a',
'n',
's',
' ',
'S',
'e',
'r',
'i',
'f',0}},
342 {{
Script_Syriac, 1, 1, 0, 0, 0, 0, { 1,0,0,0,0,0,0,0,0,0,0}},
343 {
LANG_SYRIAC, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 1, 0, 0, 1, 0},
345 {
'E',
's',
't',
'r',
'a',
'n',
'g',
'e',
'l',
'o',
' ',
'E',
'd',
'e',
's',
's',
'a',0}},
346 {{
Script_Persian, 0, 1, 0, 0, 0, 0, { 2,0,0,0,0,0,0,0,0,0,0}},
347 {
LANG_PERSIAN, 1, 1, 0, 0,
ARABIC_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
349 {
'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
' ',
'S',
'a',
'n',
's',
' ',
'S',
'e',
'r',
'i',
'f',0}},
350 {{
Script_Thaana, 1, 1, 0, 0, 0, 0, { 1,0,0,0,0,0,0,0,0,0,0}},
351 {
LANG_DIVEHI, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
353 {
'M',
'V',
' ',
'B',
'o',
'l',
'i',0}},
354 {{
Script_Greek, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
355 {
LANG_GREEK, 0, 0, 0, 0,
GREEK_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
357 {
'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
' ',
'S',
'a',
'n',
's',
' ',
'S',
'e',
'r',
'i',
'f',0}},
358 {{
Script_Cyrillic, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
359 {
LANG_RUSSIAN, 0, 0, 0, 0,
RUSSIAN_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
361 {
'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
' ',
'S',
'a',
'n',
's',
' ',
'S',
'e',
'r',
'i',
'f',0}},
362 {{
Script_Armenian, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
363 {
LANG_ARMENIAN, 0, 0, 0, 0,
ANSI_CHARSET, 0, 0, 0, 0, 0, 0, 1, 0, 0},
365 {
'S',
'y',
'l',
'f',
'a',
'e',
'n',0}},
366 {{
Script_Georgian, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
367 {
LANG_GEORGIAN, 0, 0, 0, 0,
ANSI_CHARSET, 0, 0, 0, 0, 0, 0, 1, 0, 0},
369 {
'S',
'y',
'l',
'f',
'a',
'e',
'n',0}},
370 {{
Script_Sinhala, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
371 {
LANG_SINHALESE, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
373 {
'I',
's',
'k',
'o',
'o',
'l',
'a',
' ',
'P',
'o',
't',
'a',0}},
374 {{
Script_Tibetan, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
375 {
LANG_TIBETAN, 0, 1, 1, 1,
DEFAULT_CHARSET, 0, 0, 1, 0, 1, 0, 0, 0, 0},
377 {
'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
' ',
'H',
'i',
'm',
'a',
'l',
'a',
'y',
'a',0}},
378 {{
Script_Tibetan_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
379 {
LANG_TIBETAN, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
381 {
'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
' ',
'H',
'i',
'm',
'a',
'l',
'a',
'y',
'a',0}},
382 {{
Script_Phags_pa, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
383 {
LANG_MONGOLIAN, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
385 {
'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
' ',
'P',
'h',
'a',
'g',
's',
'P',
'a',0}},
386 {{
Script_Thai, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
387 {
LANG_THAI, 0, 1, 1, 1,
THAI_CHARSET, 0, 0, 1, 0, 1, 0, 0, 0, 1},
389 {
'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
' ',
'S',
'a',
'n',
's',
' ',
'S',
'e',
'r',
'i',
'f',0}},
390 {{
Script_Thai_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
391 {
LANG_THAI, 1, 1, 0, 0,
THAI_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
393 {
'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
' ',
'S',
'a',
'n',
's',
' ',
'S',
'e',
'r',
'i',
'f',0}},
394 {{
Script_Lao, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
395 {
LANG_LAO, 0, 1, 1, 1,
DEFAULT_CHARSET, 0, 0, 1, 0, 1, 0, 0, 0, 0},
397 {
'D',
'o',
'k',
'C',
'h',
'a',
'm',
'p',
'a',0}},
398 {{
Script_Lao_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
399 {
LANG_LAO, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
401 {
'D',
'o',
'k',
'C',
'h',
'a',
'm',
'p',
'a',0}},
402 {{
Script_Devanagari, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
403 {
LANG_HINDI, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 1, 0, 0, 0, 0},
405 {
'M',
'a',
'n',
'g',
'a',
'l',0}},
406 {{
Script_Devanagari_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
407 {
LANG_HINDI, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
409 {
'M',
'a',
'n',
'g',
'a',
'l',0}},
410 {{
Script_Bengali, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
411 {
LANG_BENGALI, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 1, 0, 0, 0, 0},
413 {
'V',
'r',
'i',
'n',
'd',
'a',0}},
414 {{
Script_Bengali_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
415 {
LANG_BENGALI, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
417 {
'V',
'r',
'i',
'n',
'd',
'a',0}},
418 {{
Script_Bengali_Currency, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
419 {
LANG_BENGALI, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
421 {
'V',
'r',
'i',
'n',
'd',
'a',0}},
422 {{
Script_Gurmukhi, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
423 {
LANG_PUNJABI, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 1, 0, 0, 0, 0},
425 {
'R',
'a',
'a',
'v',
'i',0}},
426 {{
Script_Gurmukhi_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
427 {
LANG_PUNJABI, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
429 {
'R',
'a',
'a',
'v',
'i',0}},
430 {{
Script_Gujarati, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
431 {
LANG_GUJARATI, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 1, 0, 0, 0, 0},
433 {
'S',
'h',
'r',
'u',
't',
'i',0}},
434 {{
Script_Gujarati_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
435 {
LANG_GUJARATI, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
437 {
'S',
'h',
'r',
'u',
't',
'i',0}},
438 {{
Script_Gujarati_Currency, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
439 {
LANG_GUJARATI, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
441 {
'S',
'h',
'r',
'u',
't',
'i',0}},
442 {{
Script_Oriya, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
443 {
LANG_ORIYA, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 1, 0, 0, 0, 0},
445 {
'K',
'a',
'l',
'i',
'n',
'g',
'a',0}},
446 {{
Script_Oriya_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
447 {
LANG_ORIYA, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
449 {
'K',
'a',
'l',
'i',
'n',
'g',
'a',0}},
450 {{
Script_Tamil, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
451 {
LANG_TAMIL, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 1, 0, 0, 0, 0},
453 {
'L',
'a',
't',
'h',
'a',0}},
454 {{
Script_Tamil_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
455 {
LANG_TAMIL, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
457 {
'L',
'a',
't',
'h',
'a',0}},
458 {{
Script_Telugu, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
459 {
LANG_TELUGU, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 1, 0, 0, 0, 0},
461 {
'G',
'a',
'u',
't',
'a',
'm',
'i',0}},
462 {{
Script_Telugu_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
463 {
LANG_TELUGU, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
465 {
'G',
'a',
'u',
't',
'a',
'm',
'i',0}},
466 {{
Script_Kannada, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
467 {
LANG_KANNADA, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 1, 0, 0, 0, 0},
469 {
'T',
'u',
'n',
'g',
'a',0}},
470 {{
Script_Kannada_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
471 {
LANG_KANNADA, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
473 {
'T',
'u',
'n',
'g',
'a',0}},
474 {{
Script_Malayalam, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
475 {
LANG_MALAYALAM, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 1, 0, 0, 0, 0},
477 {
'K',
'a',
'r',
't',
'i',
'k',
'a',0}},
478 {{
Script_Malayalam_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
479 {
LANG_MALAYALAM, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
481 {
'K',
'a',
'r',
't',
'i',
'k',
'a',0}},
482 {{
Script_Diacritical, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
483 {
LANG_ENGLISH, 0, 1, 0, 1,
ANSI_CHARSET, 0, 0, 0, 0, 0, 1, 1, 0, 0},
486 {{
Script_Punctuation2, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
487 {
LANG_ENGLISH, 0, 0, 0, 0,
ANSI_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
489 {
'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
' ',
'S',
'a',
'n',
's',
' ',
'S',
'e',
'r',
'i',
'f',0}},
490 {{
Script_Numeric2, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
491 {
LANG_ENGLISH, 1, 0, 0, 0,
ANSI_CHARSET, 0, 0, 0, 0, 0, 0, 1, 0, 0},
494 {{
Script_Myanmar, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
495 {0x55, 0, 1, 1, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 1, 0, 0, 0, 0},
497 {
'M',
'y',
'a',
'n',
'm',
'a',
'r',
' ',
'T',
'e',
'x',
't',0}},
498 {{
Script_Myanmar_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
499 {0x55, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
502 {{
Script_Tai_Le, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
503 {0, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
505 {
'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
' ',
'T',
'a',
'i',
' ',
'L',
'e',0}},
506 {{
Script_New_Tai_Lue, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
507 {0, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
509 {
'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
' ',
'N',
'e',
'w',
' ',
'T',
'a',
'i',
' ',
'L',
'u',
'e',0}},
510 {{
Script_New_Tai_Lue_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
511 {0, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
513 {
'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
' ',
'N',
'e',
'w',
' ',
'T',
'a',
'i',
' ',
'L',
'u',
'e',0}},
514 {{
Script_Khmer, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
515 {0x53, 0, 1, 1, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 1, 0, 0, 0, 0},
517 {
'D',
'a',
'u',
'n',
'P',
'e',
'n',
'h',0}},
518 {{
Script_Khmer_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
519 {0x53, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
521 {
'D',
'a',
'u',
'n',
'P',
'e',
'n',
'h',0}},
522 {{
Script_CJK_Han, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
523 {
LANG_ENGLISH, 0, 0, 0, 0,
ANSI_CHARSET, 0, 0, 0, 0, 0, 0, 1, 0, 0},
526 {{
Script_Ideograph, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
527 {
LANG_ENGLISH, 0, 0, 0, 0,
ANSI_CHARSET, 0, 0, 0, 0, 0, 0, 1, 0, 0},
530 {{
Script_Bopomofo, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
531 {
LANG_ENGLISH, 0, 0, 0, 0,
ANSI_CHARSET, 0, 0, 0, 0, 0, 0, 1, 0, 0},
534 {{
Script_Kana, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
535 {
LANG_ENGLISH, 0, 0, 0, 0,
ANSI_CHARSET, 0, 0, 0, 0, 0, 0, 1, 0, 0},
538 {{
Script_Hangul, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
539 {
LANG_KOREAN, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 1, 0, 0},
542 {{
Script_Yi, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
543 {
LANG_ENGLISH, 0, 0, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 1, 0, 0},
545 {
'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
' ',
'Y',
'i',
' ',
'B',
'a',
'i',
't',
'i',0}},
546 {{
Script_Ethiopic, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
547 {0x5e, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
549 {
'N',
'y',
'a',
'l',
'a',0}},
550 {{
Script_Ethiopic_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
551 {0x5e, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
553 {
'N',
'y',
'a',
'l',
'a',0}},
554 {{
Script_Mongolian, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
555 {
LANG_MONGOLIAN, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
557 {
'M',
'o',
'n',
'g',
'o',
'l',
'i',
'a',
'n',
' ',
'B',
'a',
'i',
't',
'i',0}},
558 {{
Script_Mongolian_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
559 {
LANG_MONGOLIAN, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
561 {
'M',
'o',
'n',
'g',
'o',
'l',
'i',
'a',
'n',
' ',
'B',
'a',
'i',
't',
'i',0}},
562 {{
Script_Tifinagh, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
563 {0, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
565 {
'E',
'b',
'r',
'i',
'm',
'a',0}},
566 {{
Script_NKo, 1, 1, 0, 0, 0, 0, { 1,0,0,0,0,0,0,0,0,0,0}},
567 {0, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
569 {
'E',
'b',
'r',
'i',
'm',
'a',0}},
570 {{
Script_Vai, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
571 {0, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
573 {
'E',
'b',
'r',
'i',
'm',
'a',0}},
574 {{
Script_Vai_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
575 {0, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
577 {
'E',
'b',
'r',
'i',
'm',
'a',0}},
578 {{
Script_Cherokee, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
579 {0x5c, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
581 {
'P',
'l',
'a',
'n',
't',
'a',
'g',
'e',
'n',
'e',
't',
' ',
'C',
'h',
'e',
'r',
'o',
'k',
'e',
'e',0}},
582 {{
Script_Canadian, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
583 {0x5d, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
585 {
'E',
'u',
'p',
'h',
'e',
'm',
'i',
'a',0}},
586 {{
Script_Ogham, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
587 {0, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
589 {
'S',
'e',
'g',
'o',
'e',
' ',
'U',
'I',
' ',
'S',
'y',
'm',
'b',
'o',
'l',0}},
590 {{
Script_Runic, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
591 {0, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
593 {
'S',
'e',
'g',
'o',
'e',
' ',
'U',
'I',
' ',
'S',
'y',
'm',
'b',
'o',
'l',0}},
594 {{
Script_Braille, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
595 {
LANG_ENGLISH, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
597 {
'S',
'e',
'g',
'o',
'e',
' ',
'U',
'I',
' ',
'S',
'y',
'm',
'b',
'o',
'l',0}},
598 {{
Script_Surrogates, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
599 {
LANG_ENGLISH, 0, 1, 0, 1,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 1, 0, 0},
602 {{
Script_Private, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
603 {0, 0, 0, 0, 0,
DEFAULT_CHARSET, 0, 1, 0, 0, 0, 0, 1, 0, 0},
606 {{
Script_Deseret, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
607 {0, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
609 {
'S',
'e',
'g',
'o',
'e',
' ',
'U',
'I',
' ',
'S',
'y',
'm',
'b',
'o',
'l',0}},
610 {{
Script_Osmanya, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
611 {0, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
613 {
'E',
'b',
'r',
'i',
'm',
'a',0}},
614 {{
Script_Osmanya_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
615 {0, 1, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
617 {
'E',
'b',
'r',
'i',
'm',
'a',0}},
618 {{
Script_MathAlpha, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
619 {0, 0, 1, 0, 0,
DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
621 {
'C',
'a',
'm',
'b',
'r',
'i',
'a',
' ',
'M',
'a',
't',
'h',0}},
622 {{
Script_Hebrew_Currency, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
623 {
LANG_HEBREW, 0, 1, 0, 0,
HEBREW_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
625 {
'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
' ',
'S',
'a',
'n',
's',
' ',
'S',
'e',
'r',
'i',
'f',0}},
626 {{
Script_Vietnamese_Currency, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
627 {
LANG_VIETNAMESE, 0, 0, 0, 0,
VIETNAMESE_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
629 {
'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
' ',
'S',
'a',
'n',
's',
' ',
'S',
'e',
'r',
'i',
'f',0}},
630 {{
Script_Thai_Currency, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}},
631 {
LANG_THAI, 0, 1, 0, 0,
THAI_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0},
633 {
'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
' ',
'S',
'a',
'n',
's',
' ',
'S',
'e',
'r',
'i',
'f',0}},
686 0, 0, { (
DWORD_PTR)(__FILE__
": script_cache") }
732 SIZE_T max_capacity, new_capacity;
735 if (
count <= *capacity)
739 if (
count > max_capacity)
742 new_capacity =
max(1, *capacity);
743 while (new_capacity <
count && new_capacity <= max_capacity / 2)
745 if (new_capacity <
count)
746 new_capacity =
count;
749 new_elements = heap_alloc_zero(new_capacity *
size);
755 *elements = new_elements;
756 *capacity = new_capacity;
775 static const WCHAR chars[4] = {0x0020, 0x200B, 0xF71B, 0x0640};
793 else if (gi[1] != 0xFFFF)
795 else if (gi[0] != 0xFFFF)
832 if (!
block)
return 0;
887 if (!
memcmp(&sc->
lf, &lf,
sizeof(lf)))
924 if (sc != *
psc && !
memcmp(&sc->
lf, &lf,
sizeof(lf)))
936 TRACE(
"<- %p\n", sc);
964 if (*ch >
range->rangeLast)
972 static const WCHAR latin_punc[] = {
'#',
'$',
'&',
'\'',
',',
';',
'<',
'>',
'?',
'@',
'\\',
'^',
'_',
'`',
'{',
'|',
'}',
'~', 0x00a0, 0};
1022 return range->numericScript;
1024 return range->punctScript;
1025 return range->script;
1039 if (!
find->ascending)
1125 for (
j = 0;
j < ((
ScriptCache *)*
psc)->scripts[
n].default_language.feature_count;
j++)
1280 TRACE(
"%p, %p, %p\n", sds, sc,
ss);
1292 ss->fDigitSubstitute = 0;
1350#define Numeric_space 0x0020
1365 WORD baselayout = 0;
1372 TRACE(
"%s,%d,%d,%p,%p,%p,%p\n",
debugstr_wn(pwcInChars,
cInChars),
cInChars,
cMaxItems,
1390 scripts[
i] = scripts[
i-1];
1395 if ((pwcInChars[
i] == 0x964 || pwcInChars[
i] ==0x965) && last_indic !=
Script_Undefined)
1396 scripts[
i] = last_indic;
1405 if (!forceLevels && ((pwcInChars[
i] >= 0x200B && pwcInChars[
i] <= 0x200F) ||
1406 (pwcInChars[
i] >= 0x202A && pwcInChars[
i] <= 0x202E) ||
1407 (pwcInChars[
i] >= 0x2066 && pwcInChars[
i] <= 0x2069)))
1417 scripts[
i] = scripts[
i-1];
1423 for (
j =
i-1;
j >= 0 && scripts[
j] == first_script && pwcInChars[
j] !=
Numeric_space;
j--)
1433 scripts[
j] = scripts[
i];
1438 scripts[
i] = scripts[
j];
1447 if (
i > 0 && (pwcInChars[
i] ==
ZWJ || pwcInChars[
i] ==
ZWNJ || pwcInChars[
i] ==
ZWSP))
1451 scripts[
i] = scripts[
i-1];
1456 if (pwcInChars[
j] !=
ZWJ && pwcInChars[
j] !=
ZWNJ
1459 scripts[
i] = scripts[
j];
1478 if (
psState->fOverrideDirection)
1483 s.fOverrideDirection =
FALSE;
1485 if (
odd(layout_levels[0]))
1488 if (layout_levels[
i]!=layout_levels[0])
1503 baselayout = layout_levels[0];
1514 layout_levels =
NULL;
1518 static const WCHAR math_punc[] = {
'#',
'$',
'%',
'+',
',',
'-',
'.',
'/',
':',0x2212, 0x2044, 0x00a0,0};
1519 static const WCHAR repeatable_math_punc[] = {
'#',
'$',
'%',
'+',
'-',
'/',0x2212, 0x2044,0};
1539 wcschr(math_punc, pwcInChars[
i]))
1543 scripts[
i] = scripts[
i+1];
1545 strength[
i] = strength[
i-1];
1548 else if (
wcschr(repeatable_math_punc, pwcInChars[
i]))
1557 scripts[
i] = scripts[
j];
1559 strength[
i] = strength[
i-1];
1562 else if (pwcInChars[
i] != pwcInChars[
j])
break;
1578 if (
i > 0 && (pwcInChars[
i] ==
ZWJ || pwcInChars[
i] ==
ZWNJ || pwcInChars[
i] ==
ZWSP))
1582 strength[
i] = strength[
i-1];
1585 if (pwcInChars[
j] !=
ZWJ && pwcInChars[
j] !=
ZWNJ
1588 strength[
i] = strength[
j];
1601 for (
j =
i;
j > 0;
j--)
1607 scripts[
i] = scripts[
j];
1608 strength[
i] = strength[
j];
1623 scripts[
i] = scripts[
j];
1624 strength[
i] = strength[
j];
1641 New_Script = scripts[
cnt];
1659 layoutRTL =
odd(layout_levels[
cnt]);
1661 layoutRTL = (
psState->uBidiLevel ||
odd(layout_levels[
cnt]));
1671 else if (!
pItems[
index].
a.s.uBidiLevel || (overrides && overrides[
cnt]))
1675 layoutRTL =
odd(baselayout);
1684 TRACE(
"New_Level=%i New_Strength=%i New_Script=%d, eScript=%d index=%d cnt=%d iCharPos=%d\n",
1691 New_Script = scripts[
cnt];
1698 New_Script = scripts[
cnt+
j];
1700 New_Script = scripts[
cnt];
1720 TRACE(
"Strength break (%i/%i)\n",
str,strength[
cnt]);
1732 layoutRTL =
odd(layout_levels[
cnt]);
1758 if (layout_levels[
cnt] == 0)
1761 layoutRTL = (layoutRTL ||
odd(layout_levels[
cnt]));
1769 else if (!
pItems[
index].
a.s.uBidiLevel || (overrides && overrides[
cnt]))
1887 defWidth = (pTabdef->
pTabStops[0])*
psc->tm.tmAveCharWidth;
1893 defWidth = (32 * pTabdef->
iScale) / 4;
1895 defWidth = 8 *
psc->tm.tmAveCharWidth;
1898 for (; cTabStops>0 ; lpTabPos++, cTabStops--)
1900 int position = *lpTabPos;
1902 position = -1 * position;
1904 position = (position * pTabdef->
iScale) / 4;
1906 position = position *
psc->tm.tmAveCharWidth;
1908 if( nTabOrg + position > current_x)
1913 x = (nTabOrg + position) - current_x;
1918 FIXME(
"Negative tabstop\n");
1923 if ((!cTabStops) && (defWidth > 0))
1924 x =((((current_x - nTabOrg) / defWidth)+1) * defWidth) - current_x;
1925 else if ((!cTabStops) && (defWidth < 0))
1926 FIXME(
"TODO: Negative defWidth\n");
1940 if (
psa->fNoGlyphIndex)
1967 static const WCHAR szFmt[] = {
'%',
'x',0};
1996 int i, num_items = 255;
2000 TRACE(
"(%p,%p,%d,%d,%d,0x%x,%d,%p,%p,%p,%p,%p,%p)\n",
2006 FIXME(
"Only Unicode strings are supported\n");
2012 if (!(analysis = heap_alloc_zero(
sizeof(*analysis))))
2034 if (!(iString =
heap_calloc(cString,
sizeof(*iString))))
2039 for (
i = 0;
i < cString;
i++)
2070 if (!(BidiLevel = heap_alloc_zero(analysis->
numItems)))
2093 int numGlyphsReturned;
2094 HFONT originalFont = 0x0;
2140 piAdvance, pGoffset, &analysis->
glyphs[
i].
abc);
2147 for (tabi = 0; tabi < cChar; tabi++)
2151 tab_x+=piAdvance[tabi];
2191 if (pva[glyph].fClusterStart)
2217 INT runStart, runEnd;
2219 HFONT oldFont = 0x0;
2223 TRACE(
"(%p,%d,%d,%d,%d,%d, 0x%1x, %d, %d)\n",
2224 ssa, iX, iY, iItem, cStart, cEnd, uOptions, fSelected, fDisabled);
2228 if ((cStart >= 0 && analysis->
pItem[iItem+1].
iCharPos <= cStart) ||
2259 if (cEnd >= 0 && cEnd < analysis->pItem[iItem+1].iCharPos)
2263 crc.
left = iX + off_x;
2267 if (cStart >=0 && runStart)
2271 crc.
left = iX + off_x;
2309 clust_glyph = iGlyph +
cGlyphs;
2325 iY, uOptions, &crc, &analysis->
pItem[iItem].
a,
NULL, 0,
2330 TRACE(
"ScriptTextOut hr=%08x\n",
hr);
2379 TRACE(
"(%p,%d,%d,0x%08x,%s,%d,%d,%d)\n",
2392 if (iMinSel < iMaxSel && (iMinSel > 0 || iMaxSel > 0))
2394 if (iMaxSel > 0 && iMinSel < 0)
2417 TRACE(
"(%p), %d, %d, (%p)\n", ssa, icp, fTrailing, pX);
2419 if (!ssa || !pX)
return S_FALSE;
2449 if (icp >= analysis->
pItem[
i+1].
iCharPos || icp < analysis->pItem[
i].iCharPos)
2479 TRACE(
"(%p), %d, (%p), (%p)\n", ssa, iX, piCh, piTrailing);
2481 if (!ssa || !piCh || !piTrailing)
return S_FALSE;
2490 *piTrailing =
FALSE;
2530 &analysis->
pItem[
i].
a, piCh, piTrailing);
2538 *piTrailing =
FALSE;
2562 TRACE(
"(%p)\n", pssa);
2595 int direction,
int* iCluster,
int *check_out)
2601 for (
check =
item+direction; check < cChars && check >= 0;
check+=direction)
2606 if (iCluster && *iCluster == -1)
2630 if (glyph > log_clust_max)
2633 for (glyph+=direction; glyph < cGlyphs && glyph >= 0; glyph +=direction)
2638 if (glyph > log_clust_max)
2656 const int *piAdvance,
2665 float special_size = 0.0;
2670 TRACE(
"(%d,%d,%d,%d,%p,%p,%p,%p,%p)\n",
2674 if (
psa->fRTL && !
psa->fLogicalOrder)
2687 ERR(
"We do not handle non reversed clusters properly\n");
2693 iMaxPos += piAdvance[
item];
2699 if (iSpecial == -1 && (iCluster == -1 || iCluster+clust_size <=
item))
2713 for (glyph = clust; glyph <
cGlyphs; glyph++)
2717 iPosX += special_size;
2724 if (clust_size == 0)
2731 else if (iSpecial != -1)
2732 iPosX += special_size;
2739 if (clust_size == 0)
2743 iPosX += adv / (
float)clust_size;
2749 iPosX = iMaxPos - iPosX;
2755 TRACE(
"*piX=%d\n", *piX);
2769 if (!
size && start_index)
2777 else if (
size)
break;
2796 int cChars,
int cluster,
int direction)
2807 for (glyph_start = -1, glyph_end = -1; i < cChars && i >= 0 && (glyph_start < 0 || glyph_end < 0);
i+=direction)
2809 if (glyph_start < 0 &&
pwLogClust[
i] != cluster)
continue;
2821 FIXME(
"multi-glyph reversed clusters found\n");
2822 glyph_end = glyph_start + 1;
2827 for (
i = glyph_start+1;
i< glyph_end;
i++)
2829 if (psva[
i].fClusterStart)
2836 for (
advance = 0,
i = glyph_start;
i < glyph_end;
i++)
2859 const int *piAdvance,
2867 int glyph_index, cluster_index;
2870 TRACE(
"(%d,%d,%d,%p,%p,%p,%p,%p,%p)\n",
2872 psa, piCP, piTrailing);
2874 if (
psa->fRTL && !
psa->fLogicalOrder)
2900 FIXME(
"We do not handle non reversed clusters properly\n");
2908 for (glyph_index = -1, iPosX = iX; iPosX >=0 && glyph_index <
cGlyphs; iPosX -= piAdvance[glyph_index+1], glyph_index++)
2913 for (glyph_index = -1, iPosX = iX; iPosX > 0 && glyph_index <
cGlyphs; iPosX -= piAdvance[glyph_index+1], glyph_index++)
2917 TRACE(
"iPosX %i -> glyph_index %i (%i)\n", iPosX, glyph_index,
cGlyphs);
2920 if (glyph_index >= 0 && glyph_index <
cGlyphs)
2927 for (
i = 0, cluster_index =
pwLogClust[0]; i < cChars && pwLogClust[i] >= glyph_index; cluster_index=
pwLogClust[
i++])
2930 TRACE(
"cluster_index %i\n", cluster_index);
2932 if (direction < 0 && iPosX >= 0 && glyph_index != cluster_index)
2942 TRACE(
"first char index %i\n",
i);
2946 if (glyph_index != cluster_index ||
2947 (direction > 0 &&
abs(iPosX) <= (piAdvance[glyph_index] / 2)) ||
2948 (direction < 0 &&
abs(iPosX) >= (piAdvance[glyph_index] / 2)))
2962 for (adv = iPosX, part_index = cluster_index; part_index <= glyph_index; part_index++)
2963 adv += piAdvance[part_index];
2964 if (adv > iX) adv = iX;
2966 TRACE(
"Multi-char cluster, no snap\n");
2968 TRACE(
"advance %i divides into %f per char\n", cluster_advance, cluster_part_width);
2971 for (part_index = 0; adv >= 0; adv-=cluster_part_width, part_index++)
2973 if (part_index) part_index--;
2977 for (part_index = 0; adv > 0; adv-=cluster_part_width, part_index++)
2981 adv += cluster_part_width;
2986 TRACE(
"base_char %i part_index %i, leftover advance %f\n",
i, part_index, adv);
2994 if ((direction > 0 &&
fabs(adv) <= (cluster_part_width / 2.0)) ||
2995 (direction < 0 && adv &&
fabs(adv) >= (cluster_part_width / 2.0)))
3001 if ((direction > 0 &&
abs(iPosX) <= (piAdvance[glyph_index] / 2)) ||
3002 (direction < 0 &&
abs(iPosX) >= (piAdvance[glyph_index] / 2)))
3009 TRACE(
"Point falls outside of string\n");
3010 if (glyph_index < 0)
3028 TRACE(
"*piCP=%d\n", *piCP);
3029 TRACE(
"*piTrailing=%d\n", *piTrailing);
3081 if (!chars ||
len < 0)
3138 static int once = 0;
3140 TRACE(
"(%p, %p, %p, %s, %s, %p, %p, %d, %s, %d, %d, %p, %p, %p, %p, %p )\n",
3146 if (
psa)
TRACE(
"psa values: %d, %d, %d, %d, %d, %d, %d\n",
psa->eScript,
psa->fRTL,
psa->fLayoutRTL,
3147 psa->fLinkBefore,
psa->fLinkAfter,
psa->fLogicalOrder,
psa->fNoGlyphIndex);
3153 if(!once++)
FIXME(
"Ranges not supported yet\n");
3191 for (
i = 0,
g = 0, cluster = 0;
i <
cChars;
i++)
3206 rChars[
i] = chInput;
3263 TRACE(
"no glyph translation\n");
3275 if (
psa->fNoGlyphIndex)
3343 hr =
ScriptShapeOpenType(
hdc,
psc,
psa,
scriptInformation[
psa->eScript].
scriptTag, 0,
NULL,
NULL, 0,
pwcChars,
cChars,
cMaxGlyphs,
pwLogClust, charProps,
pwOutGlyphs, glyphProps,
pcGlyphs);
3348 psva[
i] = glyphProps[
i].sva;
3399 static int once = 0;
3401 TRACE(
"(%p, %p, %p, %s, %s, %p, %p, %d, %s, %p, %p, %d, %p, %p, %d, %p %p %p)\n",
3410 if (!pGoffset)
return E_FAIL;
3413 if (!once++)
FIXME(
"Ranges not supported yet\n");
3425 pGoffset[
i].
du = pGoffset[
i].
dv = 0;
3427 if (pGlyphProps[
i].sva.fZeroWidth)
3430 if (piAdvance) piAdvance[
i] = 0;
3434 if (
psa->fNoGlyphIndex)
3441 glyph = pwGlyphs[
i];
3486 if (pABC)
TRACE(
"Total for run: abcA=%d, abcB=%d, abcC=%d\n", pABC->
abcA, pABC->
abcB, pABC->
abcC);
3518 TRACE(
"(%p, %p, %p, %d, %p, %p, %p, %p, %p)\n",
hdc,
psc, pwGlyphs,
cGlyphs, psva,
psa,
3519 piAdvance, pGoffset, pABC);
3522 if (!pGoffset)
return E_FAIL;
3528 glyphProps[
i].sva = psva[
i];
3530 hr =
ScriptPlaceOpenType(
hdc,
psc,
psa,
scriptInformation[
psa->eScript].
scriptTag, 0,
NULL,
NULL, 0,
NULL,
NULL,
NULL, 0, pwGlyphs, glyphProps,
cGlyphs, piAdvance, pGoffset, pABC);
3560 TRACE(
"(%p,%p,%s,%d,0x%x,%p)\n",
hdc,
psc,
debugstr_wn(pwcInChars,
cChars),
3573 inChar = pwcInChars[
i];
3579 if (glyph == 0xffff)
3597 int iReserved,
const WORD *pwGlyphs,
int cGlyphs,
const int *piAdvance,
3598 const int *piJustify,
const GOFFSET *pGoffset)
3603 WORD *reordered_glyphs = (
WORD *)pwGlyphs;
3605 TRACE(
"(%p, %p, %d, %d, %08x, %s, %p, %p, %d, %p, %d, %p, %p, %p)\n",
3606 hdc,
psc,
x,
y, fuOptions,
wine_dbgstr_rect(
lprc),
psa, pwcReserved, iReserved, pwGlyphs,
cGlyphs,
3607 piAdvance, piJustify, pGoffset);
3613 fuOptions |= ETO_IGNORELANGUAGE;
3614 if (!
psa->fNoGlyphIndex)
3615 fuOptions |= ETO_GLYPH_INDEX;
3621 if (
psa->fRTL &&
psa->fLogicalOrder)
3630 reordered_glyphs[
i] = pwGlyphs[
cGlyphs - 1 -
i];
3637 lpDx[
i * 2] = piAdvance[orig_index];
3638 lpDx[
i * 2 + 1] = 0;
3644 x += pGoffset[orig_index].
du *
dir;
3645 y += pGoffset[orig_index].
dv;
3649 lpDx[(
i - 1) * 2] += pGoffset[orig_index].du *
dir;
3650 lpDx[(
i - 1) * 2 + 1] += pGoffset[orig_index].dv;
3652 lpDx[
i * 2] -= pGoffset[orig_index].
du *
dir;
3653 lpDx[
i * 2 + 1] -= pGoffset[orig_index].
dv;
3660 if (reordered_glyphs != pwGlyphs)
heap_free( reordered_glyphs );
3757 TRACE(
"(%d, %p, %p, %p)\n", runs,
level, vistolog, logtovis);
3759 if (!
level || (!vistolog && !logtovis))
3762 if (!(indexs =
heap_calloc(runs,
sizeof(*indexs))))
3767 for( ich = 0; ich < runs; ich++)
3773 memcpy(vistolog, indexs, runs *
sizeof(*vistolog));
3778 for( ich = 0; ich < runs; ich++)
3784 memcpy(logtovis, indexs, runs *
sizeof(*logtovis));
3809 TRACE(
"%p, %p\n", ssa, piDx);
3811 if (!analysis)
return S_FALSE;
3822 for (
j = 0;
j < cChar;
j++)
3830 for (
k = 0;
k < clust_size;
k++)
3858 TRACE(
"(%p)\n", ssa);
3881 TRACE(
"(%p)\n", ssa);
3883 if (!analysis)
return NULL;
3890 analysis->
sz.
cx = 0;
3900 return &analysis->
sz;
3919 TRACE(
"(%p)\n", ssa);
3921 if (!analysis)
return NULL;
3942 TRACE(
"(%p)\n", ssa);
3944 if (!analysis)
return NULL;
3967 TRACE(
"(%p)\n", ssa);
3969 if (!analysis)
return S_FALSE;
3999 const int *advances,
const WORD *log_clust,
4002 int i,
next = 0, direction;
4004 TRACE(
"(%p, %d, %d, %p, %p, %p, %p)\n",
4005 sa, nbchars, nbglyphs, advances, log_clust, sva, widths);
4007 if (
sa->fRTL && !
sa->fLogicalOrder)
4012 for (
i = 0;
i < nbchars;
i++)
4018 for (
j = 0;
j < clust_size;
j++)
4056 FIXME(
"(%p, %d, %d, %p, %p, %p, %p, %p, %p)\n",
4057 dx, num_chars, num_glyphs, log_clust, sva,
advance,
sa,
abc, justify);
4059 for (
i = 0;
i < num_chars;
i++) justify[
i] =
advance[
i];
4064 int num_glyphs,
int dx,
int min_kashida,
int *justify)
4068 FIXME(
"(%p, %p, %d, %d, %d, %p)\n", sva,
advance, num_glyphs,
dx, min_kashida, justify);
4070 for (
i = 0;
i < num_glyphs;
i++) justify[
i] =
advance[
i];
4105 gbLpkPresent =
TRUE;
_STLP_MOVE_TO_STD_NAMESPACE void _STLP_CALL advance(_InputIterator &__i, _Distance __n)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
static struct sockaddr_in sa
static void * heap_alloc(size_t len)
static BOOL heap_free(void *mem)
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)
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)
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)
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)
GLint GLint GLint GLint GLint x
GLuint GLuint GLsizei count
GLuint GLuint GLsizei GLenum type
GLint GLint GLint GLint GLint GLint y
GLint GLint GLsizei GLsizei height
GLint GLint GLsizei width
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
_Check_return_ _CRT_JIT_INTRINSIC double __cdecl fabs(_In_ double x)
const WCHAR DECLSPEC_HIDDEN wine_mirror_map[3544]
#define memcpy(s1, s2, n)
static UINT UINT LPWORD LPABC abc
static UINT UINT LPWORD glyphs
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
static float(__cdecl *square_half_float)(float x
static const WCHAR invalid[]
static SCRIPT_CACHE SCRIPT_ANALYSIS OPENTYPE_TAG OPENTYPE_TAG int TEXTRANGE_PROPERTIES int const WCHAR int cChars
static SCRIPT_CACHE SCRIPT_ANALYSIS OPENTYPE_TAG tagScript
static SCRIPT_CACHE SCRIPT_ANALYSIS * psa
static SCRIPT_CACHE * psc
static SCRIPT_CACHE SCRIPT_ANALYSIS OPENTYPE_TAG int OPENTYPE_TAG * pLangSysTags
static SCRIPT_CACHE SCRIPT_ANALYSIS OPENTYPE_TAG OPENTYPE_TAG int TEXTRANGE_PROPERTIES int const WCHAR int int WORD SCRIPT_CHARPROP WORD SCRIPT_GLYPHPROP int * pcGlyphs
static SCRIPT_CACHE SCRIPT_ANALYSIS OPENTYPE_TAG OPENTYPE_TAG int OPENTYPE_TAG * pFeatureTags
static SCRIPT_CACHE SCRIPT_ANALYSIS OPENTYPE_TAG OPENTYPE_TAG int TEXTRANGE_PROPERTIES int const WCHAR int int WORD SCRIPT_CHARPROP WORD SCRIPT_GLYPHPROP * pOutGlyphProps
static int int const SCRIPT_CONTROL const SCRIPT_STATE SCRIPT_ITEM * pItems
static int int const SCRIPT_CONTROL const SCRIPT_STATE SCRIPT_ITEM ULONG * pScriptTags
static int int const SCRIPT_CONTROL const SCRIPT_STATE * psState
static SCRIPT_CACHE SCRIPT_ANALYSIS OPENTYPE_TAG OPENTYPE_TAG int TEXTRANGE_PROPERTIES int const WCHAR int int WORD * pwLogClust
static SCRIPT_CACHE SCRIPT_ANALYSIS int cMaxTags
static SCRIPT_CACHE SCRIPT_ANALYSIS OPENTYPE_TAG OPENTYPE_TAG int TEXTRANGE_PROPERTIES int const WCHAR int int WORD SCRIPT_CHARPROP WORD * pwOutGlyphs
static SCRIPT_CACHE SCRIPT_ANALYSIS int OPENTYPE_TAG int * pcTags
static int int const SCRIPT_CONTROL const SCRIPT_STATE SCRIPT_ITEM ULONG int * pcItems
static SCRIPT_CACHE SCRIPT_ANALYSIS OPENTYPE_TAG OPENTYPE_TAG int TEXTRANGE_PROPERTIES int const WCHAR int int cMaxGlyphs
static SCRIPT_CACHE SCRIPT_ANALYSIS OPENTYPE_TAG OPENTYPE_TAG int TEXTRANGE_PROPERTIES int cRanges
static int int const SCRIPT_CONTROL * psControl
static SCRIPT_CACHE SCRIPT_ANALYSIS OPENTYPE_TAG OPENTYPE_TAG int TEXTRANGE_PROPERTIES ** rpRangeProperties
static SCRIPT_CACHE SCRIPT_ANALYSIS OPENTYPE_TAG OPENTYPE_TAG int * rcRangeChars
static SCRIPT_CACHE SCRIPT_ANALYSIS OPENTYPE_TAG OPENTYPE_TAG int TEXTRANGE_PROPERTIES int const WCHAR * pwcChars
static SCRIPT_CACHE SCRIPT_ANALYSIS OPENTYPE_TAG OPENTYPE_TAG tagLangSys
static SCRIPT_CACHE SCRIPT_ANALYSIS OPENTYPE_TAG OPENTYPE_TAG int TEXTRANGE_PROPERTIES int const WCHAR int int WORD SCRIPT_CHARPROP * pCharProps
#define LOCALE_USER_DEFAULT
DWORD OpenType_CMAP_GetGlyphIndex(HDC hdc, ScriptCache *psc, DWORD utf32c, WORD *glyph_index, DWORD flags)
static unsigned __int64 next
VOID WINAPI LpkPresent(VOID)
#define LANGIDFROMLCID(l)
static void * heap_calloc(SIZE_T count, SIZE_T size)
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
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)
void 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)
WCHAR lfFaceName[LF_FACESIZE]
SCRIPT_FONTPROPERTIES sfp
SCRIPT_LOGATTR * logattrs
LIST_ENTRY ProcessLocksList
DWORD TraditionalDigitLanguage
DWORD NationalDigitLanguage
enum usp10_script numericScript
enum usp10_script punctScript
int BIDI_ReorderL2vLevel(int level, int *pIndexs, 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)
int BIDI_ReorderV2lLevel(int level, int *pIndexs, const BYTE *plevel, int cch, BOOL fReverse)
#define SCRIPT_DIGITSUBSTITUTE_TRADITIONAL
#define SCRIPT_DIGITSUBSTITUTE_NONE
#define SCRIPT_DIGITSUBSTITUTE_CONTEXT
#define SCRIPT_DIGITSUBSTITUTE_NATIONAL
@ SCRIPT_JUSTIFY_CHARACTER
#define GLYPH_BLOCK_SHIFT
@ 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[]
DWORD WINAPI GetFontData(HDC hdc, DWORD dwTable, DWORD dwOffset, LPVOID lpvBuffer, DWORD cbData)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
_In_ FONTOBJ _In_ ULONG _In_ ULONG cGlyphs
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)
DWORD WINAPI GetGlyphIndicesW(_In_ HDC hdc, _In_reads_(c) LPCWSTR lpstr, _In_ int c, _Out_writes_(c) LPWORD pgi, _In_ DWORD fl)
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)
BOOL WINAPI GetCharWidthW(_In_ HDC hdc, _In_ UINT iFirst, _In_ UINT iLast, _Out_writes_(iLast+1 - iFirst) LPINT lpBuffer)
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)
#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
DWORD WINAPI GetSysColor(_In_ int)
BOOL WINAPI CopyRect(_Out_ LPRECT, _In_ LPCRECT)
#define COLOR_HIGHLIGHTTEXT
_In_ int _Inout_ LPRECT lprc
static unsigned int block