Artifact cce453ef0465bd4e130cfa6e0d791e1bb03563b2:
- File
src/win32/usp10.d
-
2015-05-05 06:49:05
- part of checkin
[9b639cf2d6]
on branch trunk
- Working version for update to 2.067.
The problem was __gshared. Replacing it with TLS fixed the issue. Remaining problem is that "hack.d"'s CloseHandle hack is not working anymore.
(user: kinaba) [annotate]
-
2015-05-05 06:49:05
- part of checkin
[9b639cf2d6]
on branch trunk
- Working version for update to 2.067.
0000: 2f 2a 20 55 53 50 20 2d 20 55 6e 69 63 6f 64 65 /* USP - Unicode 0010: 20 43 6f 6d 70 6c 65 78 20 53 63 72 69 70 74 20 Complex Script 0020: 70 72 6f 63 65 73 73 6f 72 0d 0a 20 2a 20 68 74 processor.. * ht 0030: 74 70 3a 2f 2f 6d 73 64 6e 32 2e 6d 69 63 72 6f tp://msdn2.micro 0040: 73 6f 66 74 2e 63 6f 6d 2f 6c 69 62 72 61 72 79 soft.com/library 0050: 2f 6d 73 37 37 36 34 38 38 20 2a 2f 0d 0a 0d 0a /ms776488 */.... 0060: 0d 0a 6d 6f 64 75 6c 65 20 77 69 6e 33 32 2e 75 ..module win32.u 0070: 73 70 31 30 3b 0d 0a 69 6d 70 6f 72 74 20 77 69 sp10;..import wi 0080: 6e 33 32 2e 77 69 6e 64 6f 77 73 3b 0d 0a 0d 0a n32.windows;.... 0090: 0d 0a 0d 0a 2f 2a 20 55 6e 69 73 63 72 69 62 65 ..../* Uniscribe 00a0: 20 45 6e 75 6d 65 72 61 74 69 6f 6e 20 54 79 70 Enumeration Typ 00b0: 65 73 0d 0a 20 2a 20 68 74 74 70 3a 2f 2f 6d 73 es.. * http://ms 00c0: 64 6e 32 2e 6d 69 63 72 6f 73 6f 66 74 2e 63 6f dn2.microsoft.co 00d0: 6d 2f 6c 69 62 72 61 72 79 2f 6d 73 37 37 36 35 m/library/ms7765 00e0: 31 38 20 2a 2f 0d 0a 0d 0a 65 6e 75 6d 20 3a 20 18 */....enum : 00f0: 57 4f 52 44 20 7b 0d 0a 09 53 43 52 49 50 54 5f WORD {...SCRIPT_ 0100: 55 4e 44 45 46 49 4e 45 44 20 3d 20 30 2c 0d 0a UNDEFINED = 0,.. 0110: 7d 0d 0a 0d 0a 65 6e 75 6d 20 3a 20 44 57 4f 52 }....enum : DWOR 0120: 44 20 7b 0d 0a 09 53 47 43 4d 5f 52 54 4c 20 3d D {...SGCM_RTL = 0130: 20 30 78 30 30 30 30 30 30 30 31 2c 0d 0a 7d 0d 0x00000001,..}. 0140: 0a 0d 0a 65 6e 75 6d 20 3a 20 44 57 4f 52 44 20 ...enum : DWORD 0150: 7b 0d 0a 09 53 53 41 5f 50 41 53 53 57 4f 52 44 {...SSA_PASSWORD 0160: 20 20 20 20 20 20 20 20 3d 20 30 78 30 30 30 30 = 0x0000 0170: 30 30 30 31 2c 0d 0a 09 53 53 41 5f 54 41 42 20 0001,...SSA_TAB 0180: 20 20 20 20 20 20 20 20 20 20 20 20 3d 20 30 78 = 0x 0190: 30 30 30 30 30 30 30 32 2c 0d 0a 09 53 53 41 5f 00000002,...SSA_ 01a0: 43 4c 49 50 20 20 20 20 20 20 20 20 20 20 20 20 CLIP 01b0: 3d 20 30 78 30 30 30 30 30 30 30 34 2c 0d 0a 09 = 0x00000004,... 01c0: 53 53 41 5f 46 49 54 20 20 20 20 20 20 20 20 20 SSA_FIT 01d0: 20 20 20 20 3d 20 30 78 30 30 30 30 30 30 30 38 = 0x00000008 01e0: 2c 0d 0a 09 53 53 41 5f 44 5a 57 47 20 20 20 20 ,...SSA_DZWG 01f0: 20 20 20 20 20 20 20 20 3d 20 30 78 30 30 30 30 = 0x0000 0200: 30 30 31 30 2c 0d 0a 09 53 53 41 5f 46 41 4c 4c 0010,...SSA_FALL 0210: 42 41 43 4b 20 20 20 20 20 20 20 20 3d 20 30 78 BACK = 0x 0220: 30 30 30 30 30 30 32 30 2c 0d 0a 09 53 53 41 5f 00000020,...SSA_ 0230: 42 52 45 41 4b 20 20 20 20 20 20 20 20 20 20 20 BREAK 0240: 3d 20 30 78 30 30 30 30 30 30 34 30 2c 0d 0a 09 = 0x00000040,... 0250: 53 53 41 5f 47 4c 59 50 48 53 20 20 20 20 20 20 SSA_GLYPHS 0260: 20 20 20 20 3d 20 30 78 30 30 30 30 30 30 38 30 = 0x00000080 0270: 2c 0d 0a 09 53 53 41 5f 52 54 4c 20 20 20 20 20 ,...SSA_RTL 0280: 20 20 20 20 20 20 20 20 3d 20 30 78 30 30 30 30 = 0x0000 0290: 30 31 30 30 2c 0d 0a 09 53 53 41 5f 47 43 50 20 0100,...SSA_GCP 02a0: 20 20 20 20 20 20 20 20 20 20 20 20 3d 20 30 78 = 0x 02b0: 30 30 30 30 30 32 30 30 2c 0d 0a 09 53 53 41 5f 00000200,...SSA_ 02c0: 48 4f 54 4b 45 59 20 20 20 20 20 20 20 20 20 20 HOTKEY 02d0: 3d 20 30 78 30 30 30 30 30 34 30 30 2c 0d 0a 09 = 0x00000400,... 02e0: 53 53 41 5f 4d 45 54 41 46 49 4c 45 20 20 20 20 SSA_METAFILE 02f0: 20 20 20 20 3d 20 30 78 30 30 30 30 30 38 30 30 = 0x00000800 0300: 2c 0d 0a 09 53 53 41 5f 4c 49 4e 4b 20 20 20 20 ,...SSA_LINK 0310: 20 20 20 20 20 20 20 20 3d 20 30 78 30 30 30 30 = 0x0000 0320: 31 30 30 30 2c 0d 0a 09 53 53 41 5f 48 49 44 45 1000,...SSA_HIDE 0330: 48 4f 54 4b 45 59 20 20 20 20 20 20 3d 20 30 78 HOTKEY = 0x 0340: 30 30 30 30 32 30 30 30 2c 0d 0a 09 53 53 41 5f 00002000,...SSA_ 0350: 48 4f 54 4b 45 59 4f 4e 4c 59 20 20 20 20 20 20 HOTKEYONLY 0360: 3d 20 30 78 30 30 30 30 32 34 30 30 2c 0d 0a 09 = 0x00002400,... 0370: 53 53 41 5f 46 55 4c 4c 4d 45 41 53 55 52 45 20 SSA_FULLMEASURE 0380: 20 20 20 20 3d 20 30 78 30 34 30 30 30 30 30 30 = 0x04000000 0390: 2c 0d 0a 09 53 53 41 5f 4c 50 4b 41 4e 53 49 46 ,...SSA_LPKANSIF 03a0: 41 4c 4c 42 41 43 4b 20 3d 20 30 78 30 38 30 30 ALLBACK = 0x0800 03b0: 30 30 30 30 2c 0d 0a 09 53 53 41 5f 50 49 44 58 0000,...SSA_PIDX 03c0: 20 20 20 20 20 20 20 20 20 20 20 20 3d 20 30 78 = 0x 03d0: 31 30 30 30 30 30 30 30 2c 0d 0a 09 53 53 41 5f 10000000,...SSA_ 03e0: 4c 41 59 4f 55 54 52 54 4c 20 20 20 20 20 20 20 LAYOUTRTL 03f0: 3d 20 30 78 32 30 30 30 30 30 30 30 2c 0d 0a 09 = 0x20000000,... 0400: 53 53 41 5f 44 4f 4e 54 47 4c 59 50 48 20 20 20 SSA_DONTGLYPH 0410: 20 20 20 20 3d 20 30 78 34 30 30 30 30 30 30 30 = 0x40000000 0420: 2c 0d 0a 09 53 53 41 5f 4e 4f 4b 41 53 48 49 44 ,...SSA_NOKASHID 0430: 41 20 20 20 20 20 20 20 3d 20 30 78 38 30 30 30 A = 0x8000 0440: 30 30 30 30 2c 0d 0a 7d 0d 0a 0d 0a 65 6e 75 6d 0000,..}....enum 0450: 20 3a 20 44 57 4f 52 44 20 7b 0d 0a 09 53 49 43 : DWORD {...SIC 0460: 5f 43 4f 4d 50 4c 45 58 20 20 20 20 3d 20 31 2c _COMPLEX = 1, 0470: 0d 0a 09 53 49 43 5f 41 53 43 49 49 44 49 47 49 ...SIC_ASCIIDIGI 0480: 54 20 3d 20 32 2c 0d 0a 09 53 49 43 5f 4e 45 55 T = 2,...SIC_NEU 0490: 54 52 41 4c 20 20 20 20 3d 20 34 2c 0d 0a 7d 0d TRAL = 4,..}. 04a0: 0a 0d 0a 65 6e 75 6d 20 3a 20 44 57 4f 52 44 20 ...enum : DWORD 04b0: 7b 0d 0a 09 53 43 52 49 50 54 5f 44 49 47 49 54 {...SCRIPT_DIGIT 04c0: 53 55 42 53 54 49 54 55 54 45 5f 43 4f 4e 54 45 SUBSTITUTE_CONTE 04d0: 58 54 2c 0d 0a 09 53 43 52 49 50 54 5f 44 49 47 XT,...SCRIPT_DIG 04e0: 49 54 53 55 42 53 54 49 54 55 54 45 5f 4e 4f 4e ITSUBSTITUTE_NON 04f0: 45 2c 0d 0a 09 53 43 52 49 50 54 5f 44 49 47 49 E,...SCRIPT_DIGI 0500: 54 53 55 42 53 54 49 54 55 54 45 5f 4e 41 54 49 TSUBSTITUTE_NATI 0510: 4f 4e 41 4c 2c 0d 0a 09 53 43 52 49 50 54 5f 44 ONAL,...SCRIPT_D 0520: 49 47 49 54 53 55 42 53 54 49 54 55 54 45 5f 54 IGITSUBSTITUTE_T 0530: 52 41 44 49 54 49 4f 4e 41 4c 2c 0d 0a 7d 0d 0a RADITIONAL,..}.. 0540: 0d 0a 65 6e 75 6d 20 53 43 52 49 50 54 5f 4a 55 ..enum SCRIPT_JU 0550: 53 54 49 46 59 20 3a 20 57 4f 52 44 20 7b 0d 0a STIFY : WORD {.. 0560: 20 20 20 20 53 43 52 49 50 54 5f 4a 55 53 54 49 SCRIPT_JUSTI 0570: 46 59 5f 4e 4f 4e 45 2c 0d 0a 20 20 20 20 53 43 FY_NONE,.. SC 0580: 52 49 50 54 5f 4a 55 53 54 49 46 59 5f 41 52 41 RIPT_JUSTIFY_ARA 0590: 42 49 43 5f 42 4c 41 4e 4b 2c 0d 0a 20 20 20 20 BIC_BLANK,.. 05a0: 53 43 52 49 50 54 5f 4a 55 53 54 49 46 59 5f 43 SCRIPT_JUSTIFY_C 05b0: 48 41 52 41 43 54 45 52 2c 0d 0a 20 20 20 20 53 HARACTER,.. S 05c0: 43 52 49 50 54 5f 4a 55 53 54 49 46 59 5f 52 45 CRIPT_JUSTIFY_RE 05d0: 53 45 52 56 45 44 31 2c 0d 0a 20 20 20 20 53 43 SERVED1,.. SC 05e0: 52 49 50 54 5f 4a 55 53 54 49 46 59 5f 42 4c 41 RIPT_JUSTIFY_BLA 05f0: 4e 4b 2c 0d 0a 20 20 20 20 53 43 52 49 50 54 5f NK,.. SCRIPT_ 0600: 4a 55 53 54 49 46 59 5f 52 45 53 45 52 56 45 44 JUSTIFY_RESERVED 0610: 32 2c 0d 0a 20 20 20 20 53 43 52 49 50 54 5f 4a 2,.. SCRIPT_J 0620: 55 53 54 49 46 59 5f 52 45 53 45 52 56 45 44 33 USTIFY_RESERVED3 0630: 2c 0d 0a 20 20 20 20 53 43 52 49 50 54 5f 4a 55 ,.. SCRIPT_JU 0640: 53 54 49 46 59 5f 41 52 41 42 49 43 5f 4e 4f 52 STIFY_ARABIC_NOR 0650: 4d 41 4c 2c 0d 0a 20 20 20 20 53 43 52 49 50 54 MAL,.. SCRIPT 0660: 5f 4a 55 53 54 49 46 59 5f 41 52 41 42 49 43 5f _JUSTIFY_ARABIC_ 0670: 4b 41 53 48 49 44 41 2c 0d 0a 20 20 20 20 53 43 KASHIDA,.. SC 0680: 52 49 50 54 5f 4a 55 53 54 49 46 59 5f 41 52 41 RIPT_JUSTIFY_ARA 0690: 42 49 43 5f 41 4c 45 46 2c 0d 0a 20 20 20 20 53 BIC_ALEF,.. S 06a0: 43 52 49 50 54 5f 4a 55 53 54 49 46 59 5f 41 52 CRIPT_JUSTIFY_AR 06b0: 41 42 49 43 5f 48 41 2c 0d 0a 20 20 20 20 53 43 ABIC_HA,.. SC 06c0: 52 49 50 54 5f 4a 55 53 54 49 46 59 5f 41 52 41 RIPT_JUSTIFY_ARA 06d0: 42 49 43 5f 52 41 2c 0d 0a 20 20 20 20 53 43 52 BIC_RA,.. SCR 06e0: 49 50 54 5f 4a 55 53 54 49 46 59 5f 41 52 41 42 IPT_JUSTIFY_ARAB 06f0: 49 43 5f 42 41 2c 0d 0a 20 20 20 20 53 43 52 49 IC_BA,.. SCRI 0700: 50 54 5f 4a 55 53 54 49 46 59 5f 41 52 41 42 49 PT_JUSTIFY_ARABI 0710: 43 5f 42 41 52 41 2c 0d 0a 20 20 20 20 53 43 52 C_BARA,.. SCR 0720: 49 50 54 5f 4a 55 53 54 49 46 59 5f 41 52 41 42 IPT_JUSTIFY_ARAB 0730: 49 43 5f 53 45 45 4e 2c 0d 0a 20 20 20 20 53 43 IC_SEEN,.. SC 0740: 52 49 50 54 5f 4a 55 53 54 49 46 59 5f 41 52 41 RIPT_JUSTIFY_ARA 0750: 42 49 43 5f 53 45 45 4e 5f 4d 2c 0d 0a 7d 0d 0a BIC_SEEN_M,..}.. 0760: 0d 0a 0d 0a 0d 0a 2f 2a 20 55 6e 69 73 63 72 69 ....../* Uniscri 0770: 62 65 20 53 74 72 75 63 74 75 72 65 73 0d 0a 20 be Structures.. 0780: 2a 20 68 74 74 70 3a 2f 2f 6d 73 64 6e 32 2e 6d * http://msdn2.m 0790: 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 2f 6c 69 62 icrosoft.com/lib 07a0: 72 61 72 79 2f 6d 73 37 37 36 34 37 39 20 2a 2f rary/ms776479 */ 07b0: 0d 0a 0d 0a 61 6c 69 61 73 20 76 6f 69 64 2a 20 ....alias void* 07c0: 53 43 52 49 50 54 5f 43 41 43 48 45 3b 0d 0a 61 SCRIPT_CACHE;..a 07d0: 6c 69 61 73 20 76 6f 69 64 2a 20 53 43 52 49 50 lias void* SCRIP 07e0: 54 5f 53 54 52 49 4e 47 5f 41 4e 41 4c 59 53 49 T_STRING_ANALYSI 07f0: 53 3b 0d 0a 0d 0a 65 78 74 65 72 6e 20 28 43 29 S;....extern (C) 0800: 0d 0a 7b 0d 0a 09 73 74 72 75 63 74 20 53 43 52 ..{...struct SCR 0810: 49 50 54 5f 43 4f 4e 54 52 4f 4c 0d 0a 09 7b 0d IPT_CONTROL...{. 0820: 0a 09 09 70 72 69 76 61 74 65 20 44 57 4f 52 44 ...private DWORD 0830: 20 5f 62 69 74 66 69 65 6c 64 3b 0d 0a 09 09 44 _bitfield;....D 0840: 57 4f 52 44 20 75 44 65 66 61 75 6c 74 4c 61 6e WORD uDefaultLan 0850: 67 75 61 67 65 28 29 20 20 20 20 20 20 20 20 20 guage() 0860: 20 20 20 20 7b 20 72 65 74 75 72 6e 20 28 5f 62 { return (_b 0870: 69 74 66 69 65 6c 64 20 3e 3e 20 30 29 20 26 20 itfield >> 0) & 0880: 30 78 46 46 46 46 3b 20 7d 0d 0a 09 09 44 57 4f 0xFFFF; }....DWO 0890: 52 44 20 75 44 65 66 61 75 6c 74 4c 61 6e 67 75 RD uDefaultLangu 08a0: 61 67 65 28 44 57 4f 52 44 20 76 61 6c 29 20 20 age(DWORD val) 08b0: 20 20 7b 20 5f 62 69 74 66 69 65 6c 64 20 3d 20 { _bitfield = 08c0: 63 61 73 74 28 44 57 4f 52 44 29 28 28 5f 62 69 cast(DWORD)((_bi 08d0: 74 66 69 65 6c 64 20 26 20 30 78 46 46 46 46 46 tfield & 0xFFFFF 08e0: 46 46 46 46 46 46 46 30 30 30 30 29 20 7c 20 28 FFFFFFF0000) | ( 08f0: 76 61 6c 20 3c 3c 20 30 29 29 3b 20 72 65 74 75 val << 0)); retu 0900: 72 6e 20 76 61 6c 3b 20 7d 0d 0a 09 09 44 57 4f rn val; }....DWO 0910: 52 44 20 66 43 6f 6e 74 65 78 74 44 69 67 69 74 RD fContextDigit 0920: 73 28 29 20 20 20 20 20 20 20 20 20 20 20 20 20 s() 0930: 20 20 7b 20 72 65 74 75 72 6e 20 28 5f 62 69 74 { return (_bit 0940: 66 69 65 6c 64 20 3e 3e 20 31 36 29 20 26 20 30 field >> 16) & 0 0950: 78 31 3b 20 7d 0d 0a 09 09 44 57 4f 52 44 20 66 x1; }....DWORD f 0960: 43 6f 6e 74 65 78 74 44 69 67 69 74 73 28 44 57 ContextDigits(DW 0970: 4f 52 44 20 76 61 6c 29 20 20 20 20 20 20 7b 20 ORD val) { 0980: 5f 62 69 74 66 69 65 6c 64 20 3d 20 63 61 73 74 _bitfield = cast 0990: 28 44 57 4f 52 44 29 28 28 5f 62 69 74 66 69 65 (DWORD)((_bitfie 09a0: 6c 64 20 26 20 30 78 46 46 46 46 46 46 46 46 46 ld & 0xFFFFFFFFF 09b0: 46 46 45 46 46 46 46 29 20 7c 20 28 76 61 6c 20 FFEFFFF) | (val 09c0: 3c 3c 20 31 36 29 29 3b 20 72 65 74 75 72 6e 20 << 16)); return 09d0: 76 61 6c 3b 20 7d 0d 0a 09 09 44 57 4f 52 44 20 val; }....DWORD 09e0: 66 49 6e 76 65 72 74 50 72 65 42 6f 75 6e 64 44 fInvertPreBoundD 09f0: 69 72 28 29 20 20 20 20 20 20 20 20 20 20 20 7b ir() { 0a00: 20 72 65 74 75 72 6e 20 28 5f 62 69 74 66 69 65 return (_bitfie 0a10: 6c 64 20 3e 3e 20 31 37 29 20 26 20 30 78 31 3b ld >> 17) & 0x1; 0a20: 20 7d 0d 0a 09 09 44 57 4f 52 44 20 66 49 6e 76 }....DWORD fInv 0a30: 65 72 74 50 72 65 42 6f 75 6e 64 44 69 72 28 44 ertPreBoundDir(D 0a40: 57 4f 52 44 20 76 61 6c 29 20 20 7b 20 5f 62 69 WORD val) { _bi 0a50: 74 66 69 65 6c 64 20 3d 20 63 61 73 74 28 44 57 tfield = cast(DW 0a60: 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c 64 20 ORD)((_bitfield 0a70: 26 20 30 78 46 46 46 46 46 46 46 46 46 46 46 44 & 0xFFFFFFFFFFFD 0a80: 46 46 46 46 29 20 7c 20 28 76 61 6c 20 3c 3c 20 FFFF) | (val << 0a90: 31 37 29 29 3b 20 72 65 74 75 72 6e 20 76 61 6c 17)); return val 0aa0: 3b 20 7d 0d 0a 09 09 44 57 4f 52 44 20 66 49 6e ; }....DWORD fIn 0ab0: 76 65 72 74 50 6f 73 74 42 6f 75 6e 64 44 69 72 vertPostBoundDir 0ac0: 28 29 20 20 20 20 20 20 20 20 20 20 7b 20 72 65 () { re 0ad0: 74 75 72 6e 20 28 5f 62 69 74 66 69 65 6c 64 20 turn (_bitfield 0ae0: 3e 3e 20 31 38 29 20 26 20 30 78 31 3b 20 7d 0d >> 18) & 0x1; }. 0af0: 0a 09 09 44 57 4f 52 44 20 66 49 6e 76 65 72 74 ...DWORD fInvert 0b00: 50 6f 73 74 42 6f 75 6e 64 44 69 72 28 44 57 4f PostBoundDir(DWO 0b10: 52 44 20 76 61 6c 29 20 7b 20 5f 62 69 74 66 69 RD val) { _bitfi 0b20: 65 6c 64 20 3d 20 63 61 73 74 28 44 57 4f 52 44 eld = cast(DWORD 0b30: 29 28 28 5f 62 69 74 66 69 65 6c 64 20 26 20 30 )((_bitfield & 0 0b40: 78 46 46 46 46 46 46 46 46 46 46 46 42 46 46 46 xFFFFFFFFFFFBFFF 0b50: 46 29 20 7c 20 28 76 61 6c 20 3c 3c 20 31 38 29 F) | (val << 18) 0b60: 29 3b 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d ); return val; } 0b70: 0d 0a 09 09 44 57 4f 52 44 20 66 4c 69 6e 6b 53 ....DWORD fLinkS 0b80: 74 72 69 6e 67 42 65 66 6f 72 65 28 29 20 20 20 tringBefore() 0b90: 20 20 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 { retur 0ba0: 6e 20 28 5f 62 69 74 66 69 65 6c 64 20 3e 3e 20 n (_bitfield >> 0bb0: 31 39 29 20 26 20 30 78 31 3b 20 7d 0d 0a 09 09 19) & 0x1; }.... 0bc0: 44 57 4f 52 44 20 66 4c 69 6e 6b 53 74 72 69 6e DWORD fLinkStrin 0bd0: 67 42 65 66 6f 72 65 28 44 57 4f 52 44 20 76 61 gBefore(DWORD va 0be0: 6c 29 20 20 20 7b 20 5f 62 69 74 66 69 65 6c 64 l) { _bitfield 0bf0: 20 3d 20 63 61 73 74 28 44 57 4f 52 44 29 28 28 = cast(DWORD)(( 0c00: 5f 62 69 74 66 69 65 6c 64 20 26 20 30 78 46 46 _bitfield & 0xFF 0c10: 46 46 46 46 46 46 46 46 46 37 46 46 46 46 29 20 FFFFFFFFF7FFFF) 0c20: 7c 20 28 76 61 6c 20 3c 3c 20 31 39 29 29 3b 20 | (val << 19)); 0c30: 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0d 0a 09 return val; }... 0c40: 09 44 57 4f 52 44 20 66 4c 69 6e 6b 53 74 72 69 .DWORD fLinkStri 0c50: 6e 67 41 66 74 65 72 28 29 20 20 20 20 20 20 20 ngAfter() 0c60: 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 28 { return ( 0c70: 5f 62 69 74 66 69 65 6c 64 20 3e 3e 20 32 30 29 _bitfield >> 20) 0c80: 20 26 20 30 78 31 3b 20 7d 0d 0a 09 09 44 57 4f & 0x1; }....DWO 0c90: 52 44 20 66 4c 69 6e 6b 53 74 72 69 6e 67 41 66 RD fLinkStringAf 0ca0: 74 65 72 28 44 57 4f 52 44 20 76 61 6c 29 20 20 ter(DWORD val) 0cb0: 20 20 7b 20 5f 62 69 74 66 69 65 6c 64 20 3d 20 { _bitfield = 0cc0: 63 61 73 74 28 44 57 4f 52 44 29 28 28 5f 62 69 cast(DWORD)((_bi 0cd0: 74 66 69 65 6c 64 20 26 20 30 78 46 46 46 46 46 tfield & 0xFFFFF 0ce0: 46 46 46 46 46 45 46 46 46 46 46 29 20 7c 20 28 FFFFFEFFFFF) | ( 0cf0: 76 61 6c 20 3c 3c 20 32 30 29 29 3b 20 72 65 74 val << 20)); ret 0d00: 75 72 6e 20 76 61 6c 3b 20 7d 0d 0a 09 09 44 57 urn val; }....DW 0d10: 4f 52 44 20 66 4e 65 75 74 72 61 6c 4f 76 65 72 ORD fNeutralOver 0d20: 72 69 64 65 28 29 20 20 20 20 20 20 20 20 20 20 ride() 0d30: 20 20 20 7b 20 72 65 74 75 72 6e 20 28 5f 62 69 { return (_bi 0d40: 74 66 69 65 6c 64 20 3e 3e 20 32 31 29 20 26 20 tfield >> 21) & 0d50: 30 78 31 3b 20 7d 0d 0a 09 09 44 57 4f 52 44 20 0x1; }....DWORD 0d60: 66 4e 65 75 74 72 61 6c 4f 76 65 72 72 69 64 65 fNeutralOverride 0d70: 28 44 57 4f 52 44 20 76 61 6c 29 20 20 20 20 7b (DWORD val) { 0d80: 20 5f 62 69 74 66 69 65 6c 64 20 3d 20 63 61 73 _bitfield = cas 0d90: 74 28 44 57 4f 52 44 29 28 28 5f 62 69 74 66 69 t(DWORD)((_bitfi 0da0: 65 6c 64 20 26 20 30 78 46 46 46 46 46 46 46 46 eld & 0xFFFFFFFF 0db0: 46 46 44 46 46 46 46 46 29 20 7c 20 28 76 61 6c FFDFFFFF) | (val 0dc0: 20 3c 3c 20 32 31 29 29 3b 20 72 65 74 75 72 6e << 21)); return 0dd0: 20 76 61 6c 3b 20 7d 0d 0a 09 09 44 57 4f 52 44 val; }....DWORD 0de0: 20 66 4e 75 6d 65 72 69 63 4f 76 65 72 72 69 64 fNumericOverrid 0df0: 65 28 29 20 20 20 20 20 20 20 20 20 20 20 20 20 e() 0e00: 7b 20 72 65 74 75 72 6e 20 28 5f 62 69 74 66 69 { return (_bitfi 0e10: 65 6c 64 20 3e 3e 20 32 32 29 20 26 20 30 78 31 eld >> 22) & 0x1 0e20: 3b 20 7d 0d 0a 09 09 44 57 4f 52 44 20 66 4e 75 ; }....DWORD fNu 0e30: 6d 65 72 69 63 4f 76 65 72 72 69 64 65 28 44 57 mericOverride(DW 0e40: 4f 52 44 20 76 61 6c 29 20 20 20 20 7b 20 5f 62 ORD val) { _b 0e50: 69 74 66 69 65 6c 64 20 3d 20 63 61 73 74 28 44 itfield = cast(D 0e60: 57 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c 64 WORD)((_bitfield 0e70: 20 26 20 30 78 46 46 46 46 46 46 46 46 46 46 42 & 0xFFFFFFFFFFB 0e80: 46 46 46 46 46 29 20 7c 20 28 76 61 6c 20 3c 3c FFFFF) | (val << 0e90: 20 32 32 29 29 3b 20 72 65 74 75 72 6e 20 76 61 22)); return va 0ea0: 6c 3b 20 7d 0d 0a 09 09 44 57 4f 52 44 20 66 4c l; }....DWORD fL 0eb0: 65 67 61 63 79 42 69 64 69 43 6c 61 73 73 28 29 egacyBidiClass() 0ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 72 { r 0ed0: 65 74 75 72 6e 20 28 5f 62 69 74 66 69 65 6c 64 eturn (_bitfield 0ee0: 20 3e 3e 20 32 33 29 20 26 20 30 78 31 3b 20 7d >> 23) & 0x1; } 0ef0: 0d 0a 09 09 44 57 4f 52 44 20 66 4c 65 67 61 63 ....DWORD fLegac 0f00: 79 42 69 64 69 43 6c 61 73 73 28 44 57 4f 52 44 yBidiClass(DWORD 0f10: 20 76 61 6c 29 20 20 20 20 7b 20 5f 62 69 74 66 val) { _bitf 0f20: 69 65 6c 64 20 3d 20 63 61 73 74 28 44 57 4f 52 ield = cast(DWOR 0f30: 44 29 28 28 5f 62 69 74 66 69 65 6c 64 20 26 20 D)((_bitfield & 0f40: 30 78 46 46 46 46 46 46 46 46 46 46 37 46 46 46 0xFFFFFFFFFF7FFF 0f50: 46 46 29 20 7c 20 28 76 61 6c 20 3c 3c 20 32 33 FF) | (val << 23 0f60: 29 29 3b 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 )); return val; 0f70: 7d 0d 0a 09 09 44 57 4f 52 44 20 66 52 65 73 65 }....DWORD fRese 0f80: 72 76 65 64 28 29 20 20 20 20 20 20 20 20 20 20 rved() 0f90: 20 20 20 20 20 20 20 20 20 20 7b 20 72 65 74 75 { retu 0fa0: 72 6e 20 28 5f 62 69 74 66 69 65 6c 64 20 3e 3e rn (_bitfield >> 0fb0: 20 32 34 29 20 26 20 30 78 46 46 3b 20 7d 0d 0a 24) & 0xFF; }.. 0fc0: 09 09 44 57 4f 52 44 20 66 52 65 73 65 72 76 65 ..DWORD fReserve 0fd0: 64 28 44 57 4f 52 44 20 76 61 6c 29 20 20 20 20 d(DWORD val) 0fe0: 20 20 20 20 20 20 20 7b 20 5f 62 69 74 66 69 65 { _bitfie 0ff0: 6c 64 20 3d 20 63 61 73 74 28 44 57 4f 52 44 29 ld = cast(DWORD) 1000: 28 28 5f 62 69 74 66 69 65 6c 64 20 26 20 30 78 ((_bitfield & 0x 1010: 46 46 46 46 46 46 46 46 30 30 46 46 46 46 46 46 FFFFFFFF00FFFFFF 1020: 29 20 7c 20 28 76 61 6c 20 3c 3c 20 32 34 29 29 ) | (val << 24)) 1030: 3b 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0d ; return val; }. 1040: 0a 09 7d 0d 0a 0d 0a 09 73 74 72 75 63 74 20 53 ..}.....struct S 1050: 43 52 49 50 54 5f 53 54 41 54 45 0d 0a 09 7b 0d CRIPT_STATE...{. 1060: 0a 09 09 70 72 69 76 61 74 65 20 57 4f 52 44 20 ...private WORD 1070: 5f 62 69 74 66 69 65 6c 64 3b 0d 0a 09 09 57 4f _bitfield;....WO 1080: 52 44 20 75 42 69 64 69 4c 65 76 65 6c 28 29 20 RD uBidiLevel() 1090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 10a0: 7b 20 72 65 74 75 72 6e 20 63 61 73 74 28 57 4f { return cast(WO 10b0: 52 44 29 28 28 5f 62 69 74 66 69 65 6c 64 20 3e RD)((_bitfield > 10c0: 3e 20 30 29 20 26 20 30 78 31 46 29 3b 20 7d 0d > 0) & 0x1F); }. 10d0: 0a 09 09 57 4f 52 44 20 75 42 69 64 69 4c 65 76 ...WORD uBidiLev 10e0: 65 6c 28 57 4f 52 44 20 76 61 6c 29 20 20 20 20 el(WORD val) 10f0: 20 20 20 20 20 7b 20 5f 62 69 74 66 69 65 6c 64 { _bitfield 1100: 20 3d 20 63 61 73 74 28 57 4f 52 44 29 28 28 5f = cast(WORD)((_ 1110: 62 69 74 66 69 65 6c 64 20 26 20 30 78 46 46 46 bitfield & 0xFFF 1120: 46 46 46 46 46 46 46 46 46 46 46 45 30 29 20 7c FFFFFFFFFFFE0) | 1130: 20 28 76 61 6c 20 3c 3c 20 30 29 29 3b 20 72 65 (val << 0)); re 1140: 74 75 72 6e 20 76 61 6c 3b 20 7d 0d 0a 09 09 57 turn val; }....W 1150: 4f 52 44 20 66 4f 76 65 72 72 69 64 65 44 69 72 ORD fOverrideDir 1160: 65 63 74 69 6f 6e 28 29 20 20 20 20 20 20 20 20 ection() 1170: 20 7b 20 72 65 74 75 72 6e 20 63 61 73 74 28 57 { return cast(W 1180: 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c 64 20 ORD)((_bitfield 1190: 3e 3e 20 35 29 20 26 20 30 78 31 29 3b 20 7d 0d >> 5) & 0x1); }. 11a0: 0a 09 09 57 4f 52 44 20 66 4f 76 65 72 72 69 64 ...WORD fOverrid 11b0: 65 44 69 72 65 63 74 69 6f 6e 28 57 4f 52 44 20 eDirection(WORD 11c0: 76 61 6c 29 20 7b 20 5f 62 69 74 66 69 65 6c 64 val) { _bitfield 11d0: 20 3d 20 63 61 73 74 28 57 4f 52 44 29 28 28 5f = cast(WORD)((_ 11e0: 62 69 74 66 69 65 6c 64 20 26 20 30 78 46 46 46 bitfield & 0xFFF 11f0: 46 46 46 46 46 46 46 46 46 46 46 44 46 29 20 7c FFFFFFFFFFFDF) | 1200: 20 28 76 61 6c 20 3c 3c 20 35 29 29 3b 20 72 65 (val << 5)); re 1210: 74 75 72 6e 20 76 61 6c 3b 20 7d 0d 0a 09 09 57 turn val; }....W 1220: 4f 52 44 20 66 49 6e 68 69 62 69 74 53 79 6d 53 ORD fInhibitSymS 1230: 77 61 70 28 29 20 20 20 20 20 20 20 20 20 20 20 wap() 1240: 20 7b 20 72 65 74 75 72 6e 20 63 61 73 74 28 57 { return cast(W 1250: 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c 64 20 ORD)((_bitfield 1260: 3e 3e 20 36 29 20 26 20 30 78 31 29 3b 20 7d 0d >> 6) & 0x1); }. 1270: 0a 09 09 57 4f 52 44 20 66 49 6e 68 69 62 69 74 ...WORD fInhibit 1280: 53 79 6d 53 77 61 70 28 57 4f 52 44 20 76 61 6c SymSwap(WORD val 1290: 29 20 20 20 20 7b 20 5f 62 69 74 66 69 65 6c 64 ) { _bitfield 12a0: 20 3d 20 63 61 73 74 28 57 4f 52 44 29 28 28 5f = cast(WORD)((_ 12b0: 62 69 74 66 69 65 6c 64 20 26 20 30 78 46 46 46 bitfield & 0xFFF 12c0: 46 46 46 46 46 46 46 46 46 46 46 42 46 29 20 7c FFFFFFFFFFFBF) | 12d0: 20 28 76 61 6c 20 3c 3c 20 36 29 29 3b 20 72 65 (val << 6)); re 12e0: 74 75 72 6e 20 76 61 6c 3b 20 7d 0d 0a 09 09 57 turn val; }....W 12f0: 4f 52 44 20 66 43 68 61 72 53 68 61 70 65 28 29 ORD fCharShape() 1300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1310: 20 7b 20 72 65 74 75 72 6e 20 63 61 73 74 28 57 { return cast(W 1320: 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c 64 20 ORD)((_bitfield 1330: 3e 3e 20 37 29 20 26 20 30 78 31 29 3b 20 7d 0d >> 7) & 0x1); }. 1340: 0a 09 09 57 4f 52 44 20 66 43 68 61 72 53 68 61 ...WORD fCharSha 1350: 70 65 28 57 4f 52 44 20 76 61 6c 29 20 20 20 20 pe(WORD val) 1360: 20 20 20 20 20 7b 20 5f 62 69 74 66 69 65 6c 64 { _bitfield 1370: 20 3d 20 63 61 73 74 28 57 4f 52 44 29 28 28 5f = cast(WORD)((_ 1380: 62 69 74 66 69 65 6c 64 20 26 20 30 78 46 46 46 bitfield & 0xFFF 1390: 46 46 46 46 46 46 46 46 46 46 46 37 46 29 20 7c FFFFFFFFFFF7F) | 13a0: 20 28 76 61 6c 20 3c 3c 20 37 29 29 3b 20 72 65 (val << 7)); re 13b0: 74 75 72 6e 20 76 61 6c 3b 20 7d 0d 0a 09 09 57 turn val; }....W 13c0: 4f 52 44 20 66 44 69 67 69 74 53 75 62 73 74 69 ORD fDigitSubsti 13d0: 74 75 74 65 28 29 20 20 20 20 20 20 20 20 20 20 tute() 13e0: 20 7b 20 72 65 74 75 72 6e 20 63 61 73 74 28 57 { return cast(W 13f0: 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c 64 20 ORD)((_bitfield 1400: 3e 3e 20 38 29 20 26 20 30 78 31 29 3b 20 7d 0d >> 8) & 0x1); }. 1410: 0a 09 09 57 4f 52 44 20 66 44 69 67 69 74 53 75 ...WORD fDigitSu 1420: 62 73 74 69 74 75 74 65 28 57 4f 52 44 20 76 61 bstitute(WORD va 1430: 6c 29 20 20 20 7b 20 5f 62 69 74 66 69 65 6c 64 l) { _bitfield 1440: 20 3d 20 63 61 73 74 28 57 4f 52 44 29 28 28 5f = cast(WORD)((_ 1450: 62 69 74 66 69 65 6c 64 20 26 20 30 78 46 46 46 bitfield & 0xFFF 1460: 46 46 46 46 46 46 46 46 46 46 45 46 46 29 20 7c FFFFFFFFFFEFF) | 1470: 20 28 76 61 6c 20 3c 3c 20 38 29 29 3b 20 72 65 (val << 8)); re 1480: 74 75 72 6e 20 76 61 6c 3b 20 7d 0d 0a 09 09 57 turn val; }....W 1490: 4f 52 44 20 66 49 6e 68 69 62 69 74 4c 69 67 61 ORD fInhibitLiga 14a0: 74 65 28 29 20 20 20 20 20 20 20 20 20 20 20 20 te() 14b0: 20 7b 20 72 65 74 75 72 6e 20 63 61 73 74 28 57 { return cast(W 14c0: 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c 64 20 ORD)((_bitfield 14d0: 3e 3e 20 39 29 20 26 20 30 78 31 29 3b 20 7d 0d >> 9) & 0x1); }. 14e0: 0a 09 09 57 4f 52 44 20 66 49 6e 68 69 62 69 74 ...WORD fInhibit 14f0: 4c 69 67 61 74 65 28 57 4f 52 44 20 76 61 6c 29 Ligate(WORD val) 1500: 20 20 20 20 20 7b 20 5f 62 69 74 66 69 65 6c 64 { _bitfield 1510: 20 3d 20 63 61 73 74 28 57 4f 52 44 29 28 28 5f = cast(WORD)((_ 1520: 62 69 74 66 69 65 6c 64 20 26 20 30 78 46 46 46 bitfield & 0xFFF 1530: 46 46 46 46 46 46 46 46 46 46 44 46 46 29 20 7c FFFFFFFFFFDFF) | 1540: 20 28 76 61 6c 20 3c 3c 20 39 29 29 3b 20 72 65 (val << 9)); re 1550: 74 75 72 6e 20 76 61 6c 3b 20 7d 0d 0a 09 09 57 turn val; }....W 1560: 4f 52 44 20 66 44 69 73 70 6c 61 79 5a 57 47 28 ORD fDisplayZWG( 1570: 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ) 1580: 20 7b 20 72 65 74 75 72 6e 20 63 61 73 74 28 57 { return cast(W 1590: 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c 64 20 ORD)((_bitfield 15a0: 3e 3e 20 31 30 29 20 26 20 30 78 31 29 3b 20 7d >> 10) & 0x1); } 15b0: 0d 0a 09 09 57 4f 52 44 20 66 44 69 73 70 6c 61 ....WORD fDispla 15c0: 79 5a 57 47 28 57 4f 52 44 20 76 61 6c 29 20 20 yZWG(WORD val) 15d0: 20 20 20 20 20 20 7b 20 5f 62 69 74 66 69 65 6c { _bitfiel 15e0: 64 20 3d 20 63 61 73 74 28 57 4f 52 44 29 28 28 d = cast(WORD)(( 15f0: 5f 62 69 74 66 69 65 6c 64 20 26 20 30 78 46 46 _bitfield & 0xFF 1600: 46 46 46 46 46 46 46 46 46 46 46 42 46 46 29 20 FFFFFFFFFFFBFF) 1610: 7c 20 28 76 61 6c 20 3c 3c 20 31 30 29 29 3b 20 | (val << 10)); 1620: 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0d 0a 09 return val; }... 1630: 09 57 4f 52 44 20 66 41 72 61 62 69 63 4e 75 6d .WORD fArabicNum 1640: 43 6f 6e 74 65 78 74 28 29 20 20 20 20 20 20 20 Context() 1650: 20 20 20 7b 20 72 65 74 75 72 6e 20 63 61 73 74 { return cast 1660: 28 57 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c (WORD)((_bitfiel 1670: 64 20 3e 3e 20 31 31 29 20 26 20 30 78 31 29 3b d >> 11) & 0x1); 1680: 20 7d 0d 0a 09 09 57 4f 52 44 20 66 41 72 61 62 }....WORD fArab 1690: 69 63 4e 75 6d 43 6f 6e 74 65 78 74 28 57 4f 52 icNumContext(WOR 16a0: 44 20 76 61 6c 29 20 20 7b 20 5f 62 69 74 66 69 D val) { _bitfi 16b0: 65 6c 64 20 3d 20 63 61 73 74 28 57 4f 52 44 29 eld = cast(WORD) 16c0: 28 28 5f 62 69 74 66 69 65 6c 64 20 26 20 30 78 ((_bitfield & 0x 16d0: 46 46 46 46 46 46 46 46 46 46 46 46 46 37 46 46 FFFFFFFFFFFFF7FF 16e0: 29 20 7c 20 28 76 61 6c 20 3c 3c 20 31 31 29 29 ) | (val << 11)) 16f0: 3b 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0d ; return val; }. 1700: 0a 09 09 57 4f 52 44 20 66 47 63 70 43 6c 75 73 ...WORD fGcpClus 1710: 74 65 72 73 28 29 20 20 20 20 20 20 20 20 20 20 ters() 1720: 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 63 61 { return ca 1730: 73 74 28 57 4f 52 44 29 28 28 5f 62 69 74 66 69 st(WORD)((_bitfi 1740: 65 6c 64 20 3e 3e 20 31 32 29 20 26 20 30 78 31 eld >> 12) & 0x1 1750: 29 3b 20 7d 0d 0a 09 09 57 4f 52 44 20 66 47 63 ); }....WORD fGc 1760: 70 43 6c 75 73 74 65 72 73 28 57 4f 52 44 20 76 pClusters(WORD v 1770: 61 6c 29 20 20 20 20 20 20 20 7b 20 5f 62 69 74 al) { _bit 1780: 66 69 65 6c 64 20 3d 20 63 61 73 74 28 57 4f 52 field = cast(WOR 1790: 44 29 28 28 5f 62 69 74 66 69 65 6c 64 20 26 20 D)((_bitfield & 17a0: 30 78 46 46 46 46 46 46 46 46 46 46 46 46 45 46 0xFFFFFFFFFFFFEF 17b0: 46 46 29 20 7c 20 28 76 61 6c 20 3c 3c 20 31 32 FF) | (val << 12 17c0: 29 29 3b 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 )); return val; 17d0: 7d 0d 0a 09 09 57 4f 52 44 20 66 52 65 73 65 72 }....WORD fReser 17e0: 76 65 64 28 29 20 20 20 20 20 20 20 20 20 20 20 ved() 17f0: 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 { return 1800: 63 61 73 74 28 57 4f 52 44 29 28 28 5f 62 69 74 cast(WORD)((_bit 1810: 66 69 65 6c 64 20 3e 3e 20 31 33 29 20 26 20 30 field >> 13) & 0 1820: 78 31 29 3b 20 7d 0d 0a 09 09 57 4f 52 44 20 66 x1); }....WORD f 1830: 52 65 73 65 72 76 65 64 28 57 4f 52 44 20 76 61 Reserved(WORD va 1840: 6c 29 20 20 20 20 20 20 20 20 20 20 7b 20 5f 62 l) { _b 1850: 69 74 66 69 65 6c 64 20 3d 20 63 61 73 74 28 57 itfield = cast(W 1860: 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c 64 20 ORD)((_bitfield 1870: 26 20 30 78 46 46 46 46 46 46 46 46 46 46 46 46 & 0xFFFFFFFFFFFF 1880: 44 46 46 46 29 20 7c 20 28 76 61 6c 20 3c 3c 20 DFFF) | (val << 1890: 31 33 29 29 3b 20 72 65 74 75 72 6e 20 76 61 6c 13)); return val 18a0: 3b 20 7d 0d 0a 09 09 57 4f 52 44 20 66 45 6e 67 ; }....WORD fEng 18b0: 69 6e 65 52 65 73 65 72 76 65 64 28 29 20 20 20 ineReserved() 18c0: 20 20 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 { retur 18d0: 6e 20 63 61 73 74 28 57 4f 52 44 29 28 28 5f 62 n cast(WORD)((_b 18e0: 69 74 66 69 65 6c 64 20 3e 3e 20 31 34 29 20 26 itfield >> 14) & 18f0: 20 30 78 33 29 3b 20 7d 0d 0a 09 09 57 4f 52 44 0x3); }....WORD 1900: 20 66 45 6e 67 69 6e 65 52 65 73 65 72 76 65 64 fEngineReserved 1910: 28 57 4f 52 44 20 76 61 6c 29 20 20 20 20 7b 20 (WORD val) { 1920: 5f 62 69 74 66 69 65 6c 64 20 3d 20 63 61 73 74 _bitfield = cast 1930: 28 57 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c (WORD)((_bitfiel 1940: 64 20 26 20 30 78 46 46 46 46 46 46 46 46 46 46 d & 0xFFFFFFFFFF 1950: 46 46 33 46 46 46 29 20 7c 20 28 76 61 6c 20 3c FF3FFF) | (val < 1960: 3c 20 31 34 29 29 3b 20 72 65 74 75 72 6e 20 76 < 14)); return v 1970: 61 6c 3b 20 7d 0d 0a 09 7d 0d 0a 0d 0a 0d 0a 09 al; }...}....... 1980: 73 74 72 75 63 74 20 53 43 52 49 50 54 5f 41 4e struct SCRIPT_AN 1990: 41 4c 59 53 49 53 0d 0a 09 7b 0d 0a 09 09 70 72 ALYSIS...{....pr 19a0: 69 76 61 74 65 20 57 4f 52 44 20 5f 62 69 74 66 ivate WORD _bitf 19b0: 69 65 6c 64 3b 0d 0a 09 09 57 4f 52 44 20 65 53 ield;....WORD eS 19c0: 63 72 69 70 74 28 29 20 20 20 20 20 20 20 20 20 cript() 19d0: 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 63 { return c 19e0: 61 73 74 28 57 4f 52 44 29 28 28 5f 62 69 74 66 ast(WORD)((_bitf 19f0: 69 65 6c 64 20 3e 3e 20 30 29 20 26 20 30 78 33 ield >> 0) & 0x3 1a00: 46 46 29 3b 20 7d 0d 0a 09 09 57 4f 52 44 20 65 FF); }....WORD e 1a10: 53 63 72 69 70 74 28 57 4f 52 44 20 76 61 6c 29 Script(WORD val) 1a20: 20 20 20 20 20 20 20 7b 20 5f 62 69 74 66 69 65 { _bitfie 1a30: 6c 64 20 3d 20 63 61 73 74 28 57 4f 52 44 29 28 ld = cast(WORD)( 1a40: 28 5f 62 69 74 66 69 65 6c 64 20 26 20 30 78 46 (_bitfield & 0xF 1a50: 46 46 46 46 46 46 46 46 46 46 46 46 43 30 30 29 FFFFFFFFFFFFC00) 1a60: 20 7c 20 28 76 61 6c 20 3c 3c 20 30 29 29 3b 20 | (val << 0)); 1a70: 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0d 0a 09 return val; }... 1a80: 09 57 4f 52 44 20 66 52 54 4c 28 29 20 20 20 20 .WORD fRTL() 1a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 { 1aa0: 72 65 74 75 72 6e 20 63 61 73 74 28 57 4f 52 44 return cast(WORD 1ab0: 29 28 28 5f 62 69 74 66 69 65 6c 64 20 3e 3e 20 )((_bitfield >> 1ac0: 31 30 29 20 26 20 30 78 31 29 3b 20 7d 0d 0a 09 10) & 0x1); }... 1ad0: 09 57 4f 52 44 20 66 52 54 4c 28 57 4f 52 44 20 .WORD fRTL(WORD 1ae0: 76 61 6c 29 20 20 20 20 20 20 20 20 20 20 7b 20 val) { 1af0: 5f 62 69 74 66 69 65 6c 64 20 3d 20 63 61 73 74 _bitfield = cast 1b00: 28 57 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c (WORD)((_bitfiel 1b10: 64 20 26 20 30 78 46 46 46 46 46 46 46 46 46 46 d & 0xFFFFFFFFFF 1b20: 46 46 46 42 46 46 29 20 7c 20 28 76 61 6c 20 3c FFFBFF) | (val < 1b30: 3c 20 31 30 29 29 3b 20 72 65 74 75 72 6e 20 76 < 10)); return v 1b40: 61 6c 3b 20 7d 0d 0a 09 09 57 4f 52 44 20 66 4c al; }....WORD fL 1b50: 61 79 6f 75 74 52 54 4c 28 29 20 20 20 20 20 20 ayoutRTL() 1b60: 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 63 { return c 1b70: 61 73 74 28 57 4f 52 44 29 28 28 5f 62 69 74 66 ast(WORD)((_bitf 1b80: 69 65 6c 64 20 3e 3e 20 31 31 29 20 26 20 30 78 ield >> 11) & 0x 1b90: 31 29 3b 20 7d 0d 0a 09 09 57 4f 52 44 20 66 4c 1); }....WORD fL 1ba0: 61 79 6f 75 74 52 54 4c 28 57 4f 52 44 20 76 61 ayoutRTL(WORD va 1bb0: 6c 29 20 20 20 20 7b 20 5f 62 69 74 66 69 65 6c l) { _bitfiel 1bc0: 64 20 3d 20 63 61 73 74 28 57 4f 52 44 29 28 28 d = cast(WORD)(( 1bd0: 5f 62 69 74 66 69 65 6c 64 20 26 20 30 78 46 46 _bitfield & 0xFF 1be0: 46 46 46 46 46 46 46 46 46 46 46 37 46 46 29 20 FFFFFFFFFFF7FF) 1bf0: 7c 20 28 76 61 6c 20 3c 3c 20 31 31 29 29 3b 20 | (val << 11)); 1c00: 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0d 0a 09 return val; }... 1c10: 09 57 4f 52 44 20 66 4c 69 6e 6b 42 65 66 6f 72 .WORD fLinkBefor 1c20: 65 28 29 20 20 20 20 20 20 20 20 20 20 20 7b 20 e() { 1c30: 72 65 74 75 72 6e 20 63 61 73 74 28 57 4f 52 44 return cast(WORD 1c40: 29 28 28 5f 62 69 74 66 69 65 6c 64 20 3e 3e 20 )((_bitfield >> 1c50: 31 32 29 20 26 20 30 78 31 29 3b 20 7d 0d 0a 09 12) & 0x1); }... 1c60: 09 57 4f 52 44 20 66 4c 69 6e 6b 42 65 66 6f 72 .WORD fLinkBefor 1c70: 65 28 57 4f 52 44 20 76 61 6c 29 20 20 20 7b 20 e(WORD val) { 1c80: 5f 62 69 74 66 69 65 6c 64 20 3d 20 63 61 73 74 _bitfield = cast 1c90: 28 57 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c (WORD)((_bitfiel 1ca0: 64 20 26 20 30 78 46 46 46 46 46 46 46 46 46 46 d & 0xFFFFFFFFFF 1cb0: 46 46 45 46 46 46 29 20 7c 20 28 76 61 6c 20 3c FFEFFF) | (val < 1cc0: 3c 20 31 32 29 29 3b 20 72 65 74 75 72 6e 20 76 < 12)); return v 1cd0: 61 6c 3b 20 7d 0d 0a 09 09 57 4f 52 44 20 66 4c al; }....WORD fL 1ce0: 69 6e 6b 41 66 74 65 72 28 29 20 20 20 20 20 20 inkAfter() 1cf0: 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 63 { return c 1d00: 61 73 74 28 57 4f 52 44 29 28 28 5f 62 69 74 66 ast(WORD)((_bitf 1d10: 69 65 6c 64 20 3e 3e 20 31 33 29 20 26 20 30 78 ield >> 13) & 0x 1d20: 31 29 3b 20 7d 0d 0a 09 09 57 4f 52 44 20 66 4c 1); }....WORD fL 1d30: 69 6e 6b 41 66 74 65 72 28 57 4f 52 44 20 76 61 inkAfter(WORD va 1d40: 6c 29 20 20 20 20 7b 20 5f 62 69 74 66 69 65 6c l) { _bitfiel 1d50: 64 20 3d 20 63 61 73 74 28 57 4f 52 44 29 28 28 d = cast(WORD)(( 1d60: 5f 62 69 74 66 69 65 6c 64 20 26 20 30 78 46 46 _bitfield & 0xFF 1d70: 46 46 46 46 46 46 46 46 46 46 44 46 46 46 29 20 FFFFFFFFFFDFFF) 1d80: 7c 20 28 76 61 6c 20 3c 3c 20 31 33 29 29 3b 20 | (val << 13)); 1d90: 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0d 0a 09 return val; }... 1da0: 09 57 4f 52 44 20 66 4c 6f 67 69 63 61 6c 4f 72 .WORD fLogicalOr 1db0: 64 65 72 28 29 20 20 20 20 20 20 20 20 20 7b 20 der() { 1dc0: 72 65 74 75 72 6e 20 63 61 73 74 28 57 4f 52 44 return cast(WORD 1dd0: 29 28 28 5f 62 69 74 66 69 65 6c 64 20 3e 3e 20 )((_bitfield >> 1de0: 31 34 29 20 26 20 30 78 31 29 3b 20 7d 0d 0a 09 14) & 0x1); }... 1df0: 09 57 4f 52 44 20 66 4c 6f 67 69 63 61 6c 4f 72 .WORD fLogicalOr 1e00: 64 65 72 28 57 4f 52 44 20 76 61 6c 29 20 7b 20 der(WORD val) { 1e10: 5f 62 69 74 66 69 65 6c 64 20 3d 20 63 61 73 74 _bitfield = cast 1e20: 28 57 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c (WORD)((_bitfiel 1e30: 64 20 26 20 30 78 46 46 46 46 46 46 46 46 46 46 d & 0xFFFFFFFFFF 1e40: 46 46 42 46 46 46 29 20 7c 20 28 76 61 6c 20 3c FFBFFF) | (val < 1e50: 3c 20 31 34 29 29 3b 20 72 65 74 75 72 6e 20 76 < 14)); return v 1e60: 61 6c 3b 20 7d 0d 0a 09 09 57 4f 52 44 20 66 4e al; }....WORD fN 1e70: 6f 47 6c 79 70 68 49 6e 64 65 78 28 29 20 20 20 oGlyphIndex() 1e80: 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 63 { return c 1e90: 61 73 74 28 57 4f 52 44 29 28 28 5f 62 69 74 66 ast(WORD)((_bitf 1ea0: 69 65 6c 64 20 3e 3e 20 31 35 29 20 26 20 30 78 ield >> 15) & 0x 1eb0: 31 29 3b 20 7d 0d 0a 09 09 57 4f 52 44 20 66 4e 1); }....WORD fN 1ec0: 6f 47 6c 79 70 68 49 6e 64 65 78 28 57 4f 52 44 oGlyphIndex(WORD 1ed0: 20 76 61 6c 29 20 7b 20 5f 62 69 74 66 69 65 6c val) { _bitfiel 1ee0: 64 20 3d 20 63 61 73 74 28 57 4f 52 44 29 28 28 d = cast(WORD)(( 1ef0: 5f 62 69 74 66 69 65 6c 64 20 26 20 30 78 46 46 _bitfield & 0xFF 1f00: 46 46 46 46 46 46 46 46 46 46 37 46 46 46 29 20 FFFFFFFFFF7FFF) 1f10: 7c 20 28 76 61 6c 20 3c 3c 20 31 35 29 29 3b 20 | (val << 15)); 1f20: 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0d 0a 09 return val; }... 1f30: 09 53 43 52 49 50 54 5f 53 54 41 54 45 20 73 3b .SCRIPT_STATE s; 1f40: 0d 0a 09 7d 0d 0a 0d 0a 0d 0a 09 73 74 72 75 63 ...}.......struc 1f50: 74 20 53 43 52 49 50 54 5f 49 54 45 4d 0d 0a 09 t SCRIPT_ITEM... 1f60: 7b 0d 0a 09 09 69 6e 74 20 69 43 68 61 72 50 6f {....int iCharPo 1f70: 73 3b 0d 0a 09 09 53 43 52 49 50 54 5f 41 4e 41 s;....SCRIPT_ANA 1f80: 4c 59 53 49 53 20 61 3b 0d 0a 09 7d 0d 0a 0d 0a LYSIS a;...}.... 1f90: 09 73 74 72 75 63 74 20 53 43 52 49 50 54 5f 56 .struct SCRIPT_V 1fa0: 49 53 41 54 54 52 0d 0a 09 7b 0d 0a 09 09 70 72 ISATTR...{....pr 1fb0: 69 76 61 74 65 20 57 4f 52 44 20 5f 62 69 74 66 ivate WORD _bitf 1fc0: 69 65 6c 64 3b 0d 0a 09 09 57 4f 52 44 20 75 4a ield;....WORD uJ 1fd0: 75 73 74 69 66 69 63 61 74 69 6f 6e 28 29 20 20 ustification() 1fe0: 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 { return 1ff0: 63 61 73 74 28 57 4f 52 44 29 28 28 5f 62 69 74 cast(WORD)((_bit 2000: 66 69 65 6c 64 20 3e 3e 20 30 29 20 26 20 30 78 field >> 0) & 0x 2010: 46 29 3b 20 7d 0d 0a 09 09 57 4f 52 44 20 75 4a F); }....WORD uJ 2020: 75 73 74 69 66 69 63 61 74 69 6f 6e 28 57 4f 52 ustification(WOR 2030: 44 20 76 61 6c 29 20 7b 20 5f 62 69 74 66 69 65 D val) { _bitfie 2040: 6c 64 20 3d 20 63 61 73 74 28 57 4f 52 44 29 28 ld = cast(WORD)( 2050: 28 5f 62 69 74 66 69 65 6c 64 20 26 20 30 78 46 (_bitfield & 0xF 2060: 46 46 46 46 46 46 46 46 46 46 46 46 46 46 30 29 FFFFFFFFFFFFFF0) 2070: 20 7c 20 28 76 61 6c 20 3c 3c 20 30 29 29 3b 20 | (val << 0)); 2080: 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0d 0a 09 return val; }... 2090: 09 57 4f 52 44 20 66 43 6c 75 73 74 65 72 53 74 .WORD fClusterSt 20a0: 61 72 74 28 29 20 20 20 20 20 20 20 20 20 20 7b art() { 20b0: 20 72 65 74 75 72 6e 20 63 61 73 74 28 57 4f 52 return cast(WOR 20c0: 44 29 28 28 5f 62 69 74 66 69 65 6c 64 20 3e 3e D)((_bitfield >> 20d0: 20 34 29 20 26 20 30 78 31 29 3b 20 7d 0d 0a 09 4) & 0x1); }... 20e0: 09 57 4f 52 44 20 66 43 6c 75 73 74 65 72 53 74 .WORD fClusterSt 20f0: 61 72 74 28 57 4f 52 44 20 76 61 6c 29 20 20 7b art(WORD val) { 2100: 20 5f 62 69 74 66 69 65 6c 64 20 3d 20 63 61 73 _bitfield = cas 2110: 74 28 57 4f 52 44 29 28 28 5f 62 69 74 66 69 65 t(WORD)((_bitfie 2120: 6c 64 20 26 20 30 78 46 46 46 46 46 46 46 46 46 ld & 0xFFFFFFFFF 2130: 46 46 46 46 46 45 46 29 20 7c 20 28 76 61 6c 20 FFFFFEF) | (val 2140: 3c 3c 20 34 29 29 3b 20 72 65 74 75 72 6e 20 76 << 4)); return v 2150: 61 6c 3b 20 7d 0d 0a 09 09 57 4f 52 44 20 66 44 al; }....WORD fD 2160: 69 61 63 72 69 74 69 63 28 29 20 20 20 20 20 20 iacritic() 2170: 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 { return 2180: 63 61 73 74 28 57 4f 52 44 29 28 28 5f 62 69 74 cast(WORD)((_bit 2190: 66 69 65 6c 64 20 3e 3e 20 35 29 20 26 20 30 78 field >> 5) & 0x 21a0: 31 29 3b 20 7d 0d 0a 09 09 57 4f 52 44 20 66 44 1); }....WORD fD 21b0: 69 61 63 72 69 74 69 63 28 57 4f 52 44 20 76 61 iacritic(WORD va 21c0: 6c 29 20 20 20 20 20 7b 20 5f 62 69 74 66 69 65 l) { _bitfie 21d0: 6c 64 20 3d 20 63 61 73 74 28 57 4f 52 44 29 28 ld = cast(WORD)( 21e0: 28 5f 62 69 74 66 69 65 6c 64 20 26 20 30 78 46 (_bitfield & 0xF 21f0: 46 46 46 46 46 46 46 46 46 46 46 46 46 44 46 29 FFFFFFFFFFFFFDF) 2200: 20 7c 20 28 76 61 6c 20 3c 3c 20 35 29 29 3b 20 | (val << 5)); 2210: 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0d 0a 09 return val; }... 2220: 09 57 4f 52 44 20 66 5a 65 72 6f 57 69 64 74 68 .WORD fZeroWidth 2230: 28 29 20 20 20 20 20 20 20 20 20 20 20 20 20 7b () { 2240: 20 72 65 74 75 72 6e 20 63 61 73 74 28 57 4f 52 return cast(WOR 2250: 44 29 28 28 5f 62 69 74 66 69 65 6c 64 20 3e 3e D)((_bitfield >> 2260: 20 36 29 20 26 20 30 78 31 29 3b 20 7d 0d 0a 09 6) & 0x1); }... 2270: 09 57 4f 52 44 20 66 5a 65 72 6f 57 69 64 74 68 .WORD fZeroWidth 2280: 28 57 4f 52 44 20 76 61 6c 29 20 20 20 20 20 7b (WORD val) { 2290: 20 5f 62 69 74 66 69 65 6c 64 20 3d 20 63 61 73 _bitfield = cas 22a0: 74 28 57 4f 52 44 29 28 28 5f 62 69 74 66 69 65 t(WORD)((_bitfie 22b0: 6c 64 20 26 20 30 78 46 46 46 46 46 46 46 46 46 ld & 0xFFFFFFFFF 22c0: 46 46 46 46 46 42 46 29 20 7c 20 28 76 61 6c 20 FFFFFBF) | (val 22d0: 3c 3c 20 36 29 29 3b 20 72 65 74 75 72 6e 20 76 << 6)); return v 22e0: 61 6c 3b 20 7d 0d 0a 09 09 57 4f 52 44 20 66 52 al; }....WORD fR 22f0: 65 73 65 72 76 65 64 28 29 20 20 20 20 20 20 20 eserved() 2300: 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 { return 2310: 63 61 73 74 28 57 4f 52 44 29 28 28 5f 62 69 74 cast(WORD)((_bit 2320: 66 69 65 6c 64 20 3e 3e 20 37 29 20 26 20 30 78 field >> 7) & 0x 2330: 31 29 3b 20 7d 0d 0a 09 09 57 4f 52 44 20 66 52 1); }....WORD fR 2340: 65 73 65 72 76 65 64 28 57 4f 52 44 20 76 61 6c eserved(WORD val 2350: 29 20 20 20 20 20 20 7b 20 5f 62 69 74 66 69 65 ) { _bitfie 2360: 6c 64 20 3d 20 63 61 73 74 28 57 4f 52 44 29 28 ld = cast(WORD)( 2370: 28 5f 62 69 74 66 69 65 6c 64 20 26 20 30 78 46 (_bitfield & 0xF 2380: 46 46 46 46 46 46 46 46 46 46 46 46 46 37 46 29 FFFFFFFFFFFFF7F) 2390: 20 7c 20 28 76 61 6c 20 3c 3c 20 37 29 29 3b 20 | (val << 7)); 23a0: 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0d 0a 09 return val; }... 23b0: 09 57 4f 52 44 20 66 53 68 61 70 65 52 65 73 65 .WORD fShapeRese 23c0: 72 76 65 64 28 29 20 20 20 20 20 20 20 20 20 7b rved() { 23d0: 20 72 65 74 75 72 6e 20 63 61 73 74 28 57 4f 52 return cast(WOR 23e0: 44 29 28 28 5f 62 69 74 66 69 65 6c 64 20 3e 3e D)((_bitfield >> 23f0: 20 38 29 20 26 20 30 78 46 46 29 3b 20 7d 0d 0a 8) & 0xFF); }.. 2400: 09 09 57 4f 52 44 20 66 53 68 61 70 65 52 65 73 ..WORD fShapeRes 2410: 65 72 76 65 64 28 57 4f 52 44 20 76 61 6c 29 20 erved(WORD val) 2420: 7b 20 5f 62 69 74 66 69 65 6c 64 20 3d 20 63 61 { _bitfield = ca 2430: 73 74 28 57 4f 52 44 29 28 28 5f 62 69 74 66 69 st(WORD)((_bitfi 2440: 65 6c 64 20 26 20 30 78 46 46 46 46 46 46 46 46 eld & 0xFFFFFFFF 2450: 46 46 46 46 30 30 46 46 29 20 7c 20 28 76 61 6c FFFF00FF) | (val 2460: 20 3c 3c 20 38 29 29 3b 20 72 65 74 75 72 6e 20 << 8)); return 2470: 76 61 6c 3b 20 7d 0d 0a 09 7d 0d 0a 0d 0a 09 73 val; }...}.....s 2480: 74 72 75 63 74 20 47 4f 46 46 53 45 54 0d 0a 09 truct GOFFSET... 2490: 7b 0d 0a 09 09 4c 4f 4e 47 20 64 75 3b 0d 0a 09 {....LONG du;... 24a0: 09 4c 4f 4e 47 20 64 76 3b 0d 0a 09 7d 0d 0a 0d .LONG dv;...}... 24b0: 0a 09 73 74 72 75 63 74 20 53 43 52 49 50 54 5f ..struct SCRIPT_ 24c0: 4c 4f 47 41 54 54 52 0d 0a 09 7b 0d 0a 09 09 42 LOGATTR...{....B 24d0: 59 54 45 20 5f 62 69 74 66 69 65 6c 64 3b 0d 0a YTE _bitfield;.. 24e0: 09 09 42 59 54 45 20 66 53 6f 66 74 42 72 65 61 ..BYTE fSoftBrea 24f0: 6b 28 29 20 20 20 20 20 20 20 20 20 20 7b 20 72 k() { r 2500: 65 74 75 72 6e 20 63 61 73 74 28 42 59 54 45 29 eturn cast(BYTE) 2510: 28 28 5f 62 69 74 66 69 65 6c 64 20 3e 3e 20 30 ((_bitfield >> 0 2520: 29 20 26 20 30 78 31 29 3b 20 7d 0d 0a 09 09 42 ) & 0x1); }....B 2530: 59 54 45 20 66 53 6f 66 74 42 72 65 61 6b 28 42 YTE fSoftBreak(B 2540: 59 54 45 20 76 61 6c 29 20 20 7b 20 5f 62 69 74 YTE val) { _bit 2550: 66 69 65 6c 64 20 3d 20 63 61 73 74 28 42 59 54 field = cast(BYT 2560: 45 29 28 28 5f 62 69 74 66 69 65 6c 64 20 26 20 E)((_bitfield & 2570: 30 78 46 46 46 46 46 46 46 46 46 46 46 46 46 46 0xFFFFFFFFFFFFFF 2580: 46 45 29 20 7c 20 28 76 61 6c 20 3c 3c 20 30 29 FE) | (val << 0) 2590: 29 3b 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d ); return val; } 25a0: 0d 0a 09 09 42 59 54 45 20 66 57 68 69 74 65 53 ....BYTE fWhiteS 25b0: 70 61 63 65 28 29 20 20 20 20 20 20 20 20 20 7b pace() { 25c0: 20 72 65 74 75 72 6e 20 63 61 73 74 28 42 59 54 return cast(BYT 25d0: 45 29 28 28 5f 62 69 74 66 69 65 6c 64 20 3e 3e E)((_bitfield >> 25e0: 20 31 29 20 26 20 30 78 31 29 3b 20 7d 0d 0a 09 1) & 0x1); }... 25f0: 09 42 59 54 45 20 66 57 68 69 74 65 53 70 61 63 .BYTE fWhiteSpac 2600: 65 28 42 59 54 45 20 76 61 6c 29 20 7b 20 5f 62 e(BYTE val) { _b 2610: 69 74 66 69 65 6c 64 20 3d 20 63 61 73 74 28 42 itfield = cast(B 2620: 59 54 45 29 28 28 5f 62 69 74 66 69 65 6c 64 20 YTE)((_bitfield 2630: 26 20 30 78 46 46 46 46 46 46 46 46 46 46 46 46 & 0xFFFFFFFFFFFF 2640: 46 46 46 44 29 20 7c 20 28 76 61 6c 20 3c 3c 20 FFFD) | (val << 2650: 31 29 29 3b 20 72 65 74 75 72 6e 20 76 61 6c 3b 1)); return val; 2660: 20 7d 0d 0a 09 09 42 59 54 45 20 66 43 68 61 72 }....BYTE fChar 2670: 53 74 6f 70 28 29 20 20 20 20 20 20 20 20 20 20 Stop() 2680: 20 7b 20 72 65 74 75 72 6e 20 63 61 73 74 28 42 { return cast(B 2690: 59 54 45 29 28 28 5f 62 69 74 66 69 65 6c 64 20 YTE)((_bitfield 26a0: 3e 3e 20 32 29 20 26 20 30 78 31 29 3b 20 7d 0d >> 2) & 0x1); }. 26b0: 0a 09 09 42 59 54 45 20 66 43 68 61 72 53 74 6f ...BYTE fCharSto 26c0: 70 28 42 59 54 45 20 76 61 6c 29 20 20 20 7b 20 p(BYTE val) { 26d0: 5f 62 69 74 66 69 65 6c 64 20 3d 20 63 61 73 74 _bitfield = cast 26e0: 28 42 59 54 45 29 28 28 5f 62 69 74 66 69 65 6c (BYTE)((_bitfiel 26f0: 64 20 26 20 30 78 46 46 46 46 46 46 46 46 46 46 d & 0xFFFFFFFFFF 2700: 46 46 46 46 46 42 29 20 7c 20 28 76 61 6c 20 3c FFFFFB) | (val < 2710: 3c 20 32 29 29 3b 20 72 65 74 75 72 6e 20 76 61 < 2)); return va 2720: 6c 3b 20 7d 0d 0a 09 09 42 59 54 45 20 66 57 6f l; }....BYTE fWo 2730: 72 64 53 74 6f 70 28 29 20 20 20 20 20 20 20 20 rdStop() 2740: 20 20 20 7b 20 72 65 74 75 72 6e 20 63 61 73 74 { return cast 2750: 28 42 59 54 45 29 28 28 5f 62 69 74 66 69 65 6c (BYTE)((_bitfiel 2760: 64 20 3e 3e 20 33 29 20 26 20 30 78 31 29 3b 20 d >> 3) & 0x1); 2770: 7d 0d 0a 09 09 42 59 54 45 20 66 57 6f 72 64 53 }....BYTE fWordS 2780: 74 6f 70 28 42 59 54 45 20 76 61 6c 29 20 20 20 top(BYTE val) 2790: 7b 20 5f 62 69 74 66 69 65 6c 64 20 3d 20 63 61 { _bitfield = ca 27a0: 73 74 28 42 59 54 45 29 28 28 5f 62 69 74 66 69 st(BYTE)((_bitfi 27b0: 65 6c 64 20 26 20 30 78 46 46 46 46 46 46 46 46 eld & 0xFFFFFFFF 27c0: 46 46 46 46 46 46 46 37 29 20 7c 20 28 76 61 6c FFFFFFF7) | (val 27d0: 20 3c 3c 20 33 29 29 3b 20 72 65 74 75 72 6e 20 << 3)); return 27e0: 76 61 6c 3b 20 7d 0d 0a 09 09 42 59 54 45 20 66 val; }....BYTE f 27f0: 49 6e 76 61 6c 69 64 28 29 20 20 20 20 20 20 20 Invalid() 2800: 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 63 61 { return ca 2810: 73 74 28 42 59 54 45 29 28 28 5f 62 69 74 66 69 st(BYTE)((_bitfi 2820: 65 6c 64 20 3e 3e 20 34 29 20 26 20 30 78 31 29 eld >> 4) & 0x1) 2830: 3b 20 7d 0d 0a 09 09 42 59 54 45 20 66 49 6e 76 ; }....BYTE fInv 2840: 61 6c 69 64 28 42 59 54 45 20 76 61 6c 29 20 20 alid(BYTE val) 2850: 20 20 7b 20 5f 62 69 74 66 69 65 6c 64 20 3d 20 { _bitfield = 2860: 63 61 73 74 28 42 59 54 45 29 28 28 5f 62 69 74 cast(BYTE)((_bit 2870: 66 69 65 6c 64 20 26 20 30 78 46 46 46 46 46 46 field & 0xFFFFFF 2880: 46 46 46 46 46 46 46 46 45 46 29 20 7c 20 28 76 FFFFFFFFEF) | (v 2890: 61 6c 20 3c 3c 20 34 29 29 3b 20 72 65 74 75 72 al << 4)); retur 28a0: 6e 20 76 61 6c 3b 20 7d 0d 0a 09 09 42 59 54 45 n val; }....BYTE 28b0: 20 66 52 65 73 65 72 76 65 64 28 29 20 20 20 20 fReserved() 28c0: 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 { return 28d0: 63 61 73 74 28 42 59 54 45 29 28 28 5f 62 69 74 cast(BYTE)((_bit 28e0: 66 69 65 6c 64 20 3e 3e 20 35 29 20 26 20 30 78 field >> 5) & 0x 28f0: 37 29 3b 20 7d 0d 0a 09 09 42 59 54 45 20 66 52 7); }....BYTE fR 2900: 65 73 65 72 76 65 64 28 42 59 54 45 20 76 61 6c eserved(BYTE val 2910: 29 20 20 20 7b 20 5f 62 69 74 66 69 65 6c 64 20 ) { _bitfield 2920: 3d 20 63 61 73 74 28 42 59 54 45 29 28 28 5f 62 = cast(BYTE)((_b 2930: 69 74 66 69 65 6c 64 20 26 20 30 78 46 46 46 46 itfield & 0xFFFF 2940: 46 46 46 46 46 46 46 46 46 46 31 46 29 20 7c 20 FFFFFFFFFF1F) | 2950: 28 76 61 6c 20 3c 3c 20 35 29 29 3b 20 72 65 74 (val << 5)); ret 2960: 75 72 6e 20 76 61 6c 3b 20 7d 0d 0a 09 7d 0d 0a urn val; }...}.. 2970: 0d 0a 09 73 74 72 75 63 74 20 53 43 52 49 50 54 ...struct SCRIPT 2980: 5f 50 52 4f 50 45 52 54 49 45 53 0d 0a 09 7b 0d _PROPERTIES...{. 2990: 0a 09 09 70 72 69 76 61 74 65 20 44 57 4f 52 44 ...private DWORD 29a0: 20 5f 62 69 74 66 69 65 6c 64 31 3b 0d 0a 09 09 _bitfield1;.... 29b0: 44 57 4f 52 44 20 6c 61 6e 67 69 64 28 29 20 20 DWORD langid() 29c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29d0: 20 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e { return 29e0: 20 28 5f 62 69 74 66 69 65 6c 64 31 20 3e 3e 20 (_bitfield1 >> 29f0: 30 29 20 26 20 30 78 46 46 46 46 3b 20 7d 0d 0a 0) & 0xFFFF; }.. 2a00: 09 09 44 57 4f 52 44 20 6c 61 6e 67 69 64 28 44 ..DWORD langid(D 2a10: 57 4f 52 44 20 76 61 6c 29 20 20 20 20 20 20 20 WORD val) 2a20: 20 20 20 20 20 20 20 20 20 20 7b 20 5f 62 69 74 { _bit 2a30: 66 69 65 6c 64 31 20 3d 20 63 61 73 74 28 44 57 field1 = cast(DW 2a40: 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c 64 31 ORD)((_bitfield1 2a50: 20 26 20 30 78 46 46 46 46 46 46 46 46 46 46 46 & 0xFFFFFFFFFFF 2a60: 46 30 30 30 30 29 20 7c 20 28 76 61 6c 20 3c 3c F0000) | (val << 2a70: 20 30 29 29 3b 20 72 65 74 75 72 6e 20 76 61 6c 0)); return val 2a80: 3b 20 7d 0d 0a 09 09 44 57 4f 52 44 20 66 4e 75 ; }....DWORD fNu 2a90: 6d 65 72 69 63 28 29 20 20 20 20 20 20 20 20 20 meric() 2aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b { 2ab0: 20 72 65 74 75 72 6e 20 28 5f 62 69 74 66 69 65 return (_bitfie 2ac0: 6c 64 31 20 3e 3e 20 31 36 29 20 26 20 30 78 31 ld1 >> 16) & 0x1 2ad0: 3b 20 7d 0d 0a 09 09 44 57 4f 52 44 20 66 4e 75 ; }....DWORD fNu 2ae0: 6d 65 72 69 63 28 44 57 4f 52 44 20 76 61 6c 29 meric(DWORD val) 2af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b { 2b00: 20 5f 62 69 74 66 69 65 6c 64 31 20 3d 20 63 61 _bitfield1 = ca 2b10: 73 74 28 44 57 4f 52 44 29 28 28 5f 62 69 74 66 st(DWORD)((_bitf 2b20: 69 65 6c 64 31 20 26 20 30 78 46 46 46 46 46 46 ield1 & 0xFFFFFF 2b30: 46 46 46 46 46 45 46 46 46 46 29 20 7c 20 28 76 FFFFFEFFFF) | (v 2b40: 61 6c 20 3c 3c 20 31 36 29 29 3b 20 72 65 74 75 al << 16)); retu 2b50: 72 6e 20 76 61 6c 3b 20 7d 0d 0a 09 09 44 57 4f rn val; }....DWO 2b60: 52 44 20 66 43 6f 6d 70 6c 65 78 28 29 20 20 20 RD fComplex() 2b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b80: 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 28 5f { return (_ 2b90: 62 69 74 66 69 65 6c 64 31 20 3e 3e 20 31 37 29 bitfield1 >> 17) 2ba0: 20 26 20 30 78 31 3b 20 7d 0d 0a 09 09 44 57 4f & 0x1; }....DWO 2bb0: 52 44 20 66 43 6f 6d 70 6c 65 78 28 44 57 4f 52 RD fComplex(DWOR 2bc0: 44 20 76 61 6c 29 20 20 20 20 20 20 20 20 20 20 D val) 2bd0: 20 20 20 20 20 7b 20 5f 62 69 74 66 69 65 6c 64 { _bitfield 2be0: 31 20 3d 20 63 61 73 74 28 44 57 4f 52 44 29 28 1 = cast(DWORD)( 2bf0: 28 5f 62 69 74 66 69 65 6c 64 31 20 26 20 30 78 (_bitfield1 & 0x 2c00: 46 46 46 46 46 46 46 46 46 46 46 44 46 46 46 46 FFFFFFFFFFFDFFFF 2c10: 29 20 7c 20 28 76 61 6c 20 3c 3c 20 31 37 29 29 ) | (val << 17)) 2c20: 3b 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0d ; return val; }. 2c30: 0a 09 09 44 57 4f 52 44 20 66 4e 65 65 64 73 57 ...DWORD fNeedsW 2c40: 6f 72 64 42 72 65 61 6b 69 6e 67 28 29 20 20 20 ordBreaking() 2c50: 20 20 20 20 20 20 20 20 20 20 20 7b 20 72 65 74 { ret 2c60: 75 72 6e 20 28 5f 62 69 74 66 69 65 6c 64 31 20 urn (_bitfield1 2c70: 3e 3e 20 31 38 29 20 26 20 30 78 31 3b 20 7d 0d >> 18) & 0x1; }. 2c80: 0a 09 09 44 57 4f 52 44 20 66 4e 65 65 64 73 57 ...DWORD fNeedsW 2c90: 6f 72 64 42 72 65 61 6b 69 6e 67 28 44 57 4f 52 ordBreaking(DWOR 2ca0: 44 20 76 61 6c 29 20 20 20 20 20 7b 20 5f 62 69 D val) { _bi 2cb0: 74 66 69 65 6c 64 31 20 3d 20 63 61 73 74 28 44 tfield1 = cast(D 2cc0: 57 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c 64 WORD)((_bitfield 2cd0: 31 20 26 20 30 78 46 46 46 46 46 46 46 46 46 46 1 & 0xFFFFFFFFFF 2ce0: 46 42 46 46 46 46 29 20 7c 20 28 76 61 6c 20 3c FBFFFF) | (val < 2cf0: 3c 20 31 38 29 29 3b 20 72 65 74 75 72 6e 20 76 < 18)); return v 2d00: 61 6c 3b 20 7d 0d 0a 09 09 44 57 4f 52 44 20 66 al; }....DWORD f 2d10: 4e 65 65 64 73 43 61 72 65 74 49 6e 66 6f 28 29 NeedsCaretInfo() 2d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d30: 20 7b 20 72 65 74 75 72 6e 20 28 5f 62 69 74 66 { return (_bitf 2d40: 69 65 6c 64 31 20 3e 3e 20 31 39 29 20 26 20 30 ield1 >> 19) & 0 2d50: 78 31 3b 20 7d 0d 0a 09 09 44 57 4f 52 44 20 66 x1; }....DWORD f 2d60: 4e 65 65 64 73 43 61 72 65 74 49 6e 66 6f 28 44 NeedsCaretInfo(D 2d70: 57 4f 52 44 20 76 61 6c 29 20 20 20 20 20 20 20 WORD val) 2d80: 20 7b 20 5f 62 69 74 66 69 65 6c 64 31 20 3d 20 { _bitfield1 = 2d90: 63 61 73 74 28 44 57 4f 52 44 29 28 28 5f 62 69 cast(DWORD)((_bi 2da0: 74 66 69 65 6c 64 31 20 26 20 30 78 46 46 46 46 tfield1 & 0xFFFF 2db0: 46 46 46 46 46 46 46 37 46 46 46 46 29 20 7c 20 FFFFFFF7FFFF) | 2dc0: 28 76 61 6c 20 3c 3c 20 31 39 29 29 3b 20 72 65 (val << 19)); re 2dd0: 74 75 72 6e 20 76 61 6c 3b 20 7d 0d 0a 09 09 44 turn val; }....D 2de0: 57 4f 52 44 20 62 43 68 61 72 53 65 74 28 29 20 WORD bCharSet() 2df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e00: 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 { return 2e10: 28 5f 62 69 74 66 69 65 6c 64 31 20 3e 3e 20 32 (_bitfield1 >> 2 2e20: 30 29 20 26 20 30 78 46 46 3b 20 7d 0d 0a 09 09 0) & 0xFF; }.... 2e30: 44 57 4f 52 44 20 62 43 68 61 72 53 65 74 28 44 DWORD bCharSet(D 2e40: 57 4f 52 44 20 76 61 6c 29 20 20 20 20 20 20 20 WORD val) 2e50: 20 20 20 20 20 20 20 20 7b 20 5f 62 69 74 66 69 { _bitfi 2e60: 65 6c 64 31 20 3d 20 63 61 73 74 28 44 57 4f 52 eld1 = cast(DWOR 2e70: 44 29 28 28 5f 62 69 74 66 69 65 6c 64 31 20 26 D)((_bitfield1 & 2e80: 20 30 78 46 46 46 46 46 46 46 46 46 30 30 46 46 0xFFFFFFFFF00FF 2e90: 46 46 46 29 20 7c 20 28 76 61 6c 20 3c 3c 20 32 FFF) | (val << 2 2ea0: 30 29 29 3b 20 72 65 74 75 72 6e 20 76 61 6c 3b 0)); return val; 2eb0: 20 7d 0d 0a 09 09 44 57 4f 52 44 20 66 43 6f 6e }....DWORD fCon 2ec0: 74 72 6f 6c 28 29 20 20 20 20 20 20 20 20 20 20 trol() 2ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 { 2ee0: 72 65 74 75 72 6e 20 28 5f 62 69 74 66 69 65 6c return (_bitfiel 2ef0: 64 31 20 3e 3e 20 32 38 29 20 26 20 30 78 31 3b d1 >> 28) & 0x1; 2f00: 20 7d 0d 0a 09 09 44 57 4f 52 44 20 66 43 6f 6e }....DWORD fCon 2f10: 74 72 6f 6c 28 44 57 4f 52 44 20 76 61 6c 29 20 trol(DWORD val) 2f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 { 2f30: 5f 62 69 74 66 69 65 6c 64 31 20 3d 20 63 61 73 _bitfield1 = cas 2f40: 74 28 44 57 4f 52 44 29 28 28 5f 62 69 74 66 69 t(DWORD)((_bitfi 2f50: 65 6c 64 31 20 26 20 30 78 46 46 46 46 46 46 46 eld1 & 0xFFFFFFF 2f60: 46 45 46 46 46 46 46 46 46 29 20 7c 20 28 76 61 FEFFFFFFF) | (va 2f70: 6c 20 3c 3c 20 32 38 29 29 3b 20 72 65 74 75 72 l << 28)); retur 2f80: 6e 20 76 61 6c 3b 20 7d 0d 0a 09 09 44 57 4f 52 n val; }....DWOR 2f90: 44 20 66 50 72 69 76 61 74 65 55 73 65 41 72 65 D fPrivateUseAre 2fa0: 61 28 29 20 20 20 20 20 20 20 20 20 20 20 20 20 a() 2fb0: 20 20 20 20 7b 20 72 65 74 75 72 6e 20 28 5f 62 { return (_b 2fc0: 69 74 66 69 65 6c 64 31 20 3e 3e 20 32 39 29 20 itfield1 >> 29) 2fd0: 26 20 30 78 31 3b 20 7d 0d 0a 09 09 44 57 4f 52 & 0x1; }....DWOR 2fe0: 44 20 66 50 72 69 76 61 74 65 55 73 65 41 72 65 D fPrivateUseAre 2ff0: 61 28 44 57 4f 52 44 20 76 61 6c 29 20 20 20 20 a(DWORD val) 3000: 20 20 20 20 7b 20 5f 62 69 74 66 69 65 6c 64 31 { _bitfield1 3010: 20 3d 20 63 61 73 74 28 44 57 4f 52 44 29 28 28 = cast(DWORD)(( 3020: 5f 62 69 74 66 69 65 6c 64 31 20 26 20 30 78 46 _bitfield1 & 0xF 3030: 46 46 46 46 46 46 46 44 46 46 46 46 46 46 46 29 FFFFFFFDFFFFFFF) 3040: 20 7c 20 28 76 61 6c 20 3c 3c 20 32 39 29 29 3b | (val << 29)); 3050: 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0d 0a return val; }.. 3060: 09 09 44 57 4f 52 44 20 66 4e 65 65 64 73 43 68 ..DWORD fNeedsCh 3070: 61 72 61 63 74 65 72 4a 75 73 74 69 66 79 28 29 aracterJustify() 3080: 20 20 20 20 20 20 20 20 20 20 7b 20 72 65 74 75 { retu 3090: 72 6e 20 28 5f 62 69 74 66 69 65 6c 64 31 20 3e rn (_bitfield1 > 30a0: 3e 20 33 30 29 20 26 20 30 78 31 3b 20 7d 0d 0a > 30) & 0x1; }.. 30b0: 09 09 44 57 4f 52 44 20 66 4e 65 65 64 73 43 68 ..DWORD fNeedsCh 30c0: 61 72 61 63 74 65 72 4a 75 73 74 69 66 79 28 44 aracterJustify(D 30d0: 57 4f 52 44 20 76 61 6c 29 20 7b 20 5f 62 69 74 WORD val) { _bit 30e0: 66 69 65 6c 64 31 20 3d 20 63 61 73 74 28 44 57 field1 = cast(DW 30f0: 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c 64 31 ORD)((_bitfield1 3100: 20 26 20 30 78 46 46 46 46 46 46 46 46 42 46 46 & 0xFFFFFFFFBFF 3110: 46 46 46 46 46 29 20 7c 20 28 76 61 6c 20 3c 3c FFFFF) | (val << 3120: 20 33 30 29 29 3b 20 72 65 74 75 72 6e 20 76 61 30)); return va 3130: 6c 3b 20 7d 0d 0a 09 09 44 57 4f 52 44 20 66 49 l; }....DWORD fI 3140: 6e 76 61 6c 69 64 47 6c 79 70 68 28 29 20 20 20 nvalidGlyph() 3150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3160: 7b 20 72 65 74 75 72 6e 20 28 5f 62 69 74 66 69 { return (_bitfi 3170: 65 6c 64 31 20 3e 3e 20 33 31 29 20 26 20 30 78 eld1 >> 31) & 0x 3180: 31 3b 20 7d 0d 0a 09 09 44 57 4f 52 44 20 66 49 1; }....DWORD fI 3190: 6e 76 61 6c 69 64 47 6c 79 70 68 28 44 57 4f 52 nvalidGlyph(DWOR 31a0: 44 20 76 61 6c 29 20 20 20 20 20 20 20 20 20 20 D val) 31b0: 7b 20 5f 62 69 74 66 69 65 6c 64 31 20 3d 20 63 { _bitfield1 = c 31c0: 61 73 74 28 44 57 4f 52 44 29 28 28 5f 62 69 74 ast(DWORD)((_bit 31d0: 66 69 65 6c 64 31 20 26 20 30 78 46 46 46 46 46 field1 & 0xFFFFF 31e0: 46 46 46 37 46 46 46 46 46 46 46 29 20 7c 20 28 FFF7FFFFFFF) | ( 31f0: 76 61 6c 20 3c 3c 20 33 31 29 29 3b 20 72 65 74 val << 31)); ret 3200: 75 72 6e 20 76 61 6c 3b 20 7d 0d 0a 09 09 70 72 urn val; }....pr 3210: 69 76 61 74 65 20 44 57 4f 52 44 20 5f 62 69 74 ivate DWORD _bit 3220: 66 69 65 6c 64 32 3b 0d 0a 09 09 44 57 4f 52 44 field2;....DWORD 3230: 20 66 49 6e 76 61 6c 69 64 4c 6f 67 41 74 74 72 fInvalidLogAttr 3240: 28 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 () 3250: 20 20 20 7b 20 72 65 74 75 72 6e 20 28 5f 62 69 { return (_bi 3260: 74 66 69 65 6c 64 32 20 3e 3e 20 30 29 20 26 20 tfield2 >> 0) & 3270: 30 78 31 3b 20 7d 0d 0a 09 09 44 57 4f 52 44 20 0x1; }....DWORD 3280: 66 49 6e 76 61 6c 69 64 4c 6f 67 41 74 74 72 28 fInvalidLogAttr( 3290: 44 57 4f 52 44 20 76 61 6c 29 20 20 20 20 20 20 DWORD val) 32a0: 20 20 7b 20 5f 62 69 74 66 69 65 6c 64 32 20 3d { _bitfield2 = 32b0: 20 63 61 73 74 28 44 57 4f 52 44 29 28 28 5f 62 cast(DWORD)((_b 32c0: 69 74 66 69 65 6c 64 32 20 26 20 30 78 46 46 46 itfield2 & 0xFFF 32d0: 46 46 46 46 46 46 46 46 46 46 46 46 45 29 20 7c FFFFFFFFFFFFE) | 32e0: 20 28 76 61 6c 20 3c 3c 20 30 29 29 3b 20 72 65 (val << 0)); re 32f0: 74 75 72 6e 20 76 61 6c 3b 20 7d 0d 0a 09 09 44 turn val; }....D 3300: 57 4f 52 44 20 66 43 44 4d 28 29 20 20 20 20 20 WORD fCDM() 3310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3320: 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 { return 3330: 28 5f 62 69 74 66 69 65 6c 64 32 20 3e 3e 20 31 (_bitfield2 >> 1 3340: 29 20 26 20 30 78 31 3b 20 7d 0d 0a 09 09 44 57 ) & 0x1; }....DW 3350: 4f 52 44 20 66 43 44 4d 28 44 57 4f 52 44 20 76 ORD fCDM(DWORD v 3360: 61 6c 29 20 20 20 20 20 20 20 20 20 20 20 20 20 al) 3370: 20 20 20 20 20 20 7b 20 5f 62 69 74 66 69 65 6c { _bitfiel 3380: 64 32 20 3d 20 63 61 73 74 28 44 57 4f 52 44 29 d2 = cast(DWORD) 3390: 28 28 5f 62 69 74 66 69 65 6c 64 32 20 26 20 30 ((_bitfield2 & 0 33a0: 78 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 xFFFFFFFFFFFFFFF 33b0: 44 29 20 7c 20 28 76 61 6c 20 3c 3c 20 31 29 29 D) | (val << 1)) 33c0: 3b 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0d ; return val; }. 33d0: 0a 09 09 44 57 4f 52 44 20 66 41 6d 62 69 67 75 ...DWORD fAmbigu 33e0: 6f 75 73 43 68 61 72 53 65 74 28 29 20 20 20 20 ousCharSet() 33f0: 20 20 20 20 20 20 20 20 20 20 20 7b 20 72 65 74 { ret 3400: 75 72 6e 20 28 5f 62 69 74 66 69 65 6c 64 32 20 urn (_bitfield2 3410: 3e 3e 20 32 29 20 26 20 30 78 31 3b 20 7d 0d 0a >> 2) & 0x1; }.. 3420: 09 09 44 57 4f 52 44 20 66 41 6d 62 69 67 75 6f ..DWORD fAmbiguo 3430: 75 73 43 68 61 72 53 65 74 28 44 57 4f 52 44 20 usCharSet(DWORD 3440: 76 61 6c 29 20 20 20 20 20 20 7b 20 5f 62 69 74 val) { _bit 3450: 66 69 65 6c 64 32 20 3d 20 63 61 73 74 28 44 57 field2 = cast(DW 3460: 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c 64 32 ORD)((_bitfield2 3470: 20 26 20 30 78 46 46 46 46 46 46 46 46 46 46 46 & 0xFFFFFFFFFFF 3480: 46 46 46 46 42 29 20 7c 20 28 76 61 6c 20 3c 3c FFFFB) | (val << 3490: 20 32 29 29 3b 20 72 65 74 75 72 6e 20 76 61 6c 2)); return val 34a0: 3b 20 7d 0d 0a 09 09 44 57 4f 52 44 20 66 43 6c ; }....DWORD fCl 34b0: 75 73 74 65 72 53 69 7a 65 56 61 72 69 65 73 28 usterSizeVaries( 34c0: 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b ) { 34d0: 20 72 65 74 75 72 6e 20 28 5f 62 69 74 66 69 65 return (_bitfie 34e0: 6c 64 32 20 3e 3e 20 33 29 20 26 20 30 78 31 3b ld2 >> 3) & 0x1; 34f0: 20 7d 0d 0a 09 09 44 57 4f 52 44 20 66 43 6c 75 }....DWORD fClu 3500: 73 74 65 72 53 69 7a 65 56 61 72 69 65 73 28 44 sterSizeVaries(D 3510: 57 4f 52 44 20 76 61 6c 29 20 20 20 20 20 7b 20 WORD val) { 3520: 5f 62 69 74 66 69 65 6c 64 32 20 3d 20 63 61 73 _bitfield2 = cas 3530: 74 28 44 57 4f 52 44 29 28 28 5f 62 69 74 66 69 t(DWORD)((_bitfi 3540: 65 6c 64 32 20 26 20 30 78 46 46 46 46 46 46 46 eld2 & 0xFFFFFFF 3550: 46 46 46 46 46 46 46 46 37 29 20 7c 20 28 76 61 FFFFFFFF7) | (va 3560: 6c 20 3c 3c 20 33 29 29 3b 20 72 65 74 75 72 6e l << 3)); return 3570: 20 76 61 6c 3b 20 7d 0d 0a 09 09 44 57 4f 52 44 val; }....DWORD 3580: 20 66 52 65 6a 65 63 74 49 6e 76 61 6c 69 64 28 fRejectInvalid( 3590: 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ) 35a0: 20 20 20 7b 20 72 65 74 75 72 6e 20 28 5f 62 69 { return (_bi 35b0: 74 66 69 65 6c 64 32 20 3e 3e 20 34 29 20 26 20 tfield2 >> 4) & 35c0: 30 78 31 3b 20 7d 0d 0a 09 09 44 57 4f 52 44 20 0x1; }....DWORD 35d0: 66 52 65 6a 65 63 74 49 6e 76 61 6c 69 64 28 44 fRejectInvalid(D 35e0: 57 4f 52 44 20 76 61 6c 29 20 20 20 20 20 20 20 WORD val) 35f0: 20 20 7b 20 5f 62 69 74 66 69 65 6c 64 32 20 3d { _bitfield2 = 3600: 20 63 61 73 74 28 44 57 4f 52 44 29 28 28 5f 62 cast(DWORD)((_b 3610: 69 74 66 69 65 6c 64 32 20 26 20 30 78 46 46 46 itfield2 & 0xFFF 3620: 46 46 46 46 46 46 46 46 46 46 46 45 46 29 20 7c FFFFFFFFFFFEF) | 3630: 20 28 76 61 6c 20 3c 3c 20 34 29 29 3b 20 72 65 (val << 4)); re 3640: 74 75 72 6e 20 76 61 6c 3b 20 7d 0d 0a 09 7d 0d turn val; }...}. 3650: 0a 0d 0a 09 73 74 72 75 63 74 20 53 43 52 49 50 ....struct SCRIP 3660: 54 5f 46 4f 4e 54 50 52 4f 50 45 52 54 49 45 53 T_FONTPROPERTIES 3670: 0d 0a 09 7b 0d 0a 09 09 69 6e 74 20 63 42 79 74 ...{....int cByt 3680: 65 73 20 3d 20 53 43 52 49 50 54 5f 46 4f 4e 54 es = SCRIPT_FONT 3690: 50 52 4f 50 45 52 54 49 45 53 2e 73 69 7a 65 6f PROPERTIES.sizeo 36a0: 66 3b 0d 0a 09 09 57 4f 52 44 20 77 67 42 6c 61 f;....WORD wgBla 36b0: 6e 6b 3b 0d 0a 09 09 57 4f 52 44 20 77 67 44 65 nk;....WORD wgDe 36c0: 66 61 75 6c 74 3b 0d 0a 09 09 57 4f 52 44 20 77 fault;....WORD w 36d0: 67 49 6e 76 61 6c 69 64 3b 0d 0a 09 09 57 4f 52 gInvalid;....WOR 36e0: 44 20 77 67 4b 61 73 68 69 64 61 3b 0d 0a 09 09 D wgKashida;.... 36f0: 69 6e 74 20 69 4b 61 73 68 69 64 61 57 69 64 74 int iKashidaWidt 3700: 68 3b 0d 0a 09 7d 0d 0a 0d 0a 09 73 74 72 75 63 h;...}.....struc 3710: 74 20 53 43 52 49 50 54 5f 54 41 42 44 45 46 0d t SCRIPT_TABDEF. 3720: 0a 09 7b 0d 0a 09 09 69 6e 74 20 63 54 61 62 53 ..{....int cTabS 3730: 74 6f 70 73 3b 0d 0a 09 09 69 6e 74 20 69 53 63 tops;....int iSc 3740: 61 6c 65 3b 0d 0a 09 09 69 6e 74 2a 20 70 54 61 ale;....int* pTa 3750: 62 53 74 6f 70 73 3b 0d 0a 09 09 69 6e 74 20 69 bStops;....int i 3760: 54 61 62 4f 72 69 67 69 6e 3b 0d 0a 09 7d 0d 0a TabOrigin;...}.. 3770: 0d 0a 09 73 74 72 75 63 74 20 53 43 52 49 50 54 ...struct SCRIPT 3780: 5f 44 49 47 49 54 53 55 42 53 54 49 54 55 54 45 _DIGITSUBSTITUTE 3790: 0d 0a 09 7b 0d 0a 09 09 70 72 69 76 61 74 65 20 ...{....private 37a0: 44 57 4f 52 44 20 5f 62 69 74 66 69 65 6c 64 31 DWORD _bitfield1 37b0: 3b 0d 0a 09 09 44 57 4f 52 44 20 4e 61 74 69 6f ;....DWORD Natio 37c0: 6e 61 6c 44 69 67 69 74 4c 61 6e 67 75 61 67 65 nalDigitLanguage 37d0: 28 29 20 20 20 20 20 20 20 20 20 20 20 20 20 7b () { 37e0: 20 72 65 74 75 72 6e 20 28 5f 62 69 74 66 69 65 return (_bitfie 37f0: 6c 64 31 20 3e 3e 20 30 29 20 26 20 30 78 46 46 ld1 >> 0) & 0xFF 3800: 46 46 3b 20 7d 0d 0a 09 09 44 57 4f 52 44 20 4e FF; }....DWORD N 3810: 61 74 69 6f 6e 61 6c 44 69 67 69 74 4c 61 6e 67 ationalDigitLang 3820: 75 61 67 65 28 44 57 4f 52 44 20 76 61 6c 29 20 uage(DWORD val) 3830: 20 20 20 7b 20 5f 62 69 74 66 69 65 6c 64 31 20 { _bitfield1 3840: 3d 20 63 61 73 74 28 44 57 4f 52 44 29 28 28 5f = cast(DWORD)((_ 3850: 62 69 74 66 69 65 6c 64 31 20 26 20 30 78 46 46 bitfield1 & 0xFF 3860: 46 46 46 46 46 46 46 46 46 46 30 30 30 30 29 20 FFFFFFFFFF0000) 3870: 7c 20 28 76 61 6c 20 3c 3c 20 30 29 29 3b 20 72 | (val << 0)); r 3880: 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0d 0a 09 09 eturn val; }.... 3890: 44 57 4f 52 44 20 54 72 61 64 69 74 69 6f 6e 61 DWORD Traditiona 38a0: 6c 44 69 67 69 74 4c 61 6e 67 75 61 67 65 28 29 lDigitLanguage() 38b0: 20 20 20 20 20 20 20 20 20 20 7b 20 72 65 74 75 { retu 38c0: 72 6e 20 28 5f 62 69 74 66 69 65 6c 64 31 20 3e rn (_bitfield1 > 38d0: 3e 20 31 36 29 20 26 20 30 78 46 46 46 46 3b 20 > 16) & 0xFFFF; 38e0: 7d 0d 0a 09 09 44 57 4f 52 44 20 54 72 61 64 69 }....DWORD Tradi 38f0: 74 69 6f 6e 61 6c 44 69 67 69 74 4c 61 6e 67 75 tionalDigitLangu 3900: 61 67 65 28 44 57 4f 52 44 20 76 61 6c 29 20 7b age(DWORD val) { 3910: 20 5f 62 69 74 66 69 65 6c 64 31 20 3d 20 63 61 _bitfield1 = ca 3920: 73 74 28 44 57 4f 52 44 29 28 28 5f 62 69 74 66 st(DWORD)((_bitf 3930: 69 65 6c 64 31 20 26 20 30 78 46 46 46 46 46 46 ield1 & 0xFFFFFF 3940: 46 46 30 30 30 30 46 46 46 46 29 20 7c 20 28 76 FF0000FFFF) | (v 3950: 61 6c 20 3c 3c 20 31 36 29 29 3b 20 72 65 74 75 al << 16)); retu 3960: 72 6e 20 76 61 6c 3b 20 7d 0d 0a 09 09 70 72 69 rn val; }....pri 3970: 76 61 74 65 20 44 57 4f 52 44 20 5f 62 69 74 66 vate DWORD _bitf 3980: 69 65 6c 64 32 3b 0d 0a 09 09 44 57 4f 52 44 20 ield2;....DWORD 3990: 44 69 67 69 74 53 75 62 73 74 69 74 75 74 65 28 DigitSubstitute( 39a0: 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ) 39b0: 20 20 20 20 7b 20 72 65 74 75 72 6e 20 28 5f 62 { return (_b 39c0: 69 74 66 69 65 6c 64 32 20 3e 3e 20 30 29 20 26 itfield2 >> 0) & 39d0: 20 30 78 46 46 3b 20 7d 0d 0a 09 09 44 57 4f 52 0xFF; }....DWOR 39e0: 44 20 44 69 67 69 74 53 75 62 73 74 69 74 75 74 D DigitSubstitut 39f0: 65 28 44 57 4f 52 44 20 76 61 6c 29 20 20 20 20 e(DWORD val) 3a00: 20 20 20 20 20 20 7b 20 5f 62 69 74 66 69 65 6c { _bitfiel 3a10: 64 32 20 3d 20 63 61 73 74 28 44 57 4f 52 44 29 d2 = cast(DWORD) 3a20: 28 28 5f 62 69 74 66 69 65 6c 64 32 20 26 20 30 ((_bitfield2 & 0 3a30: 78 46 46 46 46 46 46 46 46 46 46 46 46 46 46 30 xFFFFFFFFFFFFFF0 3a40: 30 29 20 7c 20 28 76 61 6c 20 3c 3c 20 30 29 29 0) | (val << 0)) 3a50: 3b 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0d ; return val; }. 3a60: 0a 09 09 44 57 4f 52 44 20 64 77 52 65 73 65 72 ...DWORD dwReser 3a70: 76 65 64 3b 0d 0a 09 7d 0d 0a 0d 0a 09 2f 2a 20 ved;...}...../* 3a80: 54 4f 44 4f 3a 20 57 69 6e 64 6f 77 73 20 56 69 TODO: Windows Vi 3a90: 73 74 61 20 66 65 61 72 75 72 65 64 20 73 74 72 sta fearured str 3aa0: 75 63 74 73 0d 0a 09 4f 50 45 4e 54 59 50 45 5f ucts...OPENTYPE_ 3ab0: 46 45 41 54 55 52 45 5f 52 45 43 4f 52 44 0d 0a FEATURE_RECORD.. 3ac0: 09 4f 50 45 4e 54 59 50 45 5f 54 41 47 0d 0a 09 .OPENTYPE_TAG... 3ad0: 53 43 52 49 50 54 5f 43 48 41 52 50 52 4f 50 0d SCRIPT_CHARPROP. 3ae0: 0a 09 53 43 52 49 50 54 5f 47 4c 59 50 48 50 52 ..SCRIPT_GLYPHPR 3af0: 4f 50 0d 0a 09 54 45 58 54 52 41 4e 47 45 5f 50 OP...TEXTRANGE_P 3b00: 52 4f 50 45 52 54 49 45 53 0d 0a 09 2a 2f 0d 0a ROPERTIES...*/.. 3b10: 7d 0d 0a 0d 0a 0d 0a 2f 2a 20 55 6e 69 73 63 72 }....../* Uniscr 3b20: 69 62 65 20 46 75 6e 63 74 69 6f 6e 73 20 0d 0a ibe Functions .. 3b30: 20 2a 20 68 74 74 70 3a 2f 2f 6d 73 64 6e 32 2e * http://msdn2. 3b40: 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 2f 6c 69 microsoft.com/li 3b50: 62 72 61 72 79 2f 6d 73 37 37 36 34 36 39 20 2a brary/ms776469 * 3b60: 2f 0d 0a 65 78 74 65 72 6e 20 28 57 69 6e 64 6f /..extern (Windo 3b70: 77 73 29 0d 0a 7b 0d 0a 09 48 52 45 53 55 4c 54 ws)..{...HRESULT 3b80: 20 53 63 72 69 70 74 46 72 65 65 43 61 63 68 65 ScriptFreeCache 3b90: 28 53 43 52 49 50 54 5f 43 41 43 48 45 2a 29 3b (SCRIPT_CACHE*); 3ba0: 0d 0a 09 48 52 45 53 55 4c 54 20 53 63 72 69 70 ...HRESULT Scrip 3bb0: 74 49 74 65 6d 69 7a 65 28 63 6f 6e 73 74 28 57 tItemize(const(W 3bc0: 43 48 41 52 29 2a 2c 20 69 6e 74 2c 20 69 6e 74 CHAR)*, int, int 3bd0: 2c 20 63 6f 6e 73 74 28 53 43 52 49 50 54 5f 43 , const(SCRIPT_C 3be0: 4f 4e 54 52 4f 4c 29 2a 2c 20 63 6f 6e 73 74 28 ONTROL)*, const( 3bf0: 53 43 52 49 50 54 5f 53 54 41 54 45 29 2a 2c 20 SCRIPT_STATE)*, 3c00: 53 43 52 49 50 54 5f 49 54 45 4d 2a 2c 20 69 6e SCRIPT_ITEM*, in 3c10: 74 2a 29 3b 0d 0a 09 48 52 45 53 55 4c 54 20 53 t*);...HRESULT S 3c20: 63 72 69 70 74 4c 61 79 6f 75 74 28 69 6e 74 2c criptLayout(int, 3c30: 20 63 6f 6e 73 74 28 42 59 54 45 29 2a 2c 20 69 const(BYTE)*, i 3c40: 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0d 0a 09 48 52 nt*, int*);...HR 3c50: 45 53 55 4c 54 20 53 63 72 69 70 74 53 68 61 70 ESULT ScriptShap 3c60: 65 28 48 44 43 2c 20 53 43 52 49 50 54 5f 43 41 e(HDC, SCRIPT_CA 3c70: 43 48 45 2a 2c 20 63 6f 6e 73 74 28 57 43 48 41 CHE*, const(WCHA 3c80: 52 29 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 53 R)*, int, int, S 3c90: 43 52 49 50 54 5f 41 4e 41 4c 59 53 49 53 2a 2c CRIPT_ANALYSIS*, 3ca0: 20 57 4f 52 44 2a 2c 20 57 4f 52 44 2a 2c 20 53 WORD*, WORD*, S 3cb0: 43 52 49 50 54 5f 56 49 53 41 54 54 52 2a 2c 20 CRIPT_VISATTR*, 3cc0: 69 6e 74 2a 29 3b 0d 0a 09 48 52 45 53 55 4c 54 int*);...HRESULT 3cd0: 20 53 63 72 69 70 74 50 6c 61 63 65 28 48 44 43 ScriptPlace(HDC 3ce0: 2c 20 53 43 52 49 50 54 5f 43 41 43 48 45 2a 2c , SCRIPT_CACHE*, 3cf0: 20 63 6f 6e 73 74 28 57 4f 52 44 29 2a 2c 20 69 const(WORD)*, i 3d00: 6e 74 2c 20 63 6f 6e 73 74 28 53 43 52 49 50 54 nt, const(SCRIPT 3d10: 5f 56 49 53 41 54 54 52 29 2a 2c 20 53 43 52 49 _VISATTR)*, SCRI 3d20: 50 54 5f 41 4e 41 4c 59 53 49 53 2a 2c 20 69 6e PT_ANALYSIS*, in 3d30: 74 2a 2c 20 47 4f 46 46 53 45 54 2a 2c 20 41 42 t*, GOFFSET*, AB 3d40: 43 2a 29 3b 0d 0a 09 48 52 45 53 55 4c 54 20 53 C*);...HRESULT S 3d50: 63 72 69 70 74 54 65 78 74 4f 75 74 28 48 44 43 criptTextOut(HDC 3d60: 2c 20 53 43 52 49 50 54 5f 43 41 43 48 45 2a 2c , SCRIPT_CACHE*, 3d70: 20 69 6e 74 2c 20 69 6e 74 2c 20 55 49 4e 54 2c int, int, UINT, 3d80: 20 63 6f 6e 73 74 28 52 45 43 54 29 2a 2c 20 63 const(RECT)*, c 3d90: 6f 6e 73 74 28 53 43 52 49 50 54 5f 41 4e 41 4c onst(SCRIPT_ANAL 3da0: 59 53 49 53 29 2a 2c 20 63 6f 6e 73 74 28 57 43 YSIS)*, const(WC 3db0: 48 41 52 29 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 HAR)*, int, cons 3dc0: 74 28 57 4f 52 44 29 2a 2c 20 69 6e 74 2c 20 63 t(WORD)*, int, c 3dd0: 6f 6e 73 74 28 69 6e 74 29 2a 2c 20 69 6e 74 2a onst(int)*, int* 3de0: 2c 20 63 6f 6e 73 74 28 47 4f 46 46 53 45 54 29 , const(GOFFSET) 3df0: 2a 29 3b 0d 0a 09 48 52 45 53 55 4c 54 20 53 63 *);...HRESULT Sc 3e00: 72 69 70 74 4a 75 73 74 69 66 79 28 63 6f 6e 73 riptJustify(cons 3e10: 74 28 53 43 52 49 50 54 5f 56 49 53 41 54 54 52 t(SCRIPT_VISATTR 3e20: 29 2a 2c 20 63 6f 6e 73 74 28 69 6e 74 29 2a 2c )*, const(int)*, 3e30: 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 int, int, int, 3e40: 69 6e 74 2a 29 3b 0d 0a 09 48 52 45 53 55 4c 54 int*);...HRESULT 3e50: 20 53 63 72 69 70 74 42 72 65 61 6b 28 63 6f 6e ScriptBreak(con 3e60: 73 74 28 57 43 48 41 52 29 2a 2c 20 69 6e 74 2c st(WCHAR)*, int, 3e70: 20 63 6f 6e 73 74 28 53 43 52 49 50 54 5f 41 4e const(SCRIPT_AN 3e80: 41 4c 59 53 49 53 29 2a 2c 20 63 6f 6e 73 74 28 ALYSIS)*, const( 3e90: 53 43 52 49 50 54 5f 4c 4f 47 41 54 54 52 29 2a SCRIPT_LOGATTR)* 3ea0: 29 3b 0d 0a 09 48 52 45 53 55 4c 54 20 53 63 72 );...HRESULT Scr 3eb0: 69 70 74 43 50 74 6f 58 28 69 6e 74 2c 20 42 4f iptCPtoX(int, BO 3ec0: 4f 4c 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 6f OL, int, int, co 3ed0: 6e 73 74 28 57 4f 52 44 29 2a 2c 20 63 6f 6e 73 nst(WORD)*, cons 3ee0: 74 28 53 43 52 49 50 54 5f 56 49 53 41 54 54 52 t(SCRIPT_VISATTR 3ef0: 29 2a 2c 20 63 6f 6e 73 74 28 69 6e 74 29 2a 2c )*, const(int)*, 3f00: 20 63 6f 6e 73 74 28 53 43 52 49 50 54 5f 41 4e const(SCRIPT_AN 3f10: 41 4c 59 53 49 53 29 2a 2c 20 69 6e 74 2a 29 3b ALYSIS)*, int*); 3f20: 0d 0a 09 48 52 45 53 55 4c 54 20 53 63 72 69 70 ...HRESULT Scrip 3f30: 74 58 74 6f 43 50 28 69 6e 74 2c 20 69 6e 74 2c tXtoCP(int, int, 3f40: 20 69 6e 74 2c 20 63 6f 6e 73 74 28 57 4f 52 44 int, const(WORD 3f50: 29 2a 2c 20 63 6f 6e 73 74 28 53 43 52 49 50 54 )*, const(SCRIPT 3f60: 5f 56 49 53 41 54 54 52 29 2a 2c 20 63 6f 6e 73 _VISATTR)*, cons 3f70: 74 28 69 6e 74 29 2a 2c 20 63 6f 6e 73 74 28 53 t(int)*, const(S 3f80: 43 52 49 50 54 5f 41 4e 41 4c 59 53 49 53 29 2a CRIPT_ANALYSIS)* 3f90: 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0d 0a , int*, int*);.. 3fa0: 09 48 52 45 53 55 4c 54 20 53 63 72 69 70 74 47 .HRESULT ScriptG 3fb0: 65 74 4c 6f 67 69 63 61 6c 57 69 64 74 68 73 28 etLogicalWidths( 3fc0: 63 6f 6e 73 74 28 53 43 52 49 50 54 5f 41 4e 41 const(SCRIPT_ANA 3fd0: 4c 59 53 49 53 29 2a 2c 20 69 6e 74 2c 20 69 6e LYSIS)*, int, in 3fe0: 74 2c 20 63 6f 6e 73 74 28 69 6e 74 29 2a 2c 20 t, const(int)*, 3ff0: 63 6f 6e 73 74 28 57 4f 52 44 29 2a 2c 20 63 6f const(WORD)*, co 4000: 6e 73 74 28 53 43 52 49 50 54 5f 56 49 53 41 54 nst(SCRIPT_VISAT 4010: 54 52 29 2a 2c 20 69 6e 74 2a 29 3b 0d 0a 09 48 TR)*, int*);...H 4020: 52 45 53 55 4c 54 20 53 63 72 69 70 74 41 70 70 RESULT ScriptApp 4030: 6c 79 4c 6f 67 69 63 61 6c 57 69 64 74 68 28 63 lyLogicalWidth(c 4040: 6f 6e 73 74 28 69 6e 74 29 2a 2c 20 69 6e 74 2c onst(int)*, int, 4050: 20 69 6e 74 2c 20 63 6f 6e 73 74 28 57 4f 52 44 int, const(WORD 4060: 29 2a 2c 20 63 6f 6e 73 74 28 53 43 52 49 50 54 )*, const(SCRIPT 4070: 5f 56 49 53 41 54 54 52 29 2a 2c 20 63 6f 6e 73 _VISATTR)*, cons 4080: 74 28 69 6e 74 29 2a 2c 20 63 6f 6e 73 74 28 53 t(int)*, const(S 4090: 43 52 49 50 54 5f 41 4e 41 4c 59 53 49 53 29 2a CRIPT_ANALYSIS)* 40a0: 2c 20 41 42 43 2a 2c 20 69 6e 74 2a 29 3b 0d 0a , ABC*, int*);.. 40b0: 09 48 52 45 53 55 4c 54 20 53 63 72 69 70 74 47 .HRESULT ScriptG 40c0: 65 74 43 4d 61 70 28 48 44 43 2c 20 53 43 52 49 etCMap(HDC, SCRI 40d0: 50 54 5f 43 41 43 48 45 2a 2c 20 63 6f 6e 73 74 PT_CACHE*, const 40e0: 28 57 43 48 41 52 29 2a 2c 20 69 6e 74 2c 20 44 (WCHAR)*, int, D 40f0: 57 4f 52 44 2c 20 57 4f 52 44 2a 29 3b 0d 0a 09 WORD, WORD*);... 4100: 48 52 45 53 55 4c 54 20 53 63 72 69 70 74 47 65 HRESULT ScriptGe 4110: 74 47 6c 79 70 68 41 42 43 57 69 64 74 68 28 48 tGlyphABCWidth(H 4120: 44 43 2c 20 53 43 52 49 50 54 5f 43 41 43 48 45 DC, SCRIPT_CACHE 4130: 2a 2c 20 57 4f 52 44 2c 20 41 42 43 2a 29 3b 0d *, WORD, ABC*);. 4140: 0a 09 48 52 45 53 55 4c 54 20 53 63 72 69 70 74 ..HRESULT Script 4150: 47 65 74 50 72 6f 70 65 72 74 69 65 73 28 63 6f GetProperties(co 4160: 6e 73 74 28 53 43 52 49 50 54 5f 50 52 4f 50 45 nst(SCRIPT_PROPE 4170: 52 54 49 45 53 2a 2a 29 2a 2c 20 69 6e 74 2a 29 RTIES**)*, int*) 4180: 3b 0d 0a 09 48 52 45 53 55 4c 54 20 53 63 72 69 ;...HRESULT Scri 4190: 70 74 47 65 74 46 6f 6e 74 50 72 6f 70 65 72 74 ptGetFontPropert 41a0: 69 65 73 28 48 44 43 2c 20 53 43 52 49 50 54 5f ies(HDC, SCRIPT_ 41b0: 43 41 43 48 45 2a 2c 20 53 43 52 49 50 54 5f 46 CACHE*, SCRIPT_F 41c0: 4f 4e 54 50 52 4f 50 45 52 54 49 45 53 2a 29 3b ONTPROPERTIES*); 41d0: 0d 0a 09 48 52 45 53 55 4c 54 20 53 63 72 69 70 ...HRESULT Scrip 41e0: 74 43 61 63 68 65 47 65 74 48 65 69 67 68 74 28 tCacheGetHeight( 41f0: 48 44 43 2c 20 53 43 52 49 50 54 5f 43 41 43 48 HDC, SCRIPT_CACH 4200: 45 2a 2c 20 69 6e 74 2a 29 3b 0d 0a 09 48 52 45 E*, int*);...HRE 4210: 53 55 4c 54 20 53 63 72 69 70 74 49 73 43 6f 6d SULT ScriptIsCom 4220: 70 6c 65 78 28 63 6f 6e 73 74 28 57 43 48 41 52 plex(const(WCHAR 4230: 29 2a 2c 20 69 6e 74 2c 20 44 57 4f 52 44 29 3b )*, int, DWORD); 4240: 0d 0a 09 48 52 45 53 55 4c 54 20 53 63 72 69 70 ...HRESULT Scrip 4250: 74 52 65 63 6f 72 64 44 69 67 69 74 53 75 62 73 tRecordDigitSubs 4260: 74 69 74 75 74 69 6f 6e 28 4c 43 49 44 2c 20 53 titution(LCID, S 4270: 43 52 49 50 54 5f 44 49 47 49 54 53 55 42 53 54 CRIPT_DIGITSUBST 4280: 49 54 55 54 45 2a 29 3b 0d 0a 09 48 52 45 53 55 ITUTE*);...HRESU 4290: 4c 54 20 53 63 72 69 70 74 41 70 70 6c 79 44 69 LT ScriptApplyDi 42a0: 67 69 74 53 75 62 73 74 69 74 75 74 69 6f 6e 28 gitSubstitution( 42b0: 63 6f 6e 73 74 28 53 43 52 49 50 54 5f 44 49 47 const(SCRIPT_DIG 42c0: 49 54 53 55 42 53 54 49 54 55 54 45 29 2a 2c 20 ITSUBSTITUTE)*, 42d0: 53 43 52 49 50 54 5f 43 4f 4e 54 52 4f 4c 2a 2c SCRIPT_CONTROL*, 42e0: 20 53 43 52 49 50 54 5f 53 54 41 54 45 2a 29 3b SCRIPT_STATE*); 42f0: 0d 0a 0d 0a 09 2f 2a 20 53 63 72 69 70 74 53 74 ...../* ScriptSt 4300: 72 69 6e 67 20 46 75 6e 63 74 69 6f 6e 73 0d 0a ring Functions.. 4310: 09 20 2a 20 68 74 74 70 3a 2f 2f 6d 73 64 6e 32 . * http://msdn2 4320: 2e 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 2f 6c .microsoft.com/l 4330: 69 62 72 61 72 79 2f 6d 73 37 37 36 34 38 35 20 ibrary/ms776485 4340: 2a 2f 0d 0a 09 48 52 45 53 55 4c 54 20 53 63 72 */...HRESULT Scr 4350: 69 70 74 53 74 72 69 6e 67 41 6e 61 6c 79 73 65 iptStringAnalyse 4360: 28 48 44 43 2c 20 63 6f 6e 73 74 28 76 6f 69 64 (HDC, const(void 4370: 29 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e )*, int, int, in 4380: 74 2c 20 44 57 4f 52 44 2c 20 69 6e 74 2c 20 53 t, DWORD, int, S 4390: 43 52 49 50 54 5f 43 4f 4e 54 52 4f 4c 2a 2c 20 CRIPT_CONTROL*, 43a0: 53 43 52 49 50 54 5f 53 54 41 54 45 2a 2c 20 63 SCRIPT_STATE*, c 43b0: 6f 6e 73 74 28 69 6e 74 29 2a 2c 20 53 43 52 49 onst(int)*, SCRI 43c0: 50 54 5f 54 41 42 44 45 46 2a 2c 20 63 6f 6e 73 PT_TABDEF*, cons 43d0: 74 28 42 59 54 45 29 2a 2c 20 53 43 52 49 50 54 t(BYTE)*, SCRIPT 43e0: 5f 53 54 52 49 4e 47 5f 41 4e 41 4c 59 53 49 53 _STRING_ANALYSIS 43f0: 2a 29 3b 0d 0a 09 48 52 45 53 55 4c 54 20 53 63 *);...HRESULT Sc 4400: 72 69 70 74 53 74 72 69 6e 67 46 72 65 65 28 53 riptStringFree(S 4410: 43 52 49 50 54 5f 53 54 52 49 4e 47 5f 41 4e 41 CRIPT_STRING_ANA 4420: 4c 59 53 49 53 2a 29 3b 0d 0a 09 63 6f 6e 73 74 LYSIS*);...const 4430: 28 53 49 5a 45 29 2a 20 53 63 72 69 70 74 53 74 (SIZE)* ScriptSt 4440: 72 69 6e 67 5f 70 53 69 7a 65 28 53 43 52 49 50 ring_pSize(SCRIP 4450: 54 5f 53 54 52 49 4e 47 5f 41 4e 41 4c 59 53 49 T_STRING_ANALYSI 4460: 53 29 3b 0d 0a 09 63 6f 6e 73 74 28 69 6e 74 29 S);...const(int) 4470: 2a 20 53 63 72 69 70 74 53 74 72 69 6e 67 5f 70 * ScriptString_p 4480: 63 4f 75 74 43 68 61 72 73 28 53 43 52 49 50 54 cOutChars(SCRIPT 4490: 5f 53 54 52 49 4e 47 5f 41 4e 41 4c 59 53 49 53 _STRING_ANALYSIS 44a0: 29 3b 0d 0a 09 63 6f 6e 73 74 28 53 43 52 49 50 );...const(SCRIP 44b0: 54 5f 4c 4f 47 41 54 54 52 29 2a 20 53 63 72 69 T_LOGATTR)* Scri 44c0: 70 74 53 74 72 69 6e 67 5f 70 4c 6f 67 41 74 74 ptString_pLogAtt 44d0: 72 28 53 43 52 49 50 54 5f 53 54 52 49 4e 47 5f r(SCRIPT_STRING_ 44e0: 41 4e 41 4c 59 53 49 53 29 3b 0d 0a 09 48 52 45 ANALYSIS);...HRE 44f0: 53 55 4c 54 20 53 63 72 69 70 74 53 74 72 69 6e SULT ScriptStrin 4500: 67 47 65 74 4f 72 64 65 72 28 53 43 52 49 50 54 gGetOrder(SCRIPT 4510: 5f 53 54 52 49 4e 47 5f 41 4e 41 4c 59 53 49 53 _STRING_ANALYSIS 4520: 2c 20 55 49 4e 54 2a 29 3b 0d 0a 09 48 52 45 53 , UINT*);...HRES 4530: 55 4c 54 20 53 63 72 69 70 74 53 74 72 69 6e 67 ULT ScriptString 4540: 43 50 74 6f 58 28 53 43 52 49 50 54 5f 53 54 52 CPtoX(SCRIPT_STR 4550: 49 4e 47 5f 41 4e 41 4c 59 53 49 53 2c 20 69 6e ING_ANALYSIS, in 4560: 74 2c 20 42 4f 4f 4c 2c 20 69 6e 74 2a 29 3b 0d t, BOOL, int*);. 4570: 0a 09 48 52 45 53 55 4c 54 20 53 63 72 69 70 74 ..HRESULT Script 4580: 53 74 72 69 6e 67 58 74 6f 43 50 28 53 43 52 49 StringXtoCP(SCRI 4590: 50 54 5f 53 54 52 49 4e 47 5f 41 4e 41 4c 59 53 PT_STRING_ANALYS 45a0: 49 53 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 IS, int, int*, i 45b0: 6e 74 2a 29 3b 0d 0a 09 48 52 45 53 55 4c 54 20 nt*);...HRESULT 45c0: 53 63 72 69 70 74 53 74 72 69 6e 67 47 65 74 4c ScriptStringGetL 45d0: 6f 67 69 63 61 6c 57 69 64 74 68 73 28 53 43 52 ogicalWidths(SCR 45e0: 49 50 54 5f 53 54 52 49 4e 47 5f 41 4e 41 4c 59 IPT_STRING_ANALY 45f0: 53 49 53 2c 20 69 6e 74 2a 29 3b 0d 0a 09 48 52 SIS, int*);...HR 4600: 45 53 55 4c 54 20 53 63 72 69 70 74 53 74 72 69 ESULT ScriptStri 4610: 6e 67 56 61 6c 69 64 61 74 65 28 53 43 52 49 50 ngValidate(SCRIP 4620: 54 5f 53 54 52 49 4e 47 5f 41 4e 41 4c 59 53 49 T_STRING_ANALYSI 4630: 53 29 3b 0d 0a 09 48 52 45 53 55 4c 54 20 53 63 S);...HRESULT Sc 4640: 72 69 70 74 53 74 72 69 6e 67 4f 75 74 28 53 43 riptStringOut(SC 4650: 52 49 50 54 5f 53 54 52 49 4e 47 5f 41 4e 41 4c RIPT_STRING_ANAL 4660: 59 53 49 53 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 YSIS, int, int, 4670: 55 49 4e 54 2c 20 63 6f 6e 73 74 28 52 45 43 54 UINT, const(RECT 4680: 29 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 42 4f )*, int, int, BO 4690: 4f 4c 29 3b 0d 0a 0d 0a 09 2f 2a 20 54 4f 44 4f OL);...../* TODO 46a0: 3a 20 57 69 6e 64 6f 77 73 20 56 69 73 74 61 20 : Windows Vista 46b0: 66 65 61 72 75 72 65 64 20 66 75 6e 63 74 69 6f fearured functio 46c0: 6e 73 0d 0a 09 53 63 72 69 70 74 47 65 74 46 6f ns...ScriptGetFo 46d0: 6e 74 41 6c 74 65 72 6e 61 74 65 47 6c 79 70 68 ntAlternateGlyph 46e0: 73 28 29 0d 0a 09 53 63 72 69 70 74 47 65 74 46 s()...ScriptGetF 46f0: 6f 6e 74 46 65 61 74 75 72 65 54 61 67 73 28 29 ontFeatureTags() 4700: 0d 0a 09 53 63 72 69 70 74 47 65 74 46 6f 6e 74 ...ScriptGetFont 4710: 4c 61 6e 67 75 61 67 65 54 61 67 73 28 29 0d 0a LanguageTags().. 4720: 09 53 63 72 69 70 74 47 65 74 46 6f 6e 74 53 63 .ScriptGetFontSc 4730: 72 69 70 74 54 61 67 73 28 29 0d 0a 09 53 63 72 riptTags()...Scr 4740: 69 70 74 49 74 65 6d 69 7a 65 4f 70 65 6e 54 79 iptItemizeOpenTy 4750: 70 65 28 29 0d 0a 09 53 63 72 69 70 74 50 6c 61 pe()...ScriptPla 4760: 63 65 4f 70 65 6e 54 79 70 65 28 29 0d 0a 09 53 ceOpenType()...S 4770: 63 72 69 70 74 50 6f 73 69 74 69 6f 6e 53 69 6e criptPositionSin 4780: 67 6c 65 47 6c 79 70 68 28 29 0d 0a 09 53 63 72 gleGlyph()...Scr 4790: 69 70 74 53 68 61 70 65 4f 70 65 6e 54 79 70 65 iptShapeOpenType 47a0: 28 29 0d 0a 09 53 63 72 69 70 74 53 75 62 73 74 ()...ScriptSubst 47b0: 69 74 75 74 65 53 69 6e 67 6c 65 47 6c 79 70 68 ituteSingleGlyph 47c0: 28 29 0d 0a 09 2a 2f 0d 0a 7d 0d 0a ()...*/..}..