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};
1997 int i, num_items = cString + 1;
1999 int i, num_items = 255;
2007 TRACE(
"(%p,%p,%d,%d,%d,0x%x,%d,%p,%p,%p,%p,%p,%p)\n",
2013 FIXME(
"Only Unicode strings are supported\n");
2019 if (!(analysis = heap_alloc_zero(
sizeof(*analysis))))
2045 if (!(iString =
heap_calloc(cString,
sizeof(*iString))))
2050 for (
i = 0;
i < cString;
i++)
2091 if (!(BidiLevel = heap_alloc_zero(analysis->
numItems)))
2114 int numGlyphsReturned;
2115 HFONT originalFont = 0x0;
2161 piAdvance, pGoffset, &analysis->
glyphs[
i].
abc);
2168 for (tabi = 0; tabi < cChar; tabi++)
2172 tab_x+=piAdvance[tabi];
2212 if (pva[glyph].fClusterStart)
2238 INT runStart, runEnd;
2240 HFONT oldFont = 0x0;
2244 TRACE(
"(%p,%d,%d,%d,%d,%d, 0x%1x, %d, %d)\n",
2245 ssa, iX, iY, iItem, cStart, cEnd, uOptions, fSelected, fDisabled);
2249 if ((cStart >= 0 && analysis->
pItem[iItem+1].
iCharPos <= cStart) ||
2280 if (cEnd >= 0 && cEnd < analysis->pItem[iItem+1].iCharPos)
2284 crc.
left = iX + off_x;
2288 if (cStart >=0 && runStart)
2292 crc.
left = iX + off_x;
2330 clust_glyph = iGlyph +
cGlyphs;
2346 iY, uOptions, &crc, &analysis->
pItem[iItem].
a,
NULL, 0,
2351 TRACE(
"ScriptTextOut hr=%08x\n",
hr);
2400 TRACE(
"(%p,%d,%d,0x%08x,%s,%d,%d,%d)\n",
2413 if (iMinSel < iMaxSel && (iMinSel > 0 || iMaxSel > 0))
2415 if (iMaxSel > 0 && iMinSel < 0)
2438 TRACE(
"(%p), %d, %d, (%p)\n", ssa, icp, fTrailing, pX);
2440 if (!ssa || !pX)
return S_FALSE;
2470 if (icp >= analysis->
pItem[
i+1].
iCharPos || icp < analysis->pItem[
i].iCharPos)
2500 TRACE(
"(%p), %d, (%p), (%p)\n", ssa, iX, piCh, piTrailing);
2502 if (!ssa || !piCh || !piTrailing)
return S_FALSE;
2511 *piTrailing =
FALSE;
2551 &analysis->
pItem[
i].
a, piCh, piTrailing);
2559 *piTrailing =
FALSE;
2583 TRACE(
"(%p)\n", pssa);
2616 int direction,
int* iCluster,
int *check_out)
2622 for (
check =
item+direction; check < cChars && check >= 0;
check+=direction)
2627 if (iCluster && *iCluster == -1)
2651 if (glyph > log_clust_max)
2654 for (glyph+=direction; glyph < cGlyphs && glyph >= 0; glyph +=direction)
2659 if (glyph > log_clust_max)
2677 const int *piAdvance,
2686 float special_size = 0.0;
2691 TRACE(
"(%d,%d,%d,%d,%p,%p,%p,%p,%p)\n",
2695 if (
psa->fRTL && !
psa->fLogicalOrder)
2708 ERR(
"We do not handle non reversed clusters properly\n");
2714 iMaxPos += piAdvance[
item];
2720 if (iSpecial == -1 && (iCluster == -1 || iCluster+clust_size <=
item))
2734 for (glyph = clust; glyph <
cGlyphs; glyph++)
2738 iPosX += special_size;
2745 if (clust_size == 0)
2752 else if (iSpecial != -1)
2753 iPosX += special_size;
2760 if (clust_size == 0)
2764 iPosX += adv / (
float)clust_size;
2770 iPosX = iMaxPos - iPosX;
2776 TRACE(
"*piX=%d\n", *piX);
2790 if (!
size && start_index)
2798 else if (
size)
break;
2817 int cChars,
int cluster,
int direction)
2828 for (glyph_start = -1, glyph_end = -1; i < cChars && i >= 0 && (glyph_start < 0 || glyph_end < 0);
i+=direction)
2830 if (glyph_start < 0 &&
pwLogClust[
i] != cluster)
continue;
2842 FIXME(
"multi-glyph reversed clusters found\n");
2843 glyph_end = glyph_start + 1;
2848 for (
i = glyph_start+1;
i< glyph_end;
i++)
2850 if (psva[
i].fClusterStart)
2857 for (
advance = 0,
i = glyph_start;
i < glyph_end;
i++)
2880 const int *piAdvance,
2888 int glyph_index, cluster_index;
2891 TRACE(
"(%d,%d,%d,%p,%p,%p,%p,%p,%p)\n",
2893 psa, piCP, piTrailing);
2895 if (
psa->fRTL && !
psa->fLogicalOrder)
2921 FIXME(
"We do not handle non reversed clusters properly\n");
2929 for (glyph_index = -1, iPosX = iX; iPosX >=0 && glyph_index <
cGlyphs; iPosX -= piAdvance[glyph_index+1], glyph_index++)
2934 for (glyph_index = -1, iPosX = iX; iPosX > 0 && glyph_index <
cGlyphs; iPosX -= piAdvance[glyph_index+1], glyph_index++)
2938 TRACE(
"iPosX %i -> glyph_index %i (%i)\n", iPosX, glyph_index,
cGlyphs);
2941 if (glyph_index >= 0 && glyph_index <
cGlyphs)
2948 for (
i = 0, cluster_index =
pwLogClust[0]; i < cChars && pwLogClust[i] >= glyph_index; cluster_index=
pwLogClust[
i++])
2951 TRACE(
"cluster_index %i\n", cluster_index);
2953 if (direction < 0 && iPosX >= 0 && glyph_index != cluster_index)
2963 TRACE(
"first char index %i\n",
i);
2967 if (glyph_index != cluster_index ||
2968 (direction > 0 &&
abs(iPosX) <= (piAdvance[glyph_index] / 2)) ||
2969 (direction < 0 &&
abs(iPosX) >= (piAdvance[glyph_index] / 2)))
2983 for (adv = iPosX, part_index = cluster_index; part_index <= glyph_index; part_index++)
2984 adv += piAdvance[part_index];
2985 if (adv > iX) adv = iX;
2987 TRACE(
"Multi-char cluster, no snap\n");
2989 TRACE(
"advance %i divides into %f per char\n", cluster_advance, cluster_part_width);
2992 for (part_index = 0; adv >= 0; adv-=cluster_part_width, part_index++)
2994 if (part_index) part_index--;
2998 for (part_index = 0; adv > 0; adv-=cluster_part_width, part_index++)
3002 adv += cluster_part_width;
3007 TRACE(
"base_char %i part_index %i, leftover advance %f\n",
i, part_index, adv);
3015 if ((direction > 0 &&
fabs(adv) <= (cluster_part_width / 2.0)) ||
3016 (direction < 0 && adv &&
fabs(adv) >= (cluster_part_width / 2.0)))
3022 if ((direction > 0 &&
abs(iPosX) <= (piAdvance[glyph_index] / 2)) ||
3023 (direction < 0 &&
abs(iPosX) >= (piAdvance[glyph_index] / 2)))
3030 TRACE(
"Point falls outside of string\n");
3031 if (glyph_index < 0)
3049 TRACE(
"*piCP=%d\n", *piCP);
3050 TRACE(
"*piTrailing=%d\n", *piTrailing);
3102 if (!chars ||
len < 0)
3159 static int once = 0;
3161 TRACE(
"(%p, %p, %p, %s, %s, %p, %p, %d, %s, %d, %d, %p, %p, %p, %p, %p )\n",
3167 if (
psa)
TRACE(
"psa values: %d, %d, %d, %d, %d, %d, %d\n",
psa->eScript,
psa->fRTL,
psa->fLayoutRTL,
3168 psa->fLinkBefore,
psa->fLinkAfter,
psa->fLogicalOrder,
psa->fNoGlyphIndex);
3174 if(!once++)
FIXME(
"Ranges not supported yet\n");
3212 for (
i = 0,
g = 0, cluster = 0;
i <
cChars;
i++)
3227 rChars[
i] = chInput;
3284 TRACE(
"no glyph translation\n");
3296 if (
psa->fNoGlyphIndex)
3364 hr =
ScriptShapeOpenType(
hdc,
psc,
psa,
scriptInformation[
psa->eScript].
scriptTag, 0,
NULL,
NULL, 0,
pwcChars,
cChars,
cMaxGlyphs,
pwLogClust, charProps,
pwOutGlyphs, glyphProps,
pcGlyphs);
3369 psva[
i] = glyphProps[
i].sva;
3420 static int once = 0;
3422 TRACE(
"(%p, %p, %p, %s, %s, %p, %p, %d, %s, %p, %p, %d, %p, %p, %d, %p %p %p)\n",
3431 if (!pGoffset)
return E_FAIL;
3434 if (!once++)
FIXME(
"Ranges not supported yet\n");
3446 pGoffset[
i].
du = pGoffset[
i].
dv = 0;
3448 if (pGlyphProps[
i].sva.fZeroWidth)
3451 if (piAdvance) piAdvance[
i] = 0;
3455 if (
psa->fNoGlyphIndex)
3462 glyph = pwGlyphs[
i];
3507 if (pABC)
TRACE(
"Total for run: abcA=%d, abcB=%d, abcC=%d\n", pABC->
abcA, pABC->
abcB, pABC->
abcC);
3539 TRACE(
"(%p, %p, %p, %d, %p, %p, %p, %p, %p)\n",
hdc,
psc, pwGlyphs,
cGlyphs, psva,
psa,
3540 piAdvance, pGoffset, pABC);
3543 if (!pGoffset)
return E_FAIL;
3549 glyphProps[
i].sva = psva[
i];
3551 hr =
ScriptPlaceOpenType(
hdc,
psc,
psa,
scriptInformation[
psa->eScript].
scriptTag, 0,
NULL,
NULL, 0,
NULL,
NULL,
NULL, 0, pwGlyphs, glyphProps,
cGlyphs, piAdvance, pGoffset, pABC);
3581 TRACE(
"(%p,%p,%s,%d,0x%x,%p)\n",
hdc,
psc,
debugstr_wn(pwcInChars,
cChars),
3594 inChar = pwcInChars[
i];
3600 if (glyph == 0xffff)
3618 int iReserved,
const WORD *pwGlyphs,
int cGlyphs,
const int *piAdvance,
3619 const int *piJustify,
const GOFFSET *pGoffset)
3624 WORD *reordered_glyphs = (
WORD *)pwGlyphs;
3626 TRACE(
"(%p, %p, %d, %d, %08x, %s, %p, %p, %d, %p, %d, %p, %p, %p)\n",
3627 hdc,
psc,
x,
y, fuOptions,
wine_dbgstr_rect(
lprc),
psa, pwcReserved, iReserved, pwGlyphs,
cGlyphs,
3628 piAdvance, piJustify, pGoffset);
3634 fuOptions |= ETO_IGNORELANGUAGE;
3635 if (!
psa->fNoGlyphIndex)
3636 fuOptions |= ETO_GLYPH_INDEX;
3642 if (
psa->fRTL &&
psa->fLogicalOrder)
3651 reordered_glyphs[
i] = pwGlyphs[
cGlyphs - 1 -
i];
3658 lpDx[
i * 2] = piAdvance[orig_index];
3659 lpDx[
i * 2 + 1] = 0;
3665 x += pGoffset[orig_index].
du *
dir;
3666 y += pGoffset[orig_index].
dv;
3670 lpDx[(
i - 1) * 2] += pGoffset[orig_index].du *
dir;
3671 lpDx[(
i - 1) * 2 + 1] += pGoffset[orig_index].dv;
3673 lpDx[
i * 2] -= pGoffset[orig_index].
du *
dir;
3674 lpDx[
i * 2 + 1] -= pGoffset[orig_index].
dv;
3681 if (reordered_glyphs != pwGlyphs)
heap_free( reordered_glyphs );
3778 TRACE(
"(%d, %p, %p, %p)\n", runs,
level, vistolog, logtovis);
3780 if (!
level || (!vistolog && !logtovis))
3783 if (!(indexs =
heap_calloc(runs,
sizeof(*indexs))))
3788 for( ich = 0; ich < runs; ich++)
3794 memcpy(vistolog, indexs, runs *
sizeof(*vistolog));
3799 for( ich = 0; ich < runs; ich++)
3805 memcpy(logtovis, indexs, runs *
sizeof(*logtovis));
3830 TRACE(
"%p, %p\n", ssa, piDx);
3832 if (!analysis)
return S_FALSE;
3843 for (
j = 0;
j < cChar;
j++)
3851 for (
k = 0;
k < clust_size;
k++)
3879 TRACE(
"(%p)\n", ssa);
3902 TRACE(
"(%p)\n", ssa);
3904 if (!analysis)
return NULL;
3911 analysis->
sz.
cx = 0;
3921 return &analysis->
sz;
3940 TRACE(
"(%p)\n", ssa);
3942 if (!analysis)
return NULL;
3963 TRACE(
"(%p)\n", ssa);
3965 if (!analysis)
return NULL;
3988 TRACE(
"(%p)\n", ssa);
3990 if (!analysis)
return S_FALSE;
4020 const int *advances,
const WORD *log_clust,
4023 int i,
next = 0, direction;
4025 TRACE(
"(%p, %d, %d, %p, %p, %p, %p)\n",
4026 sa, nbchars, nbglyphs, advances, log_clust, sva, widths);
4028 if (
sa->fRTL && !
sa->fLogicalOrder)
4033 for (
i = 0;
i < nbchars;
i++)
4039 for (
j = 0;
j < clust_size;
j++)
4077 FIXME(
"(%p, %d, %d, %p, %p, %p, %p, %p, %p)\n",
4078 dx, num_chars, num_glyphs, log_clust, sva,
advance,
sa,
abc, justify);
4080 for (
i = 0;
i < num_chars;
i++) justify[
i] =
advance[
i];
4085 int num_glyphs,
int dx,
int min_kashida,
int *justify)
4089 FIXME(
"(%p, %p, %d, %d, %d, %p)\n", sva,
advance, num_glyphs,
dx, min_kashida, justify);
4091 for (
i = 0;
i < num_glyphs;
i++) justify[
i] =
advance[
i];
4126 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 void * heap_realloc(void *mem, size_t len)
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