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 0a 20 2a 20 68 74 74 processor. * htt
0030: 70 3a 2f 2f 6d 73 64 6e 32 2e 6d 69 63 72 6f 73 p://msdn2.micros
0040: 6f 66 74 2e 63 6f 6d 2f 6c 69 62 72 61 72 79 2f oft.com/library/
0050: 6d 73 37 37 36 34 38 38 20 2a 2f 0a 0a 0a 6d 6f ms776488 */...mo
0060: 64 75 6c 65 20 77 69 6e 33 32 2e 75 73 70 31 30 dule win32.usp10
0070: 3b 0a 69 6d 70 6f 72 74 20 77 69 6e 33 32 2e 77 ;.import win32.w
0080: 69 6e 64 6f 77 73 3b 0a 0a 0a 0a 2f 2a 20 55 6e indows;..../* Un
0090: 69 73 63 72 69 62 65 20 45 6e 75 6d 65 72 61 74 iscribe Enumerat
00a0: 69 6f 6e 20 54 79 70 65 73 0a 20 2a 20 68 74 74 ion Types. * htt
00b0: 70 3a 2f 2f 6d 73 64 6e 32 2e 6d 69 63 72 6f 73 p://msdn2.micros
00c0: 6f 66 74 2e 63 6f 6d 2f 6c 69 62 72 61 72 79 2f oft.com/library/
00d0: 6d 73 37 37 36 35 31 38 20 2a 2f 0a 0a 65 6e 75 ms776518 */..enu
00e0: 6d 20 3a 20 57 4f 52 44 20 7b 0a 09 53 43 52 49 m : WORD {..SCRI
00f0: 50 54 5f 55 4e 44 45 46 49 4e 45 44 20 3d 20 30 PT_UNDEFINED = 0
0100: 2c 0a 7d 0a 0a 65 6e 75 6d 20 3a 20 44 57 4f 52 ,.}..enum : DWOR
0110: 44 20 7b 0a 09 53 47 43 4d 5f 52 54 4c 20 3d 20 D {..SGCM_RTL =
0120: 30 78 30 30 30 30 30 30 30 31 2c 0a 7d 0a 0a 65 0x00000001,.}..e
0130: 6e 75 6d 20 3a 20 44 57 4f 52 44 20 7b 0a 09 53 num : DWORD {..S
0140: 53 41 5f 50 41 53 53 57 4f 52 44 20 20 20 20 20 SA_PASSWORD
0150: 20 20 20 3d 20 30 78 30 30 30 30 30 30 30 31 2c = 0x00000001,
0160: 0a 09 53 53 41 5f 54 41 42 20 20 20 20 20 20 20 ..SSA_TAB
0170: 20 20 20 20 20 20 3d 20 30 78 30 30 30 30 30 30 = 0x000000
0180: 30 32 2c 0a 09 53 53 41 5f 43 4c 49 50 20 20 20 02,..SSA_CLIP
0190: 20 20 20 20 20 20 20 20 20 3d 20 30 78 30 30 30 = 0x000
01a0: 30 30 30 30 34 2c 0a 09 53 53 41 5f 46 49 54 20 00004,..SSA_FIT
01b0: 20 20 20 20 20 20 20 20 20 20 20 20 3d 20 30 78 = 0x
01c0: 30 30 30 30 30 30 30 38 2c 0a 09 53 53 41 5f 44 00000008,..SSA_D
01d0: 5a 57 47 20 20 20 20 20 20 20 20 20 20 20 20 3d ZWG =
01e0: 20 30 78 30 30 30 30 30 30 31 30 2c 0a 09 53 53 0x00000010,..SS
01f0: 41 5f 46 41 4c 4c 42 41 43 4b 20 20 20 20 20 20 A_FALLBACK
0200: 20 20 3d 20 30 78 30 30 30 30 30 30 32 30 2c 0a = 0x00000020,.
0210: 09 53 53 41 5f 42 52 45 41 4b 20 20 20 20 20 20 .SSA_BREAK
0220: 20 20 20 20 20 3d 20 30 78 30 30 30 30 30 30 34 = 0x0000004
0230: 30 2c 0a 09 53 53 41 5f 47 4c 59 50 48 53 20 20 0,..SSA_GLYPHS
0240: 20 20 20 20 20 20 20 20 3d 20 30 78 30 30 30 30 = 0x0000
0250: 30 30 38 30 2c 0a 09 53 53 41 5f 52 54 4c 20 20 0080,..SSA_RTL
0260: 20 20 20 20 20 20 20 20 20 20 20 3d 20 30 78 30 = 0x0
0270: 30 30 30 30 31 30 30 2c 0a 09 53 53 41 5f 47 43 0000100,..SSA_GC
0280: 50 20 20 20 20 20 20 20 20 20 20 20 20 20 3d 20 P =
0290: 30 78 30 30 30 30 30 32 30 30 2c 0a 09 53 53 41 0x00000200,..SSA
02a0: 5f 48 4f 54 4b 45 59 20 20 20 20 20 20 20 20 20 _HOTKEY
02b0: 20 3d 20 30 78 30 30 30 30 30 34 30 30 2c 0a 09 = 0x00000400,..
02c0: 53 53 41 5f 4d 45 54 41 46 49 4c 45 20 20 20 20 SSA_METAFILE
02d0: 20 20 20 20 3d 20 30 78 30 30 30 30 30 38 30 30 = 0x00000800
02e0: 2c 0a 09 53 53 41 5f 4c 49 4e 4b 20 20 20 20 20 ,..SSA_LINK
02f0: 20 20 20 20 20 20 20 3d 20 30 78 30 30 30 30 31 = 0x00001
0300: 30 30 30 2c 0a 09 53 53 41 5f 48 49 44 45 48 4f 000,..SSA_HIDEHO
0310: 54 4b 45 59 20 20 20 20 20 20 3d 20 30 78 30 30 TKEY = 0x00
0320: 30 30 32 30 30 30 2c 0a 09 53 53 41 5f 48 4f 54 002000,..SSA_HOT
0330: 4b 45 59 4f 4e 4c 59 20 20 20 20 20 20 3d 20 30 KEYONLY = 0
0340: 78 30 30 30 30 32 34 30 30 2c 0a 09 53 53 41 5f x00002400,..SSA_
0350: 46 55 4c 4c 4d 45 41 53 55 52 45 20 20 20 20 20 FULLMEASURE
0360: 3d 20 30 78 30 34 30 30 30 30 30 30 2c 0a 09 53 = 0x04000000,..S
0370: 53 41 5f 4c 50 4b 41 4e 53 49 46 41 4c 4c 42 41 SA_LPKANSIFALLBA
0380: 43 4b 20 3d 20 30 78 30 38 30 30 30 30 30 30 2c CK = 0x08000000,
0390: 0a 09 53 53 41 5f 50 49 44 58 20 20 20 20 20 20 ..SSA_PIDX
03a0: 20 20 20 20 20 20 3d 20 30 78 31 30 30 30 30 30 = 0x100000
03b0: 30 30 2c 0a 09 53 53 41 5f 4c 41 59 4f 55 54 52 00,..SSA_LAYOUTR
03c0: 54 4c 20 20 20 20 20 20 20 3d 20 30 78 32 30 30 TL = 0x200
03d0: 30 30 30 30 30 2c 0a 09 53 53 41 5f 44 4f 4e 54 00000,..SSA_DONT
03e0: 47 4c 59 50 48 20 20 20 20 20 20 20 3d 20 30 78 GLYPH = 0x
03f0: 34 30 30 30 30 30 30 30 2c 0a 09 53 53 41 5f 4e 40000000,..SSA_N
0400: 4f 4b 41 53 48 49 44 41 20 20 20 20 20 20 20 3d OKASHIDA =
0410: 20 30 78 38 30 30 30 30 30 30 30 2c 0a 7d 0a 0a 0x80000000,.}..
0420: 65 6e 75 6d 20 3a 20 44 57 4f 52 44 20 7b 0a 09 enum : DWORD {..
0430: 53 49 43 5f 43 4f 4d 50 4c 45 58 20 20 20 20 3d SIC_COMPLEX =
0440: 20 31 2c 0a 09 53 49 43 5f 41 53 43 49 49 44 49 1,..SIC_ASCIIDI
0450: 47 49 54 20 3d 20 32 2c 0a 09 53 49 43 5f 4e 45 GIT = 2,..SIC_NE
0460: 55 54 52 41 4c 20 20 20 20 3d 20 34 2c 0a 7d 0a UTRAL = 4,.}.
0470: 0a 65 6e 75 6d 20 3a 20 44 57 4f 52 44 20 7b 0a .enum : DWORD {.
0480: 09 53 43 52 49 50 54 5f 44 49 47 49 54 53 55 42 .SCRIPT_DIGITSUB
0490: 53 54 49 54 55 54 45 5f 43 4f 4e 54 45 58 54 2c STITUTE_CONTEXT,
04a0: 0a 09 53 43 52 49 50 54 5f 44 49 47 49 54 53 55 ..SCRIPT_DIGITSU
04b0: 42 53 54 49 54 55 54 45 5f 4e 4f 4e 45 2c 0a 09 BSTITUTE_NONE,..
04c0: 53 43 52 49 50 54 5f 44 49 47 49 54 53 55 42 53 SCRIPT_DIGITSUBS
04d0: 54 49 54 55 54 45 5f 4e 41 54 49 4f 4e 41 4c 2c TITUTE_NATIONAL,
04e0: 0a 09 53 43 52 49 50 54 5f 44 49 47 49 54 53 55 ..SCRIPT_DIGITSU
04f0: 42 53 54 49 54 55 54 45 5f 54 52 41 44 49 54 49 BSTITUTE_TRADITI
0500: 4f 4e 41 4c 2c 0a 7d 0a 0a 65 6e 75 6d 20 53 43 ONAL,.}..enum SC
0510: 52 49 50 54 5f 4a 55 53 54 49 46 59 20 3a 20 57 RIPT_JUSTIFY : W
0520: 4f 52 44 20 7b 0a 20 20 20 20 53 43 52 49 50 54 ORD {. SCRIPT
0530: 5f 4a 55 53 54 49 46 59 5f 4e 4f 4e 45 2c 0a 20 _JUSTIFY_NONE,.
0540: 20 20 20 53 43 52 49 50 54 5f 4a 55 53 54 49 46 SCRIPT_JUSTIF
0550: 59 5f 41 52 41 42 49 43 5f 42 4c 41 4e 4b 2c 0a Y_ARABIC_BLANK,.
0560: 20 20 20 20 53 43 52 49 50 54 5f 4a 55 53 54 49 SCRIPT_JUSTI
0570: 46 59 5f 43 48 41 52 41 43 54 45 52 2c 0a 20 20 FY_CHARACTER,.
0580: 20 20 53 43 52 49 50 54 5f 4a 55 53 54 49 46 59 SCRIPT_JUSTIFY
0590: 5f 52 45 53 45 52 56 45 44 31 2c 0a 20 20 20 20 _RESERVED1,.
05a0: 53 43 52 49 50 54 5f 4a 55 53 54 49 46 59 5f 42 SCRIPT_JUSTIFY_B
05b0: 4c 41 4e 4b 2c 0a 20 20 20 20 53 43 52 49 50 54 LANK,. SCRIPT
05c0: 5f 4a 55 53 54 49 46 59 5f 52 45 53 45 52 56 45 _JUSTIFY_RESERVE
05d0: 44 32 2c 0a 20 20 20 20 53 43 52 49 50 54 5f 4a D2,. SCRIPT_J
05e0: 55 53 54 49 46 59 5f 52 45 53 45 52 56 45 44 33 USTIFY_RESERVED3
05f0: 2c 0a 20 20 20 20 53 43 52 49 50 54 5f 4a 55 53 ,. SCRIPT_JUS
0600: 54 49 46 59 5f 41 52 41 42 49 43 5f 4e 4f 52 4d TIFY_ARABIC_NORM
0610: 41 4c 2c 0a 20 20 20 20 53 43 52 49 50 54 5f 4a AL,. SCRIPT_J
0620: 55 53 54 49 46 59 5f 41 52 41 42 49 43 5f 4b 41 USTIFY_ARABIC_KA
0630: 53 48 49 44 41 2c 0a 20 20 20 20 53 43 52 49 50 SHIDA,. SCRIP
0640: 54 5f 4a 55 53 54 49 46 59 5f 41 52 41 42 49 43 T_JUSTIFY_ARABIC
0650: 5f 41 4c 45 46 2c 0a 20 20 20 20 53 43 52 49 50 _ALEF,. SCRIP
0660: 54 5f 4a 55 53 54 49 46 59 5f 41 52 41 42 49 43 T_JUSTIFY_ARABIC
0670: 5f 48 41 2c 0a 20 20 20 20 53 43 52 49 50 54 5f _HA,. SCRIPT_
0680: 4a 55 53 54 49 46 59 5f 41 52 41 42 49 43 5f 52 JUSTIFY_ARABIC_R
0690: 41 2c 0a 20 20 20 20 53 43 52 49 50 54 5f 4a 55 A,. SCRIPT_JU
06a0: 53 54 49 46 59 5f 41 52 41 42 49 43 5f 42 41 2c STIFY_ARABIC_BA,
06b0: 0a 20 20 20 20 53 43 52 49 50 54 5f 4a 55 53 54 . SCRIPT_JUST
06c0: 49 46 59 5f 41 52 41 42 49 43 5f 42 41 52 41 2c IFY_ARABIC_BARA,
06d0: 0a 20 20 20 20 53 43 52 49 50 54 5f 4a 55 53 54 . SCRIPT_JUST
06e0: 49 46 59 5f 41 52 41 42 49 43 5f 53 45 45 4e 2c IFY_ARABIC_SEEN,
06f0: 0a 20 20 20 20 53 43 52 49 50 54 5f 4a 55 53 54 . SCRIPT_JUST
0700: 49 46 59 5f 41 52 41 42 49 43 5f 53 45 45 4e 5f IFY_ARABIC_SEEN_
0710: 4d 2c 0a 7d 0a 0a 0a 0a 2f 2a 20 55 6e 69 73 63 M,.}..../* Unisc
0720: 72 69 62 65 20 53 74 72 75 63 74 75 72 65 73 0a ribe Structures.
0730: 20 2a 20 68 74 74 70 3a 2f 2f 6d 73 64 6e 32 2e * http://msdn2.
0740: 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 2f 6c 69 microsoft.com/li
0750: 62 72 61 72 79 2f 6d 73 37 37 36 34 37 39 20 2a brary/ms776479 *
0760: 2f 0a 0a 61 6c 69 61 73 20 76 6f 69 64 2a 20 53 /..alias void* S
0770: 43 52 49 50 54 5f 43 41 43 48 45 3b 0a 61 6c 69 CRIPT_CACHE;.ali
0780: 61 73 20 76 6f 69 64 2a 20 53 43 52 49 50 54 5f as void* SCRIPT_
0790: 53 54 52 49 4e 47 5f 41 4e 41 4c 59 53 49 53 3b STRING_ANALYSIS;
07a0: 0a 0a 65 78 74 65 72 6e 20 28 43 29 0a 7b 0a 09 ..extern (C).{..
07b0: 73 74 72 75 63 74 20 53 43 52 49 50 54 5f 43 4f struct SCRIPT_CO
07c0: 4e 54 52 4f 4c 0a 09 7b 0a 09 09 70 72 69 76 61 NTROL..{...priva
07d0: 74 65 20 44 57 4f 52 44 20 5f 62 69 74 66 69 65 te DWORD _bitfie
07e0: 6c 64 3b 0a 09 09 44 57 4f 52 44 20 75 44 65 66 ld;...DWORD uDef
07f0: 61 75 6c 74 4c 61 6e 67 75 61 67 65 28 29 20 20 aultLanguage()
0800: 20 20 20 20 20 20 20 20 20 20 20 7b 20 72 65 74 { ret
0810: 75 72 6e 20 28 5f 62 69 74 66 69 65 6c 64 20 3e urn (_bitfield >
0820: 3e 20 30 29 20 26 20 30 78 46 46 46 46 3b 20 7d > 0) & 0xFFFF; }
0830: 0a 09 09 44 57 4f 52 44 20 75 44 65 66 61 75 6c ...DWORD uDefaul
0840: 74 4c 61 6e 67 75 61 67 65 28 44 57 4f 52 44 20 tLanguage(DWORD
0850: 76 61 6c 29 20 20 20 20 7b 20 5f 62 69 74 66 69 val) { _bitfi
0860: 65 6c 64 20 3d 20 63 61 73 74 28 44 57 4f 52 44 eld = cast(DWORD
0870: 29 28 28 5f 62 69 74 66 69 65 6c 64 20 26 20 30 )((_bitfield & 0
0880: 78 46 46 46 46 46 46 46 46 46 46 46 46 30 30 30 xFFFFFFFFFFFF000
0890: 30 29 20 7c 20 28 76 61 6c 20 3c 3c 20 30 29 29 0) | (val << 0))
08a0: 3b 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0a ; return val; }.
08b0: 09 09 44 57 4f 52 44 20 66 43 6f 6e 74 65 78 74 ..DWORD fContext
08c0: 44 69 67 69 74 73 28 29 20 20 20 20 20 20 20 20 Digits()
08d0: 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 { return
08e0: 28 5f 62 69 74 66 69 65 6c 64 20 3e 3e 20 31 36 (_bitfield >> 16
08f0: 29 20 26 20 30 78 31 3b 20 7d 0a 09 09 44 57 4f ) & 0x1; }...DWO
0900: 52 44 20 66 43 6f 6e 74 65 78 74 44 69 67 69 74 RD fContextDigit
0910: 73 28 44 57 4f 52 44 20 76 61 6c 29 20 20 20 20 s(DWORD val)
0920: 20 20 7b 20 5f 62 69 74 66 69 65 6c 64 20 3d 20 { _bitfield =
0930: 63 61 73 74 28 44 57 4f 52 44 29 28 28 5f 62 69 cast(DWORD)((_bi
0940: 74 66 69 65 6c 64 20 26 20 30 78 46 46 46 46 46 tfield & 0xFFFFF
0950: 46 46 46 46 46 46 45 46 46 46 46 29 20 7c 20 28 FFFFFFEFFFF) | (
0960: 76 61 6c 20 3c 3c 20 31 36 29 29 3b 20 72 65 74 val << 16)); ret
0970: 75 72 6e 20 76 61 6c 3b 20 7d 0a 09 09 44 57 4f urn val; }...DWO
0980: 52 44 20 66 49 6e 76 65 72 74 50 72 65 42 6f 75 RD fInvertPreBou
0990: 6e 64 44 69 72 28 29 20 20 20 20 20 20 20 20 20 ndDir()
09a0: 20 20 7b 20 72 65 74 75 72 6e 20 28 5f 62 69 74 { return (_bit
09b0: 66 69 65 6c 64 20 3e 3e 20 31 37 29 20 26 20 30 field >> 17) & 0
09c0: 78 31 3b 20 7d 0a 09 09 44 57 4f 52 44 20 66 49 x1; }...DWORD fI
09d0: 6e 76 65 72 74 50 72 65 42 6f 75 6e 64 44 69 72 nvertPreBoundDir
09e0: 28 44 57 4f 52 44 20 76 61 6c 29 20 20 7b 20 5f (DWORD val) { _
09f0: 62 69 74 66 69 65 6c 64 20 3d 20 63 61 73 74 28 bitfield = cast(
0a00: 44 57 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c DWORD)((_bitfiel
0a10: 64 20 26 20 30 78 46 46 46 46 46 46 46 46 46 46 d & 0xFFFFFFFFFF
0a20: 46 44 46 46 46 46 29 20 7c 20 28 76 61 6c 20 3c FDFFFF) | (val <
0a30: 3c 20 31 37 29 29 3b 20 72 65 74 75 72 6e 20 76 < 17)); return v
0a40: 61 6c 3b 20 7d 0a 09 09 44 57 4f 52 44 20 66 49 al; }...DWORD fI
0a50: 6e 76 65 72 74 50 6f 73 74 42 6f 75 6e 64 44 69 nvertPostBoundDi
0a60: 72 28 29 20 20 20 20 20 20 20 20 20 20 7b 20 72 r() { r
0a70: 65 74 75 72 6e 20 28 5f 62 69 74 66 69 65 6c 64 eturn (_bitfield
0a80: 20 3e 3e 20 31 38 29 20 26 20 30 78 31 3b 20 7d >> 18) & 0x1; }
0a90: 0a 09 09 44 57 4f 52 44 20 66 49 6e 76 65 72 74 ...DWORD fInvert
0aa0: 50 6f 73 74 42 6f 75 6e 64 44 69 72 28 44 57 4f PostBoundDir(DWO
0ab0: 52 44 20 76 61 6c 29 20 7b 20 5f 62 69 74 66 69 RD val) { _bitfi
0ac0: 65 6c 64 20 3d 20 63 61 73 74 28 44 57 4f 52 44 eld = cast(DWORD
0ad0: 29 28 28 5f 62 69 74 66 69 65 6c 64 20 26 20 30 )((_bitfield & 0
0ae0: 78 46 46 46 46 46 46 46 46 46 46 46 42 46 46 46 xFFFFFFFFFFFBFFF
0af0: 46 29 20 7c 20 28 76 61 6c 20 3c 3c 20 31 38 29 F) | (val << 18)
0b00: 29 3b 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d ); return val; }
0b10: 0a 09 09 44 57 4f 52 44 20 66 4c 69 6e 6b 53 74 ...DWORD fLinkSt
0b20: 72 69 6e 67 42 65 66 6f 72 65 28 29 20 20 20 20 ringBefore()
0b30: 20 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e { return
0b40: 20 28 5f 62 69 74 66 69 65 6c 64 20 3e 3e 20 31 (_bitfield >> 1
0b50: 39 29 20 26 20 30 78 31 3b 20 7d 0a 09 09 44 57 9) & 0x1; }...DW
0b60: 4f 52 44 20 66 4c 69 6e 6b 53 74 72 69 6e 67 42 ORD fLinkStringB
0b70: 65 66 6f 72 65 28 44 57 4f 52 44 20 76 61 6c 29 efore(DWORD val)
0b80: 20 20 20 7b 20 5f 62 69 74 66 69 65 6c 64 20 3d { _bitfield =
0b90: 20 63 61 73 74 28 44 57 4f 52 44 29 28 28 5f 62 cast(DWORD)((_b
0ba0: 69 74 66 69 65 6c 64 20 26 20 30 78 46 46 46 46 itfield & 0xFFFF
0bb0: 46 46 46 46 46 46 46 37 46 46 46 46 29 20 7c 20 FFFFFFF7FFFF) |
0bc0: 28 76 61 6c 20 3c 3c 20 31 39 29 29 3b 20 72 65 (val << 19)); re
0bd0: 74 75 72 6e 20 76 61 6c 3b 20 7d 0a 09 09 44 57 turn val; }...DW
0be0: 4f 52 44 20 66 4c 69 6e 6b 53 74 72 69 6e 67 41 ORD fLinkStringA
0bf0: 66 74 65 72 28 29 20 20 20 20 20 20 20 20 20 20 fter()
0c00: 20 20 20 7b 20 72 65 74 75 72 6e 20 28 5f 62 69 { return (_bi
0c10: 74 66 69 65 6c 64 20 3e 3e 20 32 30 29 20 26 20 tfield >> 20) &
0c20: 30 78 31 3b 20 7d 0a 09 09 44 57 4f 52 44 20 66 0x1; }...DWORD f
0c30: 4c 69 6e 6b 53 74 72 69 6e 67 41 66 74 65 72 28 LinkStringAfter(
0c40: 44 57 4f 52 44 20 76 61 6c 29 20 20 20 20 7b 20 DWORD val) {
0c50: 5f 62 69 74 66 69 65 6c 64 20 3d 20 63 61 73 74 _bitfield = cast
0c60: 28 44 57 4f 52 44 29 28 28 5f 62 69 74 66 69 65 (DWORD)((_bitfie
0c70: 6c 64 20 26 20 30 78 46 46 46 46 46 46 46 46 46 ld & 0xFFFFFFFFF
0c80: 46 45 46 46 46 46 46 29 20 7c 20 28 76 61 6c 20 FEFFFFF) | (val
0c90: 3c 3c 20 32 30 29 29 3b 20 72 65 74 75 72 6e 20 << 20)); return
0ca0: 76 61 6c 3b 20 7d 0a 09 09 44 57 4f 52 44 20 66 val; }...DWORD f
0cb0: 4e 65 75 74 72 61 6c 4f 76 65 72 72 69 64 65 28 NeutralOverride(
0cc0: 29 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 ) {
0cd0: 72 65 74 75 72 6e 20 28 5f 62 69 74 66 69 65 6c return (_bitfiel
0ce0: 64 20 3e 3e 20 32 31 29 20 26 20 30 78 31 3b 20 d >> 21) & 0x1;
0cf0: 7d 0a 09 09 44 57 4f 52 44 20 66 4e 65 75 74 72 }...DWORD fNeutr
0d00: 61 6c 4f 76 65 72 72 69 64 65 28 44 57 4f 52 44 alOverride(DWORD
0d10: 20 76 61 6c 29 20 20 20 20 7b 20 5f 62 69 74 66 val) { _bitf
0d20: 69 65 6c 64 20 3d 20 63 61 73 74 28 44 57 4f 52 ield = cast(DWOR
0d30: 44 29 28 28 5f 62 69 74 66 69 65 6c 64 20 26 20 D)((_bitfield &
0d40: 30 78 46 46 46 46 46 46 46 46 46 46 44 46 46 46 0xFFFFFFFFFFDFFF
0d50: 46 46 29 20 7c 20 28 76 61 6c 20 3c 3c 20 32 31 FF) | (val << 21
0d60: 29 29 3b 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 )); return val;
0d70: 7d 0a 09 09 44 57 4f 52 44 20 66 4e 75 6d 65 72 }...DWORD fNumer
0d80: 69 63 4f 76 65 72 72 69 64 65 28 29 20 20 20 20 icOverride()
0d90: 20 20 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 { retur
0da0: 6e 20 28 5f 62 69 74 66 69 65 6c 64 20 3e 3e 20 n (_bitfield >>
0db0: 32 32 29 20 26 20 30 78 31 3b 20 7d 0a 09 09 44 22) & 0x1; }...D
0dc0: 57 4f 52 44 20 66 4e 75 6d 65 72 69 63 4f 76 65 WORD fNumericOve
0dd0: 72 72 69 64 65 28 44 57 4f 52 44 20 76 61 6c 29 rride(DWORD val)
0de0: 20 20 20 20 7b 20 5f 62 69 74 66 69 65 6c 64 20 { _bitfield
0df0: 3d 20 63 61 73 74 28 44 57 4f 52 44 29 28 28 5f = cast(DWORD)((_
0e00: 62 69 74 66 69 65 6c 64 20 26 20 30 78 46 46 46 bitfield & 0xFFF
0e10: 46 46 46 46 46 46 46 42 46 46 46 46 46 29 20 7c FFFFFFFBFFFFF) |
0e20: 20 28 76 61 6c 20 3c 3c 20 32 32 29 29 3b 20 72 (val << 22)); r
0e30: 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0a 09 09 44 eturn val; }...D
0e40: 57 4f 52 44 20 66 4c 65 67 61 63 79 42 69 64 69 WORD fLegacyBidi
0e50: 43 6c 61 73 73 28 29 20 20 20 20 20 20 20 20 20 Class()
0e60: 20 20 20 20 7b 20 72 65 74 75 72 6e 20 28 5f 62 { return (_b
0e70: 69 74 66 69 65 6c 64 20 3e 3e 20 32 33 29 20 26 itfield >> 23) &
0e80: 20 30 78 31 3b 20 7d 0a 09 09 44 57 4f 52 44 20 0x1; }...DWORD
0e90: 66 4c 65 67 61 63 79 42 69 64 69 43 6c 61 73 73 fLegacyBidiClass
0ea0: 28 44 57 4f 52 44 20 76 61 6c 29 20 20 20 20 7b (DWORD val) {
0eb0: 20 5f 62 69 74 66 69 65 6c 64 20 3d 20 63 61 73 _bitfield = cas
0ec0: 74 28 44 57 4f 52 44 29 28 28 5f 62 69 74 66 69 t(DWORD)((_bitfi
0ed0: 65 6c 64 20 26 20 30 78 46 46 46 46 46 46 46 46 eld & 0xFFFFFFFF
0ee0: 46 46 37 46 46 46 46 46 29 20 7c 20 28 76 61 6c FF7FFFFF) | (val
0ef0: 20 3c 3c 20 32 33 29 29 3b 20 72 65 74 75 72 6e << 23)); return
0f00: 20 76 61 6c 3b 20 7d 0a 09 09 44 57 4f 52 44 20 val; }...DWORD
0f10: 66 52 65 73 65 72 76 65 64 28 29 20 20 20 20 20 fReserved()
0f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b {
0f30: 20 72 65 74 75 72 6e 20 28 5f 62 69 74 66 69 65 return (_bitfie
0f40: 6c 64 20 3e 3e 20 32 34 29 20 26 20 30 78 46 46 ld >> 24) & 0xFF
0f50: 3b 20 7d 0a 09 09 44 57 4f 52 44 20 66 52 65 73 ; }...DWORD fRes
0f60: 65 72 76 65 64 28 44 57 4f 52 44 20 76 61 6c 29 erved(DWORD val)
0f70: 20 20 20 20 20 20 20 20 20 20 20 7b 20 5f 62 69 { _bi
0f80: 74 66 69 65 6c 64 20 3d 20 63 61 73 74 28 44 57 tfield = cast(DW
0f90: 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c 64 20 ORD)((_bitfield
0fa0: 26 20 30 78 46 46 46 46 46 46 46 46 30 30 46 46 & 0xFFFFFFFF00FF
0fb0: 46 46 46 46 29 20 7c 20 28 76 61 6c 20 3c 3c 20 FFFF) | (val <<
0fc0: 32 34 29 29 3b 20 72 65 74 75 72 6e 20 76 61 6c 24)); return val
0fd0: 3b 20 7d 0a 09 7d 0a 0a 09 73 74 72 75 63 74 20 ; }..}...struct
0fe0: 53 43 52 49 50 54 5f 53 54 41 54 45 0a 09 7b 0a SCRIPT_STATE..{.
0ff0: 09 09 70 72 69 76 61 74 65 20 57 4f 52 44 20 5f ..private WORD _
1000: 62 69 74 66 69 65 6c 64 3b 0a 09 09 57 4f 52 44 bitfield;...WORD
1010: 20 75 42 69 64 69 4c 65 76 65 6c 28 29 20 20 20 uBidiLevel()
1020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 {
1030: 72 65 74 75 72 6e 20 63 61 73 74 28 57 4f 52 44 return cast(WORD
1040: 29 28 28 5f 62 69 74 66 69 65 6c 64 20 3e 3e 20 )((_bitfield >>
1050: 30 29 20 26 20 30 78 31 46 29 3b 20 7d 0a 09 09 0) & 0x1F); }...
1060: 57 4f 52 44 20 75 42 69 64 69 4c 65 76 65 6c 28 WORD uBidiLevel(
1070: 57 4f 52 44 20 76 61 6c 29 20 20 20 20 20 20 20 WORD val)
1080: 20 20 7b 20 5f 62 69 74 66 69 65 6c 64 20 3d 20 { _bitfield =
1090: 63 61 73 74 28 57 4f 52 44 29 28 28 5f 62 69 74 cast(WORD)((_bit
10a0: 66 69 65 6c 64 20 26 20 30 78 46 46 46 46 46 46 field & 0xFFFFFF
10b0: 46 46 46 46 46 46 46 46 45 30 29 20 7c 20 28 76 FFFFFFFFE0) | (v
10c0: 61 6c 20 3c 3c 20 30 29 29 3b 20 72 65 74 75 72 al << 0)); retur
10d0: 6e 20 76 61 6c 3b 20 7d 0a 09 09 57 4f 52 44 20 n val; }...WORD
10e0: 66 4f 76 65 72 72 69 64 65 44 69 72 65 63 74 69 fOverrideDirecti
10f0: 6f 6e 28 29 20 20 20 20 20 20 20 20 20 7b 20 72 on() { r
1100: 65 74 75 72 6e 20 63 61 73 74 28 57 4f 52 44 29 eturn cast(WORD)
1110: 28 28 5f 62 69 74 66 69 65 6c 64 20 3e 3e 20 35 ((_bitfield >> 5
1120: 29 20 26 20 30 78 31 29 3b 20 7d 0a 09 09 57 4f ) & 0x1); }...WO
1130: 52 44 20 66 4f 76 65 72 72 69 64 65 44 69 72 65 RD fOverrideDire
1140: 63 74 69 6f 6e 28 57 4f 52 44 20 76 61 6c 29 20 ction(WORD val)
1150: 7b 20 5f 62 69 74 66 69 65 6c 64 20 3d 20 63 61 { _bitfield = ca
1160: 73 74 28 57 4f 52 44 29 28 28 5f 62 69 74 66 69 st(WORD)((_bitfi
1170: 65 6c 64 20 26 20 30 78 46 46 46 46 46 46 46 46 eld & 0xFFFFFFFF
1180: 46 46 46 46 46 46 44 46 29 20 7c 20 28 76 61 6c FFFFFFDF) | (val
1190: 20 3c 3c 20 35 29 29 3b 20 72 65 74 75 72 6e 20 << 5)); return
11a0: 76 61 6c 3b 20 7d 0a 09 09 57 4f 52 44 20 66 49 val; }...WORD fI
11b0: 6e 68 69 62 69 74 53 79 6d 53 77 61 70 28 29 20 nhibitSymSwap()
11c0: 20 20 20 20 20 20 20 20 20 20 20 7b 20 72 65 74 { ret
11d0: 75 72 6e 20 63 61 73 74 28 57 4f 52 44 29 28 28 urn cast(WORD)((
11e0: 5f 62 69 74 66 69 65 6c 64 20 3e 3e 20 36 29 20 _bitfield >> 6)
11f0: 26 20 30 78 31 29 3b 20 7d 0a 09 09 57 4f 52 44 & 0x1); }...WORD
1200: 20 66 49 6e 68 69 62 69 74 53 79 6d 53 77 61 70 fInhibitSymSwap
1210: 28 57 4f 52 44 20 76 61 6c 29 20 20 20 20 7b 20 (WORD val) {
1220: 5f 62 69 74 66 69 65 6c 64 20 3d 20 63 61 73 74 _bitfield = cast
1230: 28 57 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c (WORD)((_bitfiel
1240: 64 20 26 20 30 78 46 46 46 46 46 46 46 46 46 46 d & 0xFFFFFFFFFF
1250: 46 46 46 46 42 46 29 20 7c 20 28 76 61 6c 20 3c FFFFBF) | (val <
1260: 3c 20 36 29 29 3b 20 72 65 74 75 72 6e 20 76 61 < 6)); return va
1270: 6c 3b 20 7d 0a 09 09 57 4f 52 44 20 66 43 68 61 l; }...WORD fCha
1280: 72 53 68 61 70 65 28 29 20 20 20 20 20 20 20 20 rShape()
1290: 20 20 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 { retur
12a0: 6e 20 63 61 73 74 28 57 4f 52 44 29 28 28 5f 62 n cast(WORD)((_b
12b0: 69 74 66 69 65 6c 64 20 3e 3e 20 37 29 20 26 20 itfield >> 7) &
12c0: 30 78 31 29 3b 20 7d 0a 09 09 57 4f 52 44 20 66 0x1); }...WORD f
12d0: 43 68 61 72 53 68 61 70 65 28 57 4f 52 44 20 76 CharShape(WORD v
12e0: 61 6c 29 20 20 20 20 20 20 20 20 20 7b 20 5f 62 al) { _b
12f0: 69 74 66 69 65 6c 64 20 3d 20 63 61 73 74 28 57 itfield = cast(W
1300: 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c 64 20 ORD)((_bitfield
1310: 26 20 30 78 46 46 46 46 46 46 46 46 46 46 46 46 & 0xFFFFFFFFFFFF
1320: 46 46 37 46 29 20 7c 20 28 76 61 6c 20 3c 3c 20 FF7F) | (val <<
1330: 37 29 29 3b 20 72 65 74 75 72 6e 20 76 61 6c 3b 7)); return val;
1340: 20 7d 0a 09 09 57 4f 52 44 20 66 44 69 67 69 74 }...WORD fDigit
1350: 53 75 62 73 74 69 74 75 74 65 28 29 20 20 20 20 Substitute()
1360: 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 { return
1370: 63 61 73 74 28 57 4f 52 44 29 28 28 5f 62 69 74 cast(WORD)((_bit
1380: 66 69 65 6c 64 20 3e 3e 20 38 29 20 26 20 30 78 field >> 8) & 0x
1390: 31 29 3b 20 7d 0a 09 09 57 4f 52 44 20 66 44 69 1); }...WORD fDi
13a0: 67 69 74 53 75 62 73 74 69 74 75 74 65 28 57 4f gitSubstitute(WO
13b0: 52 44 20 76 61 6c 29 20 20 20 7b 20 5f 62 69 74 RD val) { _bit
13c0: 66 69 65 6c 64 20 3d 20 63 61 73 74 28 57 4f 52 field = cast(WOR
13d0: 44 29 28 28 5f 62 69 74 66 69 65 6c 64 20 26 20 D)((_bitfield &
13e0: 30 78 46 46 46 46 46 46 46 46 46 46 46 46 46 45 0xFFFFFFFFFFFFFE
13f0: 46 46 29 20 7c 20 28 76 61 6c 20 3c 3c 20 38 29 FF) | (val << 8)
1400: 29 3b 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d ); return val; }
1410: 0a 09 09 57 4f 52 44 20 66 49 6e 68 69 62 69 74 ...WORD fInhibit
1420: 4c 69 67 61 74 65 28 29 20 20 20 20 20 20 20 20 Ligate()
1430: 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 63 61 { return ca
1440: 73 74 28 57 4f 52 44 29 28 28 5f 62 69 74 66 69 st(WORD)((_bitfi
1450: 65 6c 64 20 3e 3e 20 39 29 20 26 20 30 78 31 29 eld >> 9) & 0x1)
1460: 3b 20 7d 0a 09 09 57 4f 52 44 20 66 49 6e 68 69 ; }...WORD fInhi
1470: 62 69 74 4c 69 67 61 74 65 28 57 4f 52 44 20 76 bitLigate(WORD v
1480: 61 6c 29 20 20 20 20 20 7b 20 5f 62 69 74 66 69 al) { _bitfi
1490: 65 6c 64 20 3d 20 63 61 73 74 28 57 4f 52 44 29 eld = cast(WORD)
14a0: 28 28 5f 62 69 74 66 69 65 6c 64 20 26 20 30 78 ((_bitfield & 0x
14b0: 46 46 46 46 46 46 46 46 46 46 46 46 46 44 46 46 FFFFFFFFFFFFFDFF
14c0: 29 20 7c 20 28 76 61 6c 20 3c 3c 20 39 29 29 3b ) | (val << 9));
14d0: 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0a 09 return val; }..
14e0: 09 57 4f 52 44 20 66 44 69 73 70 6c 61 79 5a 57 .WORD fDisplayZW
14f0: 47 28 29 20 20 20 20 20 20 20 20 20 20 20 20 20 G()
1500: 20 20 20 7b 20 72 65 74 75 72 6e 20 63 61 73 74 { return cast
1510: 28 57 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c (WORD)((_bitfiel
1520: 64 20 3e 3e 20 31 30 29 20 26 20 30 78 31 29 3b d >> 10) & 0x1);
1530: 20 7d 0a 09 09 57 4f 52 44 20 66 44 69 73 70 6c }...WORD fDispl
1540: 61 79 5a 57 47 28 57 4f 52 44 20 76 61 6c 29 20 ayZWG(WORD val)
1550: 20 20 20 20 20 20 20 7b 20 5f 62 69 74 66 69 65 { _bitfie
1560: 6c 64 20 3d 20 63 61 73 74 28 57 4f 52 44 29 28 ld = cast(WORD)(
1570: 28 5f 62 69 74 66 69 65 6c 64 20 26 20 30 78 46 (_bitfield & 0xF
1580: 46 46 46 46 46 46 46 46 46 46 46 46 42 46 46 29 FFFFFFFFFFFFBFF)
1590: 20 7c 20 28 76 61 6c 20 3c 3c 20 31 30 29 29 3b | (val << 10));
15a0: 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0a 09 return val; }..
15b0: 09 57 4f 52 44 20 66 41 72 61 62 69 63 4e 75 6d .WORD fArabicNum
15c0: 43 6f 6e 74 65 78 74 28 29 20 20 20 20 20 20 20 Context()
15d0: 20 20 20 7b 20 72 65 74 75 72 6e 20 63 61 73 74 { return cast
15e0: 28 57 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c (WORD)((_bitfiel
15f0: 64 20 3e 3e 20 31 31 29 20 26 20 30 78 31 29 3b d >> 11) & 0x1);
1600: 20 7d 0a 09 09 57 4f 52 44 20 66 41 72 61 62 69 }...WORD fArabi
1610: 63 4e 75 6d 43 6f 6e 74 65 78 74 28 57 4f 52 44 cNumContext(WORD
1620: 20 76 61 6c 29 20 20 7b 20 5f 62 69 74 66 69 65 val) { _bitfie
1630: 6c 64 20 3d 20 63 61 73 74 28 57 4f 52 44 29 28 ld = cast(WORD)(
1640: 28 5f 62 69 74 66 69 65 6c 64 20 26 20 30 78 46 (_bitfield & 0xF
1650: 46 46 46 46 46 46 46 46 46 46 46 46 37 46 46 29 FFFFFFFFFFFF7FF)
1660: 20 7c 20 28 76 61 6c 20 3c 3c 20 31 31 29 29 3b | (val << 11));
1670: 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0a 09 return val; }..
1680: 09 57 4f 52 44 20 66 47 63 70 43 6c 75 73 74 65 .WORD fGcpCluste
1690: 72 73 28 29 20 20 20 20 20 20 20 20 20 20 20 20 rs()
16a0: 20 20 20 7b 20 72 65 74 75 72 6e 20 63 61 73 74 { return cast
16b0: 28 57 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c (WORD)((_bitfiel
16c0: 64 20 3e 3e 20 31 32 29 20 26 20 30 78 31 29 3b d >> 12) & 0x1);
16d0: 20 7d 0a 09 09 57 4f 52 44 20 66 47 63 70 43 6c }...WORD fGcpCl
16e0: 75 73 74 65 72 73 28 57 4f 52 44 20 76 61 6c 29 usters(WORD val)
16f0: 20 20 20 20 20 20 20 7b 20 5f 62 69 74 66 69 65 { _bitfie
1700: 6c 64 20 3d 20 63 61 73 74 28 57 4f 52 44 29 28 ld = cast(WORD)(
1710: 28 5f 62 69 74 66 69 65 6c 64 20 26 20 30 78 46 (_bitfield & 0xF
1720: 46 46 46 46 46 46 46 46 46 46 46 45 46 46 46 29 FFFFFFFFFFFEFFF)
1730: 20 7c 20 28 76 61 6c 20 3c 3c 20 31 32 29 29 3b | (val << 12));
1740: 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0a 09 return val; }..
1750: 09 57 4f 52 44 20 66 52 65 73 65 72 76 65 64 28 .WORD fReserved(
1760: 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 )
1770: 20 20 20 7b 20 72 65 74 75 72 6e 20 63 61 73 74 { return cast
1780: 28 57 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c (WORD)((_bitfiel
1790: 64 20 3e 3e 20 31 33 29 20 26 20 30 78 31 29 3b d >> 13) & 0x1);
17a0: 20 7d 0a 09 09 57 4f 52 44 20 66 52 65 73 65 72 }...WORD fReser
17b0: 76 65 64 28 57 4f 52 44 20 76 61 6c 29 20 20 20 ved(WORD val)
17c0: 20 20 20 20 20 20 20 7b 20 5f 62 69 74 66 69 65 { _bitfie
17d0: 6c 64 20 3d 20 63 61 73 74 28 57 4f 52 44 29 28 ld = cast(WORD)(
17e0: 28 5f 62 69 74 66 69 65 6c 64 20 26 20 30 78 46 (_bitfield & 0xF
17f0: 46 46 46 46 46 46 46 46 46 46 46 44 46 46 46 29 FFFFFFFFFFFDFFF)
1800: 20 7c 20 28 76 61 6c 20 3c 3c 20 31 33 29 29 3b | (val << 13));
1810: 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0a 09 return val; }..
1820: 09 57 4f 52 44 20 66 45 6e 67 69 6e 65 52 65 73 .WORD fEngineRes
1830: 65 72 76 65 64 28 29 20 20 20 20 20 20 20 20 20 erved()
1840: 20 20 20 7b 20 72 65 74 75 72 6e 20 63 61 73 74 { return cast
1850: 28 57 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c (WORD)((_bitfiel
1860: 64 20 3e 3e 20 31 34 29 20 26 20 30 78 33 29 3b d >> 14) & 0x3);
1870: 20 7d 0a 09 09 57 4f 52 44 20 66 45 6e 67 69 6e }...WORD fEngin
1880: 65 52 65 73 65 72 76 65 64 28 57 4f 52 44 20 76 eReserved(WORD v
1890: 61 6c 29 20 20 20 20 7b 20 5f 62 69 74 66 69 65 al) { _bitfie
18a0: 6c 64 20 3d 20 63 61 73 74 28 57 4f 52 44 29 28 ld = cast(WORD)(
18b0: 28 5f 62 69 74 66 69 65 6c 64 20 26 20 30 78 46 (_bitfield & 0xF
18c0: 46 46 46 46 46 46 46 46 46 46 46 33 46 46 46 29 FFFFFFFFFFF3FFF)
18d0: 20 7c 20 28 76 61 6c 20 3c 3c 20 31 34 29 29 3b | (val << 14));
18e0: 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0a 09 return val; }..
18f0: 7d 0a 0a 0a 09 73 74 72 75 63 74 20 53 43 52 49 }....struct SCRI
1900: 50 54 5f 41 4e 41 4c 59 53 49 53 0a 09 7b 0a 09 PT_ANALYSIS..{..
1910: 09 70 72 69 76 61 74 65 20 57 4f 52 44 20 5f 62 .private WORD _b
1920: 69 74 66 69 65 6c 64 3b 0a 09 09 57 4f 52 44 20 itfield;...WORD
1930: 65 53 63 72 69 70 74 28 29 20 20 20 20 20 20 20 eScript()
1940: 20 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e { return
1950: 20 63 61 73 74 28 57 4f 52 44 29 28 28 5f 62 69 cast(WORD)((_bi
1960: 74 66 69 65 6c 64 20 3e 3e 20 30 29 20 26 20 30 tfield >> 0) & 0
1970: 78 33 46 46 29 3b 20 7d 0a 09 09 57 4f 52 44 20 x3FF); }...WORD
1980: 65 53 63 72 69 70 74 28 57 4f 52 44 20 76 61 6c eScript(WORD val
1990: 29 20 20 20 20 20 20 20 7b 20 5f 62 69 74 66 69 ) { _bitfi
19a0: 65 6c 64 20 3d 20 63 61 73 74 28 57 4f 52 44 29 eld = cast(WORD)
19b0: 28 28 5f 62 69 74 66 69 65 6c 64 20 26 20 30 78 ((_bitfield & 0x
19c0: 46 46 46 46 46 46 46 46 46 46 46 46 46 43 30 30 FFFFFFFFFFFFFC00
19d0: 29 20 7c 20 28 76 61 6c 20 3c 3c 20 30 29 29 3b ) | (val << 0));
19e0: 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0a 09 return val; }..
19f0: 09 57 4f 52 44 20 66 52 54 4c 28 29 20 20 20 20 .WORD fRTL()
1a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 {
1a10: 72 65 74 75 72 6e 20 63 61 73 74 28 57 4f 52 44 return cast(WORD
1a20: 29 28 28 5f 62 69 74 66 69 65 6c 64 20 3e 3e 20 )((_bitfield >>
1a30: 31 30 29 20 26 20 30 78 31 29 3b 20 7d 0a 09 09 10) & 0x1); }...
1a40: 57 4f 52 44 20 66 52 54 4c 28 57 4f 52 44 20 76 WORD fRTL(WORD v
1a50: 61 6c 29 20 20 20 20 20 20 20 20 20 20 7b 20 5f al) { _
1a60: 62 69 74 66 69 65 6c 64 20 3d 20 63 61 73 74 28 bitfield = cast(
1a70: 57 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c 64 WORD)((_bitfield
1a80: 20 26 20 30 78 46 46 46 46 46 46 46 46 46 46 46 & 0xFFFFFFFFFFF
1a90: 46 46 42 46 46 29 20 7c 20 28 76 61 6c 20 3c 3c FFBFF) | (val <<
1aa0: 20 31 30 29 29 3b 20 72 65 74 75 72 6e 20 76 61 10)); return va
1ab0: 6c 3b 20 7d 0a 09 09 57 4f 52 44 20 66 4c 61 79 l; }...WORD fLay
1ac0: 6f 75 74 52 54 4c 28 29 20 20 20 20 20 20 20 20 outRTL()
1ad0: 20 20 20 20 7b 20 72 65 74 75 72 6e 20 63 61 73 { return cas
1ae0: 74 28 57 4f 52 44 29 28 28 5f 62 69 74 66 69 65 t(WORD)((_bitfie
1af0: 6c 64 20 3e 3e 20 31 31 29 20 26 20 30 78 31 29 ld >> 11) & 0x1)
1b00: 3b 20 7d 0a 09 09 57 4f 52 44 20 66 4c 61 79 6f ; }...WORD fLayo
1b10: 75 74 52 54 4c 28 57 4f 52 44 20 76 61 6c 29 20 utRTL(WORD val)
1b20: 20 20 20 7b 20 5f 62 69 74 66 69 65 6c 64 20 3d { _bitfield =
1b30: 20 63 61 73 74 28 57 4f 52 44 29 28 28 5f 62 69 cast(WORD)((_bi
1b40: 74 66 69 65 6c 64 20 26 20 30 78 46 46 46 46 46 tfield & 0xFFFFF
1b50: 46 46 46 46 46 46 46 46 37 46 46 29 20 7c 20 28 FFFFFFFF7FF) | (
1b60: 76 61 6c 20 3c 3c 20 31 31 29 29 3b 20 72 65 74 val << 11)); ret
1b70: 75 72 6e 20 76 61 6c 3b 20 7d 0a 09 09 57 4f 52 urn val; }...WOR
1b80: 44 20 66 4c 69 6e 6b 42 65 66 6f 72 65 28 29 20 D fLinkBefore()
1b90: 20 20 20 20 20 20 20 20 20 20 7b 20 72 65 74 75 { retu
1ba0: 72 6e 20 63 61 73 74 28 57 4f 52 44 29 28 28 5f rn cast(WORD)((_
1bb0: 62 69 74 66 69 65 6c 64 20 3e 3e 20 31 32 29 20 bitfield >> 12)
1bc0: 26 20 30 78 31 29 3b 20 7d 0a 09 09 57 4f 52 44 & 0x1); }...WORD
1bd0: 20 66 4c 69 6e 6b 42 65 66 6f 72 65 28 57 4f 52 fLinkBefore(WOR
1be0: 44 20 76 61 6c 29 20 20 20 7b 20 5f 62 69 74 66 D val) { _bitf
1bf0: 69 65 6c 64 20 3d 20 63 61 73 74 28 57 4f 52 44 ield = cast(WORD
1c00: 29 28 28 5f 62 69 74 66 69 65 6c 64 20 26 20 30 )((_bitfield & 0
1c10: 78 46 46 46 46 46 46 46 46 46 46 46 46 45 46 46 xFFFFFFFFFFFFEFF
1c20: 46 29 20 7c 20 28 76 61 6c 20 3c 3c 20 31 32 29 F) | (val << 12)
1c30: 29 3b 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d ); return val; }
1c40: 0a 09 09 57 4f 52 44 20 66 4c 69 6e 6b 41 66 74 ...WORD fLinkAft
1c50: 65 72 28 29 20 20 20 20 20 20 20 20 20 20 20 20 er()
1c60: 7b 20 72 65 74 75 72 6e 20 63 61 73 74 28 57 4f { return cast(WO
1c70: 52 44 29 28 28 5f 62 69 74 66 69 65 6c 64 20 3e RD)((_bitfield >
1c80: 3e 20 31 33 29 20 26 20 30 78 31 29 3b 20 7d 0a > 13) & 0x1); }.
1c90: 09 09 57 4f 52 44 20 66 4c 69 6e 6b 41 66 74 65 ..WORD fLinkAfte
1ca0: 72 28 57 4f 52 44 20 76 61 6c 29 20 20 20 20 7b r(WORD val) {
1cb0: 20 5f 62 69 74 66 69 65 6c 64 20 3d 20 63 61 73 _bitfield = cas
1cc0: 74 28 57 4f 52 44 29 28 28 5f 62 69 74 66 69 65 t(WORD)((_bitfie
1cd0: 6c 64 20 26 20 30 78 46 46 46 46 46 46 46 46 46 ld & 0xFFFFFFFFF
1ce0: 46 46 46 44 46 46 46 29 20 7c 20 28 76 61 6c 20 FFFDFFF) | (val
1cf0: 3c 3c 20 31 33 29 29 3b 20 72 65 74 75 72 6e 20 << 13)); return
1d00: 76 61 6c 3b 20 7d 0a 09 09 57 4f 52 44 20 66 4c val; }...WORD fL
1d10: 6f 67 69 63 61 6c 4f 72 64 65 72 28 29 20 20 20 ogicalOrder()
1d20: 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 63 { return c
1d30: 61 73 74 28 57 4f 52 44 29 28 28 5f 62 69 74 66 ast(WORD)((_bitf
1d40: 69 65 6c 64 20 3e 3e 20 31 34 29 20 26 20 30 78 ield >> 14) & 0x
1d50: 31 29 3b 20 7d 0a 09 09 57 4f 52 44 20 66 4c 6f 1); }...WORD fLo
1d60: 67 69 63 61 6c 4f 72 64 65 72 28 57 4f 52 44 20 gicalOrder(WORD
1d70: 76 61 6c 29 20 7b 20 5f 62 69 74 66 69 65 6c 64 val) { _bitfield
1d80: 20 3d 20 63 61 73 74 28 57 4f 52 44 29 28 28 5f = cast(WORD)((_
1d90: 62 69 74 66 69 65 6c 64 20 26 20 30 78 46 46 46 bitfield & 0xFFF
1da0: 46 46 46 46 46 46 46 46 46 42 46 46 46 29 20 7c FFFFFFFFFBFFF) |
1db0: 20 28 76 61 6c 20 3c 3c 20 31 34 29 29 3b 20 72 (val << 14)); r
1dc0: 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0a 09 09 57 eturn val; }...W
1dd0: 4f 52 44 20 66 4e 6f 47 6c 79 70 68 49 6e 64 65 ORD fNoGlyphInde
1de0: 78 28 29 20 20 20 20 20 20 20 20 20 7b 20 72 65 x() { re
1df0: 74 75 72 6e 20 63 61 73 74 28 57 4f 52 44 29 28 turn cast(WORD)(
1e00: 28 5f 62 69 74 66 69 65 6c 64 20 3e 3e 20 31 35 (_bitfield >> 15
1e10: 29 20 26 20 30 78 31 29 3b 20 7d 0a 09 09 57 4f ) & 0x1); }...WO
1e20: 52 44 20 66 4e 6f 47 6c 79 70 68 49 6e 64 65 78 RD fNoGlyphIndex
1e30: 28 57 4f 52 44 20 76 61 6c 29 20 7b 20 5f 62 69 (WORD val) { _bi
1e40: 74 66 69 65 6c 64 20 3d 20 63 61 73 74 28 57 4f tfield = cast(WO
1e50: 52 44 29 28 28 5f 62 69 74 66 69 65 6c 64 20 26 RD)((_bitfield &
1e60: 20 30 78 46 46 46 46 46 46 46 46 46 46 46 46 37 0xFFFFFFFFFFFF7
1e70: 46 46 46 29 20 7c 20 28 76 61 6c 20 3c 3c 20 31 FFF) | (val << 1
1e80: 35 29 29 3b 20 72 65 74 75 72 6e 20 76 61 6c 3b 5)); return val;
1e90: 20 7d 0a 09 09 53 43 52 49 50 54 5f 53 54 41 54 }...SCRIPT_STAT
1ea0: 45 20 73 3b 0a 09 7d 0a 0a 0a 09 73 74 72 75 63 E s;..}....struc
1eb0: 74 20 53 43 52 49 50 54 5f 49 54 45 4d 0a 09 7b t SCRIPT_ITEM..{
1ec0: 0a 09 09 69 6e 74 20 69 43 68 61 72 50 6f 73 3b ...int iCharPos;
1ed0: 0a 09 09 53 43 52 49 50 54 5f 41 4e 41 4c 59 53 ...SCRIPT_ANALYS
1ee0: 49 53 20 61 3b 0a 09 7d 0a 0a 09 73 74 72 75 63 IS a;..}...struc
1ef0: 74 20 53 43 52 49 50 54 5f 56 49 53 41 54 54 52 t SCRIPT_VISATTR
1f00: 0a 09 7b 0a 09 09 70 72 69 76 61 74 65 20 57 4f ..{...private WO
1f10: 52 44 20 5f 62 69 74 66 69 65 6c 64 3b 0a 09 09 RD _bitfield;...
1f20: 57 4f 52 44 20 75 4a 75 73 74 69 66 69 63 61 74 WORD uJustificat
1f30: 69 6f 6e 28 29 20 20 20 20 20 20 20 20 20 7b 20 ion() {
1f40: 72 65 74 75 72 6e 20 63 61 73 74 28 57 4f 52 44 return cast(WORD
1f50: 29 28 28 5f 62 69 74 66 69 65 6c 64 20 3e 3e 20 )((_bitfield >>
1f60: 30 29 20 26 20 30 78 46 29 3b 20 7d 0a 09 09 57 0) & 0xF); }...W
1f70: 4f 52 44 20 75 4a 75 73 74 69 66 69 63 61 74 69 ORD uJustificati
1f80: 6f 6e 28 57 4f 52 44 20 76 61 6c 29 20 7b 20 5f on(WORD val) { _
1f90: 62 69 74 66 69 65 6c 64 20 3d 20 63 61 73 74 28 bitfield = cast(
1fa0: 57 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c 64 WORD)((_bitfield
1fb0: 20 26 20 30 78 46 46 46 46 46 46 46 46 46 46 46 & 0xFFFFFFFFFFF
1fc0: 46 46 46 46 30 29 20 7c 20 28 76 61 6c 20 3c 3c FFFF0) | (val <<
1fd0: 20 30 29 29 3b 20 72 65 74 75 72 6e 20 76 61 6c 0)); return val
1fe0: 3b 20 7d 0a 09 09 57 4f 52 44 20 66 43 6c 75 73 ; }...WORD fClus
1ff0: 74 65 72 53 74 61 72 74 28 29 20 20 20 20 20 20 terStart()
2000: 20 20 20 20 7b 20 72 65 74 75 72 6e 20 63 61 73 { return cas
2010: 74 28 57 4f 52 44 29 28 28 5f 62 69 74 66 69 65 t(WORD)((_bitfie
2020: 6c 64 20 3e 3e 20 34 29 20 26 20 30 78 31 29 3b ld >> 4) & 0x1);
2030: 20 7d 0a 09 09 57 4f 52 44 20 66 43 6c 75 73 74 }...WORD fClust
2040: 65 72 53 74 61 72 74 28 57 4f 52 44 20 76 61 6c erStart(WORD val
2050: 29 20 20 7b 20 5f 62 69 74 66 69 65 6c 64 20 3d ) { _bitfield =
2060: 20 63 61 73 74 28 57 4f 52 44 29 28 28 5f 62 69 cast(WORD)((_bi
2070: 74 66 69 65 6c 64 20 26 20 30 78 46 46 46 46 46 tfield & 0xFFFFF
2080: 46 46 46 46 46 46 46 46 46 45 46 29 20 7c 20 28 FFFFFFFFFEF) | (
2090: 76 61 6c 20 3c 3c 20 34 29 29 3b 20 72 65 74 75 val << 4)); retu
20a0: 72 6e 20 76 61 6c 3b 20 7d 0a 09 09 57 4f 52 44 rn val; }...WORD
20b0: 20 66 44 69 61 63 72 69 74 69 63 28 29 20 20 20 fDiacritic()
20c0: 20 20 20 20 20 20 20 20 20 20 7b 20 72 65 74 75 { retu
20d0: 72 6e 20 63 61 73 74 28 57 4f 52 44 29 28 28 5f rn cast(WORD)((_
20e0: 62 69 74 66 69 65 6c 64 20 3e 3e 20 35 29 20 26 bitfield >> 5) &
20f0: 20 30 78 31 29 3b 20 7d 0a 09 09 57 4f 52 44 20 0x1); }...WORD
2100: 66 44 69 61 63 72 69 74 69 63 28 57 4f 52 44 20 fDiacritic(WORD
2110: 76 61 6c 29 20 20 20 20 20 7b 20 5f 62 69 74 66 val) { _bitf
2120: 69 65 6c 64 20 3d 20 63 61 73 74 28 57 4f 52 44 ield = cast(WORD
2130: 29 28 28 5f 62 69 74 66 69 65 6c 64 20 26 20 30 )((_bitfield & 0
2140: 78 46 46 46 46 46 46 46 46 46 46 46 46 46 46 44 xFFFFFFFFFFFFFFD
2150: 46 29 20 7c 20 28 76 61 6c 20 3c 3c 20 35 29 29 F) | (val << 5))
2160: 3b 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0a ; return val; }.
2170: 09 09 57 4f 52 44 20 66 5a 65 72 6f 57 69 64 74 ..WORD fZeroWidt
2180: 68 28 29 20 20 20 20 20 20 20 20 20 20 20 20 20 h()
2190: 7b 20 72 65 74 75 72 6e 20 63 61 73 74 28 57 4f { return cast(WO
21a0: 52 44 29 28 28 5f 62 69 74 66 69 65 6c 64 20 3e RD)((_bitfield >
21b0: 3e 20 36 29 20 26 20 30 78 31 29 3b 20 7d 0a 09 > 6) & 0x1); }..
21c0: 09 57 4f 52 44 20 66 5a 65 72 6f 57 69 64 74 68 .WORD fZeroWidth
21d0: 28 57 4f 52 44 20 76 61 6c 29 20 20 20 20 20 7b (WORD val) {
21e0: 20 5f 62 69 74 66 69 65 6c 64 20 3d 20 63 61 73 _bitfield = cas
21f0: 74 28 57 4f 52 44 29 28 28 5f 62 69 74 66 69 65 t(WORD)((_bitfie
2200: 6c 64 20 26 20 30 78 46 46 46 46 46 46 46 46 46 ld & 0xFFFFFFFFF
2210: 46 46 46 46 46 42 46 29 20 7c 20 28 76 61 6c 20 FFFFFBF) | (val
2220: 3c 3c 20 36 29 29 3b 20 72 65 74 75 72 6e 20 76 << 6)); return v
2230: 61 6c 3b 20 7d 0a 09 09 57 4f 52 44 20 66 52 65 al; }...WORD fRe
2240: 73 65 72 76 65 64 28 29 20 20 20 20 20 20 20 20 served()
2250: 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 63 { return c
2260: 61 73 74 28 57 4f 52 44 29 28 28 5f 62 69 74 66 ast(WORD)((_bitf
2270: 69 65 6c 64 20 3e 3e 20 37 29 20 26 20 30 78 31 ield >> 7) & 0x1
2280: 29 3b 20 7d 0a 09 09 57 4f 52 44 20 66 52 65 73 ); }...WORD fRes
2290: 65 72 76 65 64 28 57 4f 52 44 20 76 61 6c 29 20 erved(WORD val)
22a0: 20 20 20 20 20 7b 20 5f 62 69 74 66 69 65 6c 64 { _bitfield
22b0: 20 3d 20 63 61 73 74 28 57 4f 52 44 29 28 28 5f = cast(WORD)((_
22c0: 62 69 74 66 69 65 6c 64 20 26 20 30 78 46 46 46 bitfield & 0xFFF
22d0: 46 46 46 46 46 46 46 46 46 46 46 37 46 29 20 7c FFFFFFFFFFF7F) |
22e0: 20 28 76 61 6c 20 3c 3c 20 37 29 29 3b 20 72 65 (val << 7)); re
22f0: 74 75 72 6e 20 76 61 6c 3b 20 7d 0a 09 09 57 4f turn val; }...WO
2300: 52 44 20 66 53 68 61 70 65 52 65 73 65 72 76 65 RD fShapeReserve
2310: 64 28 29 20 20 20 20 20 20 20 20 20 7b 20 72 65 d() { re
2320: 74 75 72 6e 20 63 61 73 74 28 57 4f 52 44 29 28 turn cast(WORD)(
2330: 28 5f 62 69 74 66 69 65 6c 64 20 3e 3e 20 38 29 (_bitfield >> 8)
2340: 20 26 20 30 78 46 46 29 3b 20 7d 0a 09 09 57 4f & 0xFF); }...WO
2350: 52 44 20 66 53 68 61 70 65 52 65 73 65 72 76 65 RD fShapeReserve
2360: 64 28 57 4f 52 44 20 76 61 6c 29 20 7b 20 5f 62 d(WORD val) { _b
2370: 69 74 66 69 65 6c 64 20 3d 20 63 61 73 74 28 57 itfield = cast(W
2380: 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c 64 20 ORD)((_bitfield
2390: 26 20 30 78 46 46 46 46 46 46 46 46 46 46 46 46 & 0xFFFFFFFFFFFF
23a0: 30 30 46 46 29 20 7c 20 28 76 61 6c 20 3c 3c 20 00FF) | (val <<
23b0: 38 29 29 3b 20 72 65 74 75 72 6e 20 76 61 6c 3b 8)); return val;
23c0: 20 7d 0a 09 7d 0a 0a 09 73 74 72 75 63 74 20 47 }..}...struct G
23d0: 4f 46 46 53 45 54 0a 09 7b 0a 09 09 4c 4f 4e 47 OFFSET..{...LONG
23e0: 20 64 75 3b 0a 09 09 4c 4f 4e 47 20 64 76 3b 0a du;...LONG dv;.
23f0: 09 7d 0a 0a 09 73 74 72 75 63 74 20 53 43 52 49 .}...struct SCRI
2400: 50 54 5f 4c 4f 47 41 54 54 52 0a 09 7b 0a 09 09 PT_LOGATTR..{...
2410: 42 59 54 45 20 5f 62 69 74 66 69 65 6c 64 3b 0a BYTE _bitfield;.
2420: 09 09 42 59 54 45 20 66 53 6f 66 74 42 72 65 61 ..BYTE fSoftBrea
2430: 6b 28 29 20 20 20 20 20 20 20 20 20 20 7b 20 72 k() { r
2440: 65 74 75 72 6e 20 63 61 73 74 28 42 59 54 45 29 eturn cast(BYTE)
2450: 28 28 5f 62 69 74 66 69 65 6c 64 20 3e 3e 20 30 ((_bitfield >> 0
2460: 29 20 26 20 30 78 31 29 3b 20 7d 0a 09 09 42 59 ) & 0x1); }...BY
2470: 54 45 20 66 53 6f 66 74 42 72 65 61 6b 28 42 59 TE fSoftBreak(BY
2480: 54 45 20 76 61 6c 29 20 20 7b 20 5f 62 69 74 66 TE val) { _bitf
2490: 69 65 6c 64 20 3d 20 63 61 73 74 28 42 59 54 45 ield = cast(BYTE
24a0: 29 28 28 5f 62 69 74 66 69 65 6c 64 20 26 20 30 )((_bitfield & 0
24b0: 78 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 xFFFFFFFFFFFFFFF
24c0: 45 29 20 7c 20 28 76 61 6c 20 3c 3c 20 30 29 29 E) | (val << 0))
24d0: 3b 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0a ; return val; }.
24e0: 09 09 42 59 54 45 20 66 57 68 69 74 65 53 70 61 ..BYTE fWhiteSpa
24f0: 63 65 28 29 20 20 20 20 20 20 20 20 20 7b 20 72 ce() { 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 31 ((_bitfield >> 1
2520: 29 20 26 20 30 78 31 29 3b 20 7d 0a 09 09 42 59 ) & 0x1); }...BY
2530: 54 45 20 66 57 68 69 74 65 53 70 61 63 65 28 42 TE fWhiteSpace(B
2540: 59 54 45 20 76 61 6c 29 20 7b 20 5f 62 69 74 66 YTE val) { _bitf
2550: 69 65 6c 64 20 3d 20 63 61 73 74 28 42 59 54 45 ield = cast(BYTE
2560: 29 28 28 5f 62 69 74 66 69 65 6c 64 20 26 20 30 )((_bitfield & 0
2570: 78 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 xFFFFFFFFFFFFFFF
2580: 44 29 20 7c 20 28 76 61 6c 20 3c 3c 20 31 29 29 D) | (val << 1))
2590: 3b 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0a ; return val; }.
25a0: 09 09 42 59 54 45 20 66 43 68 61 72 53 74 6f 70 ..BYTE fCharStop
25b0: 28 29 20 20 20 20 20 20 20 20 20 20 20 7b 20 72 () { r
25c0: 65 74 75 72 6e 20 63 61 73 74 28 42 59 54 45 29 eturn cast(BYTE)
25d0: 28 28 5f 62 69 74 66 69 65 6c 64 20 3e 3e 20 32 ((_bitfield >> 2
25e0: 29 20 26 20 30 78 31 29 3b 20 7d 0a 09 09 42 59 ) & 0x1); }...BY
25f0: 54 45 20 66 43 68 61 72 53 74 6f 70 28 42 59 54 TE fCharStop(BYT
2600: 45 20 76 61 6c 29 20 20 20 7b 20 5f 62 69 74 66 E val) { _bitf
2610: 69 65 6c 64 20 3d 20 63 61 73 74 28 42 59 54 45 ield = cast(BYTE
2620: 29 28 28 5f 62 69 74 66 69 65 6c 64 20 26 20 30 )((_bitfield & 0
2630: 78 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 xFFFFFFFFFFFFFFF
2640: 42 29 20 7c 20 28 76 61 6c 20 3c 3c 20 32 29 29 B) | (val << 2))
2650: 3b 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0a ; return val; }.
2660: 09 09 42 59 54 45 20 66 57 6f 72 64 53 74 6f 70 ..BYTE fWordStop
2670: 28 29 20 20 20 20 20 20 20 20 20 20 20 7b 20 72 () { r
2680: 65 74 75 72 6e 20 63 61 73 74 28 42 59 54 45 29 eturn cast(BYTE)
2690: 28 28 5f 62 69 74 66 69 65 6c 64 20 3e 3e 20 33 ((_bitfield >> 3
26a0: 29 20 26 20 30 78 31 29 3b 20 7d 0a 09 09 42 59 ) & 0x1); }...BY
26b0: 54 45 20 66 57 6f 72 64 53 74 6f 70 28 42 59 54 TE fWordStop(BYT
26c0: 45 20 76 61 6c 29 20 20 20 7b 20 5f 62 69 74 66 E val) { _bitf
26d0: 69 65 6c 64 20 3d 20 63 61 73 74 28 42 59 54 45 ield = cast(BYTE
26e0: 29 28 28 5f 62 69 74 66 69 65 6c 64 20 26 20 30 )((_bitfield & 0
26f0: 78 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 xFFFFFFFFFFFFFFF
2700: 37 29 20 7c 20 28 76 61 6c 20 3c 3c 20 33 29 29 7) | (val << 3))
2710: 3b 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0a ; return val; }.
2720: 09 09 42 59 54 45 20 66 49 6e 76 61 6c 69 64 28 ..BYTE fInvalid(
2730: 29 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 72 ) { r
2740: 65 74 75 72 6e 20 63 61 73 74 28 42 59 54 45 29 eturn cast(BYTE)
2750: 28 28 5f 62 69 74 66 69 65 6c 64 20 3e 3e 20 34 ((_bitfield >> 4
2760: 29 20 26 20 30 78 31 29 3b 20 7d 0a 09 09 42 59 ) & 0x1); }...BY
2770: 54 45 20 66 49 6e 76 61 6c 69 64 28 42 59 54 45 TE fInvalid(BYTE
2780: 20 76 61 6c 29 20 20 20 20 7b 20 5f 62 69 74 66 val) { _bitf
2790: 69 65 6c 64 20 3d 20 63 61 73 74 28 42 59 54 45 ield = cast(BYTE
27a0: 29 28 28 5f 62 69 74 66 69 65 6c 64 20 26 20 30 )((_bitfield & 0
27b0: 78 46 46 46 46 46 46 46 46 46 46 46 46 46 46 45 xFFFFFFFFFFFFFFE
27c0: 46 29 20 7c 20 28 76 61 6c 20 3c 3c 20 34 29 29 F) | (val << 4))
27d0: 3b 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0a ; return val; }.
27e0: 09 09 42 59 54 45 20 66 52 65 73 65 72 76 65 64 ..BYTE fReserved
27f0: 28 29 20 20 20 20 20 20 20 20 20 20 20 7b 20 72 () { r
2800: 65 74 75 72 6e 20 63 61 73 74 28 42 59 54 45 29 eturn cast(BYTE)
2810: 28 28 5f 62 69 74 66 69 65 6c 64 20 3e 3e 20 35 ((_bitfield >> 5
2820: 29 20 26 20 30 78 37 29 3b 20 7d 0a 09 09 42 59 ) & 0x7); }...BY
2830: 54 45 20 66 52 65 73 65 72 76 65 64 28 42 59 54 TE fReserved(BYT
2840: 45 20 76 61 6c 29 20 20 20 7b 20 5f 62 69 74 66 E val) { _bitf
2850: 69 65 6c 64 20 3d 20 63 61 73 74 28 42 59 54 45 ield = cast(BYTE
2860: 29 28 28 5f 62 69 74 66 69 65 6c 64 20 26 20 30 )((_bitfield & 0
2870: 78 46 46 46 46 46 46 46 46 46 46 46 46 46 46 31 xFFFFFFFFFFFFFF1
2880: 46 29 20 7c 20 28 76 61 6c 20 3c 3c 20 35 29 29 F) | (val << 5))
2890: 3b 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0a ; return val; }.
28a0: 09 7d 0a 0a 09 73 74 72 75 63 74 20 53 43 52 49 .}...struct SCRI
28b0: 50 54 5f 50 52 4f 50 45 52 54 49 45 53 0a 09 7b PT_PROPERTIES..{
28c0: 0a 09 09 70 72 69 76 61 74 65 20 44 57 4f 52 44 ...private DWORD
28d0: 20 5f 62 69 74 66 69 65 6c 64 31 3b 0a 09 09 44 _bitfield1;...D
28e0: 57 4f 52 44 20 6c 61 6e 67 69 64 28 29 20 20 20 WORD langid()
28f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2900: 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 { return
2910: 28 5f 62 69 74 66 69 65 6c 64 31 20 3e 3e 20 30 (_bitfield1 >> 0
2920: 29 20 26 20 30 78 46 46 46 46 3b 20 7d 0a 09 09 ) & 0xFFFF; }...
2930: 44 57 4f 52 44 20 6c 61 6e 67 69 64 28 44 57 4f DWORD langid(DWO
2940: 52 44 20 76 61 6c 29 20 20 20 20 20 20 20 20 20 RD val)
2950: 20 20 20 20 20 20 20 20 7b 20 5f 62 69 74 66 69 { _bitfi
2960: 65 6c 64 31 20 3d 20 63 61 73 74 28 44 57 4f 52 eld1 = cast(DWOR
2970: 44 29 28 28 5f 62 69 74 66 69 65 6c 64 31 20 26 D)((_bitfield1 &
2980: 20 30 78 46 46 46 46 46 46 46 46 46 46 46 46 30 0xFFFFFFFFFFFF0
2990: 30 30 30 29 20 7c 20 28 76 61 6c 20 3c 3c 20 30 000) | (val << 0
29a0: 29 29 3b 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 )); return val;
29b0: 7d 0a 09 09 44 57 4f 52 44 20 66 4e 75 6d 65 72 }...DWORD fNumer
29c0: 69 63 28 29 20 20 20 20 20 20 20 20 20 20 20 20 ic()
29d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 72 65 { re
29e0: 74 75 72 6e 20 28 5f 62 69 74 66 69 65 6c 64 31 turn (_bitfield1
29f0: 20 3e 3e 20 31 36 29 20 26 20 30 78 31 3b 20 7d >> 16) & 0x1; }
2a00: 0a 09 09 44 57 4f 52 44 20 66 4e 75 6d 65 72 69 ...DWORD fNumeri
2a10: 63 28 44 57 4f 52 44 20 76 61 6c 29 20 20 20 20 c(DWORD val)
2a20: 20 20 20 20 20 20 20 20 20 20 20 7b 20 5f 62 69 { _bi
2a30: 74 66 69 65 6c 64 31 20 3d 20 63 61 73 74 28 44 tfield1 = cast(D
2a40: 57 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c 64 WORD)((_bitfield
2a50: 31 20 26 20 30 78 46 46 46 46 46 46 46 46 46 46 1 & 0xFFFFFFFFFF
2a60: 46 45 46 46 46 46 29 20 7c 20 28 76 61 6c 20 3c FEFFFF) | (val <
2a70: 3c 20 31 36 29 29 3b 20 72 65 74 75 72 6e 20 76 < 16)); return v
2a80: 61 6c 3b 20 7d 0a 09 09 44 57 4f 52 44 20 66 43 al; }...DWORD fC
2a90: 6f 6d 70 6c 65 78 28 29 20 20 20 20 20 20 20 20 omplex()
2aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ab0: 7b 20 72 65 74 75 72 6e 20 28 5f 62 69 74 66 69 { return (_bitfi
2ac0: 65 6c 64 31 20 3e 3e 20 31 37 29 20 26 20 30 78 eld1 >> 17) & 0x
2ad0: 31 3b 20 7d 0a 09 09 44 57 4f 52 44 20 66 43 6f 1; }...DWORD fCo
2ae0: 6d 70 6c 65 78 28 44 57 4f 52 44 20 76 61 6c 29 mplex(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 44 46 46 46 46 29 20 7c 20 28 76 FFFFFDFFFF) | (v
2b40: 61 6c 20 3c 3c 20 31 37 29 29 3b 20 72 65 74 75 al << 17)); retu
2b50: 72 6e 20 76 61 6c 3b 20 7d 0a 09 09 44 57 4f 52 rn val; }...DWOR
2b60: 44 20 66 4e 65 65 64 73 57 6f 72 64 42 72 65 61 D fNeedsWordBrea
2b70: 6b 69 6e 67 28 29 20 20 20 20 20 20 20 20 20 20 king()
2b80: 20 20 20 20 7b 20 72 65 74 75 72 6e 20 28 5f 62 { return (_b
2b90: 69 74 66 69 65 6c 64 31 20 3e 3e 20 31 38 29 20 itfield1 >> 18)
2ba0: 26 20 30 78 31 3b 20 7d 0a 09 09 44 57 4f 52 44 & 0x1; }...DWORD
2bb0: 20 66 4e 65 65 64 73 57 6f 72 64 42 72 65 61 6b fNeedsWordBreak
2bc0: 69 6e 67 28 44 57 4f 52 44 20 76 61 6c 29 20 20 ing(DWORD val)
2bd0: 20 20 20 7b 20 5f 62 69 74 66 69 65 6c 64 31 20 { _bitfield1
2be0: 3d 20 63 61 73 74 28 44 57 4f 52 44 29 28 28 5f = cast(DWORD)((_
2bf0: 62 69 74 66 69 65 6c 64 31 20 26 20 30 78 46 46 bitfield1 & 0xFF
2c00: 46 46 46 46 46 46 46 46 46 42 46 46 46 46 29 20 FFFFFFFFFBFFFF)
2c10: 7c 20 28 76 61 6c 20 3c 3c 20 31 38 29 29 3b 20 | (val << 18));
2c20: 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0a 09 09 return val; }...
2c30: 44 57 4f 52 44 20 66 4e 65 65 64 73 43 61 72 65 DWORD fNeedsCare
2c40: 74 49 6e 66 6f 28 29 20 20 20 20 20 20 20 20 20 tInfo()
2c50: 20 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e { return
2c60: 20 28 5f 62 69 74 66 69 65 6c 64 31 20 3e 3e 20 (_bitfield1 >>
2c70: 31 39 29 20 26 20 30 78 31 3b 20 7d 0a 09 09 44 19) & 0x1; }...D
2c80: 57 4f 52 44 20 66 4e 65 65 64 73 43 61 72 65 74 WORD fNeedsCaret
2c90: 49 6e 66 6f 28 44 57 4f 52 44 20 76 61 6c 29 20 Info(DWORD val)
2ca0: 20 20 20 20 20 20 20 7b 20 5f 62 69 74 66 69 65 { _bitfie
2cb0: 6c 64 31 20 3d 20 63 61 73 74 28 44 57 4f 52 44 ld1 = cast(DWORD
2cc0: 29 28 28 5f 62 69 74 66 69 65 6c 64 31 20 26 20 )((_bitfield1 &
2cd0: 30 78 46 46 46 46 46 46 46 46 46 46 46 37 46 46 0xFFFFFFFFFFF7FF
2ce0: 46 46 29 20 7c 20 28 76 61 6c 20 3c 3c 20 31 39 FF) | (val << 19
2cf0: 29 29 3b 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 )); return val;
2d00: 7d 0a 09 09 44 57 4f 52 44 20 62 43 68 61 72 53 }...DWORD bCharS
2d10: 65 74 28 29 20 20 20 20 20 20 20 20 20 20 20 20 et()
2d20: 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 72 65 { re
2d30: 74 75 72 6e 20 28 5f 62 69 74 66 69 65 6c 64 31 turn (_bitfield1
2d40: 20 3e 3e 20 32 30 29 20 26 20 30 78 46 46 3b 20 >> 20) & 0xFF;
2d50: 7d 0a 09 09 44 57 4f 52 44 20 62 43 68 61 72 53 }...DWORD bCharS
2d60: 65 74 28 44 57 4f 52 44 20 76 61 6c 29 20 20 20 et(DWORD val)
2d70: 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 5f 62 { _b
2d80: 69 74 66 69 65 6c 64 31 20 3d 20 63 61 73 74 28 itfield1 = cast(
2d90: 44 57 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c DWORD)((_bitfiel
2da0: 64 31 20 26 20 30 78 46 46 46 46 46 46 46 46 46 d1 & 0xFFFFFFFFF
2db0: 30 30 46 46 46 46 46 29 20 7c 20 28 76 61 6c 20 00FFFFF) | (val
2dc0: 3c 3c 20 32 30 29 29 3b 20 72 65 74 75 72 6e 20 << 20)); return
2dd0: 76 61 6c 3b 20 7d 0a 09 09 44 57 4f 52 44 20 66 val; }...DWORD f
2de0: 43 6f 6e 74 72 6f 6c 28 29 20 20 20 20 20 20 20 Control()
2df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2e00: 20 7b 20 72 65 74 75 72 6e 20 28 5f 62 69 74 66 { return (_bitf
2e10: 69 65 6c 64 31 20 3e 3e 20 32 38 29 20 26 20 30 ield1 >> 28) & 0
2e20: 78 31 3b 20 7d 0a 09 09 44 57 4f 52 44 20 66 43 x1; }...DWORD fC
2e30: 6f 6e 74 72 6f 6c 28 44 57 4f 52 44 20 76 61 6c ontrol(DWORD val
2e40: 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 )
2e50: 7b 20 5f 62 69 74 66 69 65 6c 64 31 20 3d 20 63 { _bitfield1 = c
2e60: 61 73 74 28 44 57 4f 52 44 29 28 28 5f 62 69 74 ast(DWORD)((_bit
2e70: 66 69 65 6c 64 31 20 26 20 30 78 46 46 46 46 46 field1 & 0xFFFFF
2e80: 46 46 46 45 46 46 46 46 46 46 46 29 20 7c 20 28 FFFEFFFFFFF) | (
2e90: 76 61 6c 20 3c 3c 20 32 38 29 29 3b 20 72 65 74 val << 28)); ret
2ea0: 75 72 6e 20 76 61 6c 3b 20 7d 0a 09 09 44 57 4f urn val; }...DWO
2eb0: 52 44 20 66 50 72 69 76 61 74 65 55 73 65 41 72 RD fPrivateUseAr
2ec0: 65 61 28 29 20 20 20 20 20 20 20 20 20 20 20 20 ea()
2ed0: 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 28 5f { return (_
2ee0: 62 69 74 66 69 65 6c 64 31 20 3e 3e 20 32 39 29 bitfield1 >> 29)
2ef0: 20 26 20 30 78 31 3b 20 7d 0a 09 09 44 57 4f 52 & 0x1; }...DWOR
2f00: 44 20 66 50 72 69 76 61 74 65 55 73 65 41 72 65 D fPrivateUseAre
2f10: 61 28 44 57 4f 52 44 20 76 61 6c 29 20 20 20 20 a(DWORD val)
2f20: 20 20 20 20 7b 20 5f 62 69 74 66 69 65 6c 64 31 { _bitfield1
2f30: 20 3d 20 63 61 73 74 28 44 57 4f 52 44 29 28 28 = cast(DWORD)((
2f40: 5f 62 69 74 66 69 65 6c 64 31 20 26 20 30 78 46 _bitfield1 & 0xF
2f50: 46 46 46 46 46 46 46 44 46 46 46 46 46 46 46 29 FFFFFFFDFFFFFFF)
2f60: 20 7c 20 28 76 61 6c 20 3c 3c 20 32 39 29 29 3b | (val << 29));
2f70: 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0a 09 return val; }..
2f80: 09 44 57 4f 52 44 20 66 4e 65 65 64 73 43 68 61 .DWORD fNeedsCha
2f90: 72 61 63 74 65 72 4a 75 73 74 69 66 79 28 29 20 racterJustify()
2fa0: 20 20 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 { retur
2fb0: 6e 20 28 5f 62 69 74 66 69 65 6c 64 31 20 3e 3e n (_bitfield1 >>
2fc0: 20 33 30 29 20 26 20 30 78 31 3b 20 7d 0a 09 09 30) & 0x1; }...
2fd0: 44 57 4f 52 44 20 66 4e 65 65 64 73 43 68 61 72 DWORD fNeedsChar
2fe0: 61 63 74 65 72 4a 75 73 74 69 66 79 28 44 57 4f acterJustify(DWO
2ff0: 52 44 20 76 61 6c 29 20 7b 20 5f 62 69 74 66 69 RD val) { _bitfi
3000: 65 6c 64 31 20 3d 20 63 61 73 74 28 44 57 4f 52 eld1 = cast(DWOR
3010: 44 29 28 28 5f 62 69 74 66 69 65 6c 64 31 20 26 D)((_bitfield1 &
3020: 20 30 78 46 46 46 46 46 46 46 46 42 46 46 46 46 0xFFFFFFFFBFFFF
3030: 46 46 46 29 20 7c 20 28 76 61 6c 20 3c 3c 20 33 FFF) | (val << 3
3040: 30 29 29 3b 20 72 65 74 75 72 6e 20 76 61 6c 3b 0)); return val;
3050: 20 7d 0a 09 09 44 57 4f 52 44 20 66 49 6e 76 61 }...DWORD fInva
3060: 6c 69 64 47 6c 79 70 68 28 29 20 20 20 20 20 20 lidGlyph()
3070: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 72 { r
3080: 65 74 75 72 6e 20 28 5f 62 69 74 66 69 65 6c 64 eturn (_bitfield
3090: 31 20 3e 3e 20 33 31 29 20 26 20 30 78 31 3b 20 1 >> 31) & 0x1;
30a0: 7d 0a 09 09 44 57 4f 52 44 20 66 49 6e 76 61 6c }...DWORD fInval
30b0: 69 64 47 6c 79 70 68 28 44 57 4f 52 44 20 76 61 idGlyph(DWORD va
30c0: 6c 29 20 20 20 20 20 20 20 20 20 20 7b 20 5f 62 l) { _b
30d0: 69 74 66 69 65 6c 64 31 20 3d 20 63 61 73 74 28 itfield1 = cast(
30e0: 44 57 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c DWORD)((_bitfiel
30f0: 64 31 20 26 20 30 78 46 46 46 46 46 46 46 46 37 d1 & 0xFFFFFFFF7
3100: 46 46 46 46 46 46 46 29 20 7c 20 28 76 61 6c 20 FFFFFFF) | (val
3110: 3c 3c 20 33 31 29 29 3b 20 72 65 74 75 72 6e 20 << 31)); return
3120: 76 61 6c 3b 20 7d 0a 09 09 70 72 69 76 61 74 65 val; }...private
3130: 20 44 57 4f 52 44 20 5f 62 69 74 66 69 65 6c 64 DWORD _bitfield
3140: 32 3b 0a 09 09 44 57 4f 52 44 20 66 49 6e 76 61 2;...DWORD fInva
3150: 6c 69 64 4c 6f 67 41 74 74 72 28 29 20 20 20 20 lidLogAttr()
3160: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 72 { r
3170: 65 74 75 72 6e 20 28 5f 62 69 74 66 69 65 6c 64 eturn (_bitfield
3180: 32 20 3e 3e 20 30 29 20 26 20 30 78 31 3b 20 7d 2 >> 0) & 0x1; }
3190: 0a 09 09 44 57 4f 52 44 20 66 49 6e 76 61 6c 69 ...DWORD fInvali
31a0: 64 4c 6f 67 41 74 74 72 28 44 57 4f 52 44 20 76 dLogAttr(DWORD v
31b0: 61 6c 29 20 20 20 20 20 20 20 20 7b 20 5f 62 69 al) { _bi
31c0: 74 66 69 65 6c 64 32 20 3d 20 63 61 73 74 28 44 tfield2 = cast(D
31d0: 57 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c 64 WORD)((_bitfield
31e0: 32 20 26 20 30 78 46 46 46 46 46 46 46 46 46 46 2 & 0xFFFFFFFFFF
31f0: 46 46 46 46 46 45 29 20 7c 20 28 76 61 6c 20 3c FFFFFE) | (val <
3200: 3c 20 30 29 29 3b 20 72 65 74 75 72 6e 20 76 61 < 0)); return va
3210: 6c 3b 20 7d 0a 09 09 44 57 4f 52 44 20 66 43 44 l; }...DWORD fCD
3220: 4d 28 29 20 20 20 20 20 20 20 20 20 20 20 20 20 M()
3230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b {
3240: 20 72 65 74 75 72 6e 20 28 5f 62 69 74 66 69 65 return (_bitfie
3250: 6c 64 32 20 3e 3e 20 31 29 20 26 20 30 78 31 3b ld2 >> 1) & 0x1;
3260: 20 7d 0a 09 09 44 57 4f 52 44 20 66 43 44 4d 28 }...DWORD fCDM(
3270: 44 57 4f 52 44 20 76 61 6c 29 20 20 20 20 20 20 DWORD val)
3280: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 5f { _
3290: 62 69 74 66 69 65 6c 64 32 20 3d 20 63 61 73 74 bitfield2 = cast
32a0: 28 44 57 4f 52 44 29 28 28 5f 62 69 74 66 69 65 (DWORD)((_bitfie
32b0: 6c 64 32 20 26 20 30 78 46 46 46 46 46 46 46 46 ld2 & 0xFFFFFFFF
32c0: 46 46 46 46 46 46 46 44 29 20 7c 20 28 76 61 6c FFFFFFFD) | (val
32d0: 20 3c 3c 20 31 29 29 3b 20 72 65 74 75 72 6e 20 << 1)); return
32e0: 76 61 6c 3b 20 7d 0a 09 09 44 57 4f 52 44 20 66 val; }...DWORD f
32f0: 41 6d 62 69 67 75 6f 75 73 43 68 61 72 53 65 74 AmbiguousCharSet
3300: 28 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ()
3310: 20 7b 20 72 65 74 75 72 6e 20 28 5f 62 69 74 66 { return (_bitf
3320: 69 65 6c 64 32 20 3e 3e 20 32 29 20 26 20 30 78 ield2 >> 2) & 0x
3330: 31 3b 20 7d 0a 09 09 44 57 4f 52 44 20 66 41 6d 1; }...DWORD fAm
3340: 62 69 67 75 6f 75 73 43 68 61 72 53 65 74 28 44 biguousCharSet(D
3350: 57 4f 52 44 20 76 61 6c 29 20 20 20 20 20 20 7b WORD val) {
3360: 20 5f 62 69 74 66 69 65 6c 64 32 20 3d 20 63 61 _bitfield2 = ca
3370: 73 74 28 44 57 4f 52 44 29 28 28 5f 62 69 74 66 st(DWORD)((_bitf
3380: 69 65 6c 64 32 20 26 20 30 78 46 46 46 46 46 46 ield2 & 0xFFFFFF
3390: 46 46 46 46 46 46 46 46 46 42 29 20 7c 20 28 76 FFFFFFFFFB) | (v
33a0: 61 6c 20 3c 3c 20 32 29 29 3b 20 72 65 74 75 72 al << 2)); retur
33b0: 6e 20 76 61 6c 3b 20 7d 0a 09 09 44 57 4f 52 44 n val; }...DWORD
33c0: 20 66 43 6c 75 73 74 65 72 53 69 7a 65 56 61 72 fClusterSizeVar
33d0: 69 65 73 28 29 20 20 20 20 20 20 20 20 20 20 20 ies()
33e0: 20 20 20 7b 20 72 65 74 75 72 6e 20 28 5f 62 69 { return (_bi
33f0: 74 66 69 65 6c 64 32 20 3e 3e 20 33 29 20 26 20 tfield2 >> 3) &
3400: 30 78 31 3b 20 7d 0a 09 09 44 57 4f 52 44 20 66 0x1; }...DWORD f
3410: 43 6c 75 73 74 65 72 53 69 7a 65 56 61 72 69 65 ClusterSizeVarie
3420: 73 28 44 57 4f 52 44 20 76 61 6c 29 20 20 20 20 s(DWORD val)
3430: 20 7b 20 5f 62 69 74 66 69 65 6c 64 32 20 3d 20 { _bitfield2 =
3440: 63 61 73 74 28 44 57 4f 52 44 29 28 28 5f 62 69 cast(DWORD)((_bi
3450: 74 66 69 65 6c 64 32 20 26 20 30 78 46 46 46 46 tfield2 & 0xFFFF
3460: 46 46 46 46 46 46 46 46 46 46 46 37 29 20 7c 20 FFFFFFFFFFF7) |
3470: 28 76 61 6c 20 3c 3c 20 33 29 29 3b 20 72 65 74 (val << 3)); ret
3480: 75 72 6e 20 76 61 6c 3b 20 7d 0a 09 09 44 57 4f urn val; }...DWO
3490: 52 44 20 66 52 65 6a 65 63 74 49 6e 76 61 6c 69 RD fRejectInvali
34a0: 64 28 29 20 20 20 20 20 20 20 20 20 20 20 20 20 d()
34b0: 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 28 5f { return (_
34c0: 62 69 74 66 69 65 6c 64 32 20 3e 3e 20 34 29 20 bitfield2 >> 4)
34d0: 26 20 30 78 31 3b 20 7d 0a 09 09 44 57 4f 52 44 & 0x1; }...DWORD
34e0: 20 66 52 65 6a 65 63 74 49 6e 76 61 6c 69 64 28 fRejectInvalid(
34f0: 44 57 4f 52 44 20 76 61 6c 29 20 20 20 20 20 20 DWORD val)
3500: 20 20 20 7b 20 5f 62 69 74 66 69 65 6c 64 32 20 { _bitfield2
3510: 3d 20 63 61 73 74 28 44 57 4f 52 44 29 28 28 5f = cast(DWORD)((_
3520: 62 69 74 66 69 65 6c 64 32 20 26 20 30 78 46 46 bitfield2 & 0xFF
3530: 46 46 46 46 46 46 46 46 46 46 46 46 45 46 29 20 FFFFFFFFFFFFEF)
3540: 7c 20 28 76 61 6c 20 3c 3c 20 34 29 29 3b 20 72 | (val << 4)); r
3550: 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0a 09 7d 0a eturn val; }..}.
3560: 0a 09 73 74 72 75 63 74 20 53 43 52 49 50 54 5f ..struct SCRIPT_
3570: 46 4f 4e 54 50 52 4f 50 45 52 54 49 45 53 0a 09 FONTPROPERTIES..
3580: 7b 0a 09 09 69 6e 74 20 63 42 79 74 65 73 20 3d {...int cBytes =
3590: 20 53 43 52 49 50 54 5f 46 4f 4e 54 50 52 4f 50 SCRIPT_FONTPROP
35a0: 45 52 54 49 45 53 2e 73 69 7a 65 6f 66 3b 0a 09 ERTIES.sizeof;..
35b0: 09 57 4f 52 44 20 77 67 42 6c 61 6e 6b 3b 0a 09 .WORD wgBlank;..
35c0: 09 57 4f 52 44 20 77 67 44 65 66 61 75 6c 74 3b .WORD wgDefault;
35d0: 0a 09 09 57 4f 52 44 20 77 67 49 6e 76 61 6c 69 ...WORD wgInvali
35e0: 64 3b 0a 09 09 57 4f 52 44 20 77 67 4b 61 73 68 d;...WORD wgKash
35f0: 69 64 61 3b 0a 09 09 69 6e 74 20 69 4b 61 73 68 ida;...int iKash
3600: 69 64 61 57 69 64 74 68 3b 0a 09 7d 0a 0a 09 73 idaWidth;..}...s
3610: 74 72 75 63 74 20 53 43 52 49 50 54 5f 54 41 42 truct SCRIPT_TAB
3620: 44 45 46 0a 09 7b 0a 09 09 69 6e 74 20 63 54 61 DEF..{...int cTa
3630: 62 53 74 6f 70 73 3b 0a 09 09 69 6e 74 20 69 53 bStops;...int iS
3640: 63 61 6c 65 3b 0a 09 09 69 6e 74 2a 20 70 54 61 cale;...int* pTa
3650: 62 53 74 6f 70 73 3b 0a 09 09 69 6e 74 20 69 54 bStops;...int iT
3660: 61 62 4f 72 69 67 69 6e 3b 0a 09 7d 0a 0a 09 73 abOrigin;..}...s
3670: 74 72 75 63 74 20 53 43 52 49 50 54 5f 44 49 47 truct SCRIPT_DIG
3680: 49 54 53 55 42 53 54 49 54 55 54 45 0a 09 7b 0a ITSUBSTITUTE..{.
3690: 09 09 70 72 69 76 61 74 65 20 44 57 4f 52 44 20 ..private DWORD
36a0: 5f 62 69 74 66 69 65 6c 64 31 3b 0a 09 09 44 57 _bitfield1;...DW
36b0: 4f 52 44 20 4e 61 74 69 6f 6e 61 6c 44 69 67 69 ORD NationalDigi
36c0: 74 4c 61 6e 67 75 61 67 65 28 29 20 20 20 20 20 tLanguage()
36d0: 20 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e { return
36e0: 20 28 5f 62 69 74 66 69 65 6c 64 31 20 3e 3e 20 (_bitfield1 >>
36f0: 30 29 20 26 20 30 78 46 46 46 46 3b 20 7d 0a 09 0) & 0xFFFF; }..
3700: 09 44 57 4f 52 44 20 4e 61 74 69 6f 6e 61 6c 44 .DWORD NationalD
3710: 69 67 69 74 4c 61 6e 67 75 61 67 65 28 44 57 4f igitLanguage(DWO
3720: 52 44 20 76 61 6c 29 20 20 20 20 7b 20 5f 62 69 RD val) { _bi
3730: 74 66 69 65 6c 64 31 20 3d 20 63 61 73 74 28 44 tfield1 = cast(D
3740: 57 4f 52 44 29 28 28 5f 62 69 74 66 69 65 6c 64 WORD)((_bitfield
3750: 31 20 26 20 30 78 46 46 46 46 46 46 46 46 46 46 1 & 0xFFFFFFFFFF
3760: 46 46 30 30 30 30 29 20 7c 20 28 76 61 6c 20 3c FF0000) | (val <
3770: 3c 20 30 29 29 3b 20 72 65 74 75 72 6e 20 76 61 < 0)); return va
3780: 6c 3b 20 7d 0a 09 09 44 57 4f 52 44 20 54 72 61 l; }...DWORD Tra
3790: 64 69 74 69 6f 6e 61 6c 44 69 67 69 74 4c 61 6e ditionalDigitLan
37a0: 67 75 61 67 65 28 29 20 20 20 20 20 20 20 20 20 guage()
37b0: 20 7b 20 72 65 74 75 72 6e 20 28 5f 62 69 74 66 { return (_bitf
37c0: 69 65 6c 64 31 20 3e 3e 20 31 36 29 20 26 20 30 ield1 >> 16) & 0
37d0: 78 46 46 46 46 3b 20 7d 0a 09 09 44 57 4f 52 44 xFFFF; }...DWORD
37e0: 20 54 72 61 64 69 74 69 6f 6e 61 6c 44 69 67 69 TraditionalDigi
37f0: 74 4c 61 6e 67 75 61 67 65 28 44 57 4f 52 44 20 tLanguage(DWORD
3800: 76 61 6c 29 20 7b 20 5f 62 69 74 66 69 65 6c 64 val) { _bitfield
3810: 31 20 3d 20 63 61 73 74 28 44 57 4f 52 44 29 28 1 = cast(DWORD)(
3820: 28 5f 62 69 74 66 69 65 6c 64 31 20 26 20 30 78 (_bitfield1 & 0x
3830: 46 46 46 46 46 46 46 46 30 30 30 30 46 46 46 46 FFFFFFFF0000FFFF
3840: 29 20 7c 20 28 76 61 6c 20 3c 3c 20 31 36 29 29 ) | (val << 16))
3850: 3b 20 72 65 74 75 72 6e 20 76 61 6c 3b 20 7d 0a ; return val; }.
3860: 09 09 70 72 69 76 61 74 65 20 44 57 4f 52 44 20 ..private DWORD
3870: 5f 62 69 74 66 69 65 6c 64 32 3b 0a 09 09 44 57 _bitfield2;...DW
3880: 4f 52 44 20 44 69 67 69 74 53 75 62 73 74 69 74 ORD DigitSubstit
3890: 75 74 65 28 29 20 20 20 20 20 20 20 20 20 20 20 ute()
38a0: 20 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e { return
38b0: 20 28 5f 62 69 74 66 69 65 6c 64 32 20 3e 3e 20 (_bitfield2 >>
38c0: 30 29 20 26 20 30 78 46 46 3b 20 7d 0a 09 09 44 0) & 0xFF; }...D
38d0: 57 4f 52 44 20 44 69 67 69 74 53 75 62 73 74 69 WORD DigitSubsti
38e0: 74 75 74 65 28 44 57 4f 52 44 20 76 61 6c 29 20 tute(DWORD val)
38f0: 20 20 20 20 20 20 20 20 20 7b 20 5f 62 69 74 66 { _bitf
3900: 69 65 6c 64 32 20 3d 20 63 61 73 74 28 44 57 4f ield2 = cast(DWO
3910: 52 44 29 28 28 5f 62 69 74 66 69 65 6c 64 32 20 RD)((_bitfield2
3920: 26 20 30 78 46 46 46 46 46 46 46 46 46 46 46 46 & 0xFFFFFFFFFFFF
3930: 46 46 30 30 29 20 7c 20 28 76 61 6c 20 3c 3c 20 FF00) | (val <<
3940: 30 29 29 3b 20 72 65 74 75 72 6e 20 76 61 6c 3b 0)); return val;
3950: 20 7d 0a 09 09 44 57 4f 52 44 20 64 77 52 65 73 }...DWORD dwRes
3960: 65 72 76 65 64 3b 0a 09 7d 0a 0a 09 2f 2a 20 54 erved;..}.../* T
3970: 4f 44 4f 3a 20 57 69 6e 64 6f 77 73 20 56 69 73 ODO: Windows Vis
3980: 74 61 20 66 65 61 72 75 72 65 64 20 73 74 72 75 ta fearured stru
3990: 63 74 73 0a 09 4f 50 45 4e 54 59 50 45 5f 46 45 cts..OPENTYPE_FE
39a0: 41 54 55 52 45 5f 52 45 43 4f 52 44 0a 09 4f 50 ATURE_RECORD..OP
39b0: 45 4e 54 59 50 45 5f 54 41 47 0a 09 53 43 52 49 ENTYPE_TAG..SCRI
39c0: 50 54 5f 43 48 41 52 50 52 4f 50 0a 09 53 43 52 PT_CHARPROP..SCR
39d0: 49 50 54 5f 47 4c 59 50 48 50 52 4f 50 0a 09 54 IPT_GLYPHPROP..T
39e0: 45 58 54 52 41 4e 47 45 5f 50 52 4f 50 45 52 54 EXTRANGE_PROPERT
39f0: 49 45 53 0a 09 2a 2f 0a 7d 0a 0a 0a 2f 2a 20 55 IES..*/.}.../* U
3a00: 6e 69 73 63 72 69 62 65 20 46 75 6e 63 74 69 6f niscribe Functio
3a10: 6e 73 20 0a 20 2a 20 68 74 74 70 3a 2f 2f 6d 73 ns . * http://ms
3a20: 64 6e 32 2e 6d 69 63 72 6f 73 6f 66 74 2e 63 6f dn2.microsoft.co
3a30: 6d 2f 6c 69 62 72 61 72 79 2f 6d 73 37 37 36 34 m/library/ms7764
3a40: 36 39 20 2a 2f 0a 65 78 74 65 72 6e 20 28 57 69 69 */.extern (Wi
3a50: 6e 64 6f 77 73 29 0a 7b 0a 09 48 52 45 53 55 4c ndows).{..HRESUL
3a60: 54 20 53 63 72 69 70 74 46 72 65 65 43 61 63 68 T ScriptFreeCach
3a70: 65 28 53 43 52 49 50 54 5f 43 41 43 48 45 2a 29 e(SCRIPT_CACHE*)
3a80: 3b 0a 09 48 52 45 53 55 4c 54 20 53 63 72 69 70 ;..HRESULT Scrip
3a90: 74 49 74 65 6d 69 7a 65 28 43 50 74 72 21 28 57 tItemize(CPtr!(W
3aa0: 43 48 41 52 29 2c 20 69 6e 74 2c 20 69 6e 74 2c CHAR), int, int,
3ab0: 20 43 50 74 72 21 28 53 43 52 49 50 54 5f 43 4f CPtr!(SCRIPT_CO
3ac0: 4e 54 52 4f 4c 29 2c 20 43 50 74 72 21 28 53 43 NTROL), CPtr!(SC
3ad0: 52 49 50 54 5f 53 54 41 54 45 29 2c 20 53 43 52 RIPT_STATE), SCR
3ae0: 49 50 54 5f 49 54 45 4d 2a 2c 20 69 6e 74 2a 29 IPT_ITEM*, int*)
3af0: 3b 0a 09 48 52 45 53 55 4c 54 20 53 63 72 69 70 ;..HRESULT Scrip
3b00: 74 4c 61 79 6f 75 74 28 69 6e 74 2c 20 43 50 74 tLayout(int, CPt
3b10: 72 21 28 42 59 54 45 29 2c 20 69 6e 74 2a 2c 20 r!(BYTE), int*,
3b20: 69 6e 74 2a 29 3b 0a 09 48 52 45 53 55 4c 54 20 int*);..HRESULT
3b30: 53 63 72 69 70 74 53 68 61 70 65 28 48 44 43 2c ScriptShape(HDC,
3b40: 20 53 43 52 49 50 54 5f 43 41 43 48 45 2a 2c 20 SCRIPT_CACHE*,
3b50: 43 50 74 72 21 28 57 43 48 41 52 29 2c 20 69 6e CPtr!(WCHAR), in
3b60: 74 2c 20 69 6e 74 2c 20 53 43 52 49 50 54 5f 41 t, int, SCRIPT_A
3b70: 4e 41 4c 59 53 49 53 2a 2c 20 57 4f 52 44 2a 2c NALYSIS*, WORD*,
3b80: 20 57 4f 52 44 2a 2c 20 53 43 52 49 50 54 5f 56 WORD*, SCRIPT_V
3b90: 49 53 41 54 54 52 2a 2c 20 69 6e 74 2a 29 3b 0a ISATTR*, int*);.
3ba0: 09 48 52 45 53 55 4c 54 20 53 63 72 69 70 74 50 .HRESULT ScriptP
3bb0: 6c 61 63 65 28 48 44 43 2c 20 53 43 52 49 50 54 lace(HDC, SCRIPT
3bc0: 5f 43 41 43 48 45 2a 2c 20 43 50 74 72 21 28 57 _CACHE*, CPtr!(W
3bd0: 4f 52 44 29 2c 20 69 6e 74 2c 20 43 50 74 72 21 ORD), int, CPtr!
3be0: 28 53 43 52 49 50 54 5f 56 49 53 41 54 54 52 29 (SCRIPT_VISATTR)
3bf0: 2c 20 53 43 52 49 50 54 5f 41 4e 41 4c 59 53 49 , SCRIPT_ANALYSI
3c00: 53 2a 2c 20 69 6e 74 2a 2c 20 47 4f 46 46 53 45 S*, int*, GOFFSE
3c10: 54 2a 2c 20 41 42 43 2a 29 3b 0a 09 48 52 45 53 T*, ABC*);..HRES
3c20: 55 4c 54 20 53 63 72 69 70 74 54 65 78 74 4f 75 ULT ScriptTextOu
3c30: 74 28 48 44 43 2c 20 53 43 52 49 50 54 5f 43 41 t(HDC, SCRIPT_CA
3c40: 43 48 45 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 CHE*, int, int,
3c50: 55 49 4e 54 2c 20 43 50 74 72 21 28 52 45 43 54 UINT, CPtr!(RECT
3c60: 29 2c 20 43 50 74 72 21 28 53 43 52 49 50 54 5f ), CPtr!(SCRIPT_
3c70: 41 4e 41 4c 59 53 49 53 29 2c 20 43 50 74 72 21 ANALYSIS), CPtr!
3c80: 28 57 43 48 41 52 29 2c 20 69 6e 74 2c 20 43 50 (WCHAR), int, CP
3c90: 74 72 21 28 57 4f 52 44 29 2c 20 69 6e 74 2c 20 tr!(WORD), int,
3ca0: 43 50 74 72 21 28 69 6e 74 29 2c 20 69 6e 74 2a CPtr!(int), int*
3cb0: 2c 20 43 50 74 72 21 28 47 4f 46 46 53 45 54 29 , CPtr!(GOFFSET)
3cc0: 29 3b 0a 09 48 52 45 53 55 4c 54 20 53 63 72 69 );..HRESULT Scri
3cd0: 70 74 4a 75 73 74 69 66 79 28 43 50 74 72 21 28 ptJustify(CPtr!(
3ce0: 53 43 52 49 50 54 5f 56 49 53 41 54 54 52 29 2c SCRIPT_VISATTR),
3cf0: 20 43 50 74 72 21 28 69 6e 74 29 2c 20 69 6e 74 CPtr!(int), int
3d00: 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a , int, int, int*
3d10: 29 3b 0a 09 48 52 45 53 55 4c 54 20 53 63 72 69 );..HRESULT Scri
3d20: 70 74 42 72 65 61 6b 28 43 50 74 72 21 28 57 43 ptBreak(CPtr!(WC
3d30: 48 41 52 29 2c 20 69 6e 74 2c 20 43 50 74 72 21 HAR), int, CPtr!
3d40: 28 53 43 52 49 50 54 5f 41 4e 41 4c 59 53 49 53 (SCRIPT_ANALYSIS
3d50: 29 2c 20 43 50 74 72 21 28 53 43 52 49 50 54 5f ), CPtr!(SCRIPT_
3d60: 4c 4f 47 41 54 54 52 29 29 3b 0a 09 48 52 45 53 LOGATTR));..HRES
3d70: 55 4c 54 20 53 63 72 69 70 74 43 50 74 6f 58 28 ULT ScriptCPtoX(
3d80: 69 6e 74 2c 20 42 4f 4f 4c 2c 20 69 6e 74 2c 20 int, BOOL, int,
3d90: 69 6e 74 2c 20 43 50 74 72 21 28 57 4f 52 44 29 int, CPtr!(WORD)
3da0: 2c 20 43 50 74 72 21 28 53 43 52 49 50 54 5f 56 , CPtr!(SCRIPT_V
3db0: 49 53 41 54 54 52 29 2c 20 43 50 74 72 21 28 69 ISATTR), CPtr!(i
3dc0: 6e 74 29 2c 20 43 50 74 72 21 28 53 43 52 49 50 nt), CPtr!(SCRIP
3dd0: 54 5f 41 4e 41 4c 59 53 49 53 29 2c 20 69 6e 74 T_ANALYSIS), int
3de0: 2a 29 3b 0a 09 48 52 45 53 55 4c 54 20 53 63 72 *);..HRESULT Scr
3df0: 69 70 74 58 74 6f 43 50 28 69 6e 74 2c 20 69 6e iptXtoCP(int, in
3e00: 74 2c 20 69 6e 74 2c 20 43 50 74 72 21 28 57 4f t, int, CPtr!(WO
3e10: 52 44 29 2c 20 43 50 74 72 21 28 53 43 52 49 50 RD), CPtr!(SCRIP
3e20: 54 5f 56 49 53 41 54 54 52 29 2c 20 43 50 74 72 T_VISATTR), CPtr
3e30: 21 28 69 6e 74 29 2c 20 43 50 74 72 21 28 53 43 !(int), CPtr!(SC
3e40: 52 49 50 54 5f 41 4e 41 4c 59 53 49 53 29 2c 20 RIPT_ANALYSIS),
3e50: 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 09 48 52 int*, int*);..HR
3e60: 45 53 55 4c 54 20 53 63 72 69 70 74 47 65 74 4c ESULT ScriptGetL
3e70: 6f 67 69 63 61 6c 57 69 64 74 68 73 28 43 50 74 ogicalWidths(CPt
3e80: 72 21 28 53 43 52 49 50 54 5f 41 4e 41 4c 59 53 r!(SCRIPT_ANALYS
3e90: 49 53 29 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 43 IS), int, int, C
3ea0: 50 74 72 21 28 69 6e 74 29 2c 20 43 50 74 72 21 Ptr!(int), CPtr!
3eb0: 28 57 4f 52 44 29 2c 20 43 50 74 72 21 28 53 43 (WORD), CPtr!(SC
3ec0: 52 49 50 54 5f 56 49 53 41 54 54 52 29 2c 20 69 RIPT_VISATTR), i
3ed0: 6e 74 2a 29 3b 0a 09 48 52 45 53 55 4c 54 20 53 nt*);..HRESULT S
3ee0: 63 72 69 70 74 41 70 70 6c 79 4c 6f 67 69 63 61 criptApplyLogica
3ef0: 6c 57 69 64 74 68 28 43 50 74 72 21 28 69 6e 74 lWidth(CPtr!(int
3f00: 29 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 43 50 74 ), int, int, CPt
3f10: 72 21 28 57 4f 52 44 29 2c 20 43 50 74 72 21 28 r!(WORD), CPtr!(
3f20: 53 43 52 49 50 54 5f 56 49 53 41 54 54 52 29 2c SCRIPT_VISATTR),
3f30: 20 43 50 74 72 21 28 69 6e 74 29 2c 20 43 50 74 CPtr!(int), CPt
3f40: 72 21 28 53 43 52 49 50 54 5f 41 4e 41 4c 59 53 r!(SCRIPT_ANALYS
3f50: 49 53 29 2c 20 41 42 43 2a 2c 20 69 6e 74 2a 29 IS), ABC*, int*)
3f60: 3b 0a 09 48 52 45 53 55 4c 54 20 53 63 72 69 70 ;..HRESULT Scrip
3f70: 74 47 65 74 43 4d 61 70 28 48 44 43 2c 20 53 43 tGetCMap(HDC, SC
3f80: 52 49 50 54 5f 43 41 43 48 45 2a 2c 20 43 50 74 RIPT_CACHE*, CPt
3f90: 72 21 28 57 43 48 41 52 29 2c 20 69 6e 74 2c 20 r!(WCHAR), int,
3fa0: 44 57 4f 52 44 2c 20 57 4f 52 44 2a 29 3b 0a 09 DWORD, WORD*);..
3fb0: 48 52 45 53 55 4c 54 20 53 63 72 69 70 74 47 65 HRESULT ScriptGe
3fc0: 74 47 6c 79 70 68 41 42 43 57 69 64 74 68 28 48 tGlyphABCWidth(H
3fd0: 44 43 2c 20 53 43 52 49 50 54 5f 43 41 43 48 45 DC, SCRIPT_CACHE
3fe0: 2a 2c 20 57 4f 52 44 2c 20 41 42 43 2a 29 3b 0a *, WORD, ABC*);.
3ff0: 09 48 52 45 53 55 4c 54 20 53 63 72 69 70 74 47 .HRESULT ScriptG
4000: 65 74 50 72 6f 70 65 72 74 69 65 73 28 43 50 74 etProperties(CPt
4010: 72 21 28 53 43 52 49 50 54 5f 50 52 4f 50 45 52 r!(SCRIPT_PROPER
4020: 54 49 45 53 2a 2a 29 2c 20 69 6e 74 2a 29 3b 0a TIES**), int*);.
4030: 09 48 52 45 53 55 4c 54 20 53 63 72 69 70 74 47 .HRESULT ScriptG
4040: 65 74 46 6f 6e 74 50 72 6f 70 65 72 74 69 65 73 etFontProperties
4050: 28 48 44 43 2c 20 53 43 52 49 50 54 5f 43 41 43 (HDC, SCRIPT_CAC
4060: 48 45 2a 2c 20 53 43 52 49 50 54 5f 46 4f 4e 54 HE*, SCRIPT_FONT
4070: 50 52 4f 50 45 52 54 49 45 53 2a 29 3b 0a 09 48 PROPERTIES*);..H
4080: 52 45 53 55 4c 54 20 53 63 72 69 70 74 43 61 63 RESULT ScriptCac
4090: 68 65 47 65 74 48 65 69 67 68 74 28 48 44 43 2c heGetHeight(HDC,
40a0: 20 53 43 52 49 50 54 5f 43 41 43 48 45 2a 2c 20 SCRIPT_CACHE*,
40b0: 69 6e 74 2a 29 3b 0a 09 48 52 45 53 55 4c 54 20 int*);..HRESULT
40c0: 53 63 72 69 70 74 49 73 43 6f 6d 70 6c 65 78 28 ScriptIsComplex(
40d0: 43 50 74 72 21 28 57 43 48 41 52 29 2c 20 69 6e CPtr!(WCHAR), in
40e0: 74 2c 20 44 57 4f 52 44 29 3b 0a 09 48 52 45 53 t, DWORD);..HRES
40f0: 55 4c 54 20 53 63 72 69 70 74 52 65 63 6f 72 64 ULT ScriptRecord
4100: 44 69 67 69 74 53 75 62 73 74 69 74 75 74 69 6f DigitSubstitutio
4110: 6e 28 4c 43 49 44 2c 20 53 43 52 49 50 54 5f 44 n(LCID, SCRIPT_D
4120: 49 47 49 54 53 55 42 53 54 49 54 55 54 45 2a 29 IGITSUBSTITUTE*)
4130: 3b 0a 09 48 52 45 53 55 4c 54 20 53 63 72 69 70 ;..HRESULT Scrip
4140: 74 41 70 70 6c 79 44 69 67 69 74 53 75 62 73 74 tApplyDigitSubst
4150: 69 74 75 74 69 6f 6e 28 43 50 74 72 21 28 53 43 itution(CPtr!(SC
4160: 52 49 50 54 5f 44 49 47 49 54 53 55 42 53 54 49 RIPT_DIGITSUBSTI
4170: 54 55 54 45 29 2c 20 53 43 52 49 50 54 5f 43 4f TUTE), SCRIPT_CO
4180: 4e 54 52 4f 4c 2a 2c 20 53 43 52 49 50 54 5f 53 NTROL*, SCRIPT_S
4190: 54 41 54 45 2a 29 3b 0a 0a 09 2f 2a 20 53 63 72 TATE*);.../* Scr
41a0: 69 70 74 53 74 72 69 6e 67 20 46 75 6e 63 74 69 iptString Functi
41b0: 6f 6e 73 0a 09 20 2a 20 68 74 74 70 3a 2f 2f 6d ons.. * http://m
41c0: 73 64 6e 32 2e 6d 69 63 72 6f 73 6f 66 74 2e 63 sdn2.microsoft.c
41d0: 6f 6d 2f 6c 69 62 72 61 72 79 2f 6d 73 37 37 36 om/library/ms776
41e0: 34 38 35 20 2a 2f 0a 09 48 52 45 53 55 4c 54 20 485 */..HRESULT
41f0: 53 63 72 69 70 74 53 74 72 69 6e 67 41 6e 61 6c ScriptStringAnal
4200: 79 73 65 28 48 44 43 2c 20 43 50 74 72 21 28 76 yse(HDC, CPtr!(v
4210: 6f 69 64 29 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 oid), int, int,
4220: 69 6e 74 2c 20 44 57 4f 52 44 2c 20 69 6e 74 2c int, DWORD, int,
4230: 20 53 43 52 49 50 54 5f 43 4f 4e 54 52 4f 4c 2a SCRIPT_CONTROL*
4240: 2c 20 53 43 52 49 50 54 5f 53 54 41 54 45 2a 2c , SCRIPT_STATE*,
4250: 20 43 50 74 72 21 28 69 6e 74 29 2c 20 53 43 52 CPtr!(int), SCR
4260: 49 50 54 5f 54 41 42 44 45 46 2a 2c 20 43 50 74 IPT_TABDEF*, CPt
4270: 72 21 28 42 59 54 45 29 2c 20 53 43 52 49 50 54 r!(BYTE), SCRIPT
4280: 5f 53 54 52 49 4e 47 5f 41 4e 41 4c 59 53 49 53 _STRING_ANALYSIS
4290: 2a 29 3b 0a 09 48 52 45 53 55 4c 54 20 53 63 72 *);..HRESULT Scr
42a0: 69 70 74 53 74 72 69 6e 67 46 72 65 65 28 53 43 iptStringFree(SC
42b0: 52 49 50 54 5f 53 54 52 49 4e 47 5f 41 4e 41 4c RIPT_STRING_ANAL
42c0: 59 53 49 53 2a 29 3b 0a 09 43 50 74 72 21 28 53 YSIS*);..CPtr!(S
42d0: 49 5a 45 29 20 53 63 72 69 70 74 53 74 72 69 6e IZE) ScriptStrin
42e0: 67 5f 70 53 69 7a 65 28 53 43 52 49 50 54 5f 53 g_pSize(SCRIPT_S
42f0: 54 52 49 4e 47 5f 41 4e 41 4c 59 53 49 53 29 3b TRING_ANALYSIS);
4300: 0a 09 43 50 74 72 21 28 69 6e 74 29 20 53 63 72 ..CPtr!(int) Scr
4310: 69 70 74 53 74 72 69 6e 67 5f 70 63 4f 75 74 43 iptString_pcOutC
4320: 68 61 72 73 28 53 43 52 49 50 54 5f 53 54 52 49 hars(SCRIPT_STRI
4330: 4e 47 5f 41 4e 41 4c 59 53 49 53 29 3b 0a 09 43 NG_ANALYSIS);..C
4340: 50 74 72 21 28 53 43 52 49 50 54 5f 4c 4f 47 41 Ptr!(SCRIPT_LOGA
4350: 54 54 52 29 20 53 63 72 69 70 74 53 74 72 69 6e TTR) ScriptStrin
4360: 67 5f 70 4c 6f 67 41 74 74 72 28 53 43 52 49 50 g_pLogAttr(SCRIP
4370: 54 5f 53 54 52 49 4e 47 5f 41 4e 41 4c 59 53 49 T_STRING_ANALYSI
4380: 53 29 3b 0a 09 48 52 45 53 55 4c 54 20 53 63 72 S);..HRESULT Scr
4390: 69 70 74 53 74 72 69 6e 67 47 65 74 4f 72 64 65 iptStringGetOrde
43a0: 72 28 53 43 52 49 50 54 5f 53 54 52 49 4e 47 5f r(SCRIPT_STRING_
43b0: 41 4e 41 4c 59 53 49 53 2c 20 55 49 4e 54 2a 29 ANALYSIS, UINT*)
43c0: 3b 0a 09 48 52 45 53 55 4c 54 20 53 63 72 69 70 ;..HRESULT Scrip
43d0: 74 53 74 72 69 6e 67 43 50 74 6f 58 28 53 43 52 tStringCPtoX(SCR
43e0: 49 50 54 5f 53 54 52 49 4e 47 5f 41 4e 41 4c 59 IPT_STRING_ANALY
43f0: 53 49 53 2c 20 69 6e 74 2c 20 42 4f 4f 4c 2c 20 SIS, int, BOOL,
4400: 69 6e 74 2a 29 3b 0a 09 48 52 45 53 55 4c 54 20 int*);..HRESULT
4410: 53 63 72 69 70 74 53 74 72 69 6e 67 58 74 6f 43 ScriptStringXtoC
4420: 50 28 53 43 52 49 50 54 5f 53 54 52 49 4e 47 5f P(SCRIPT_STRING_
4430: 41 4e 41 4c 59 53 49 53 2c 20 69 6e 74 2c 20 69 ANALYSIS, int, i
4440: 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 09 48 52 45 nt*, int*);..HRE
4450: 53 55 4c 54 20 53 63 72 69 70 74 53 74 72 69 6e SULT ScriptStrin
4460: 67 47 65 74 4c 6f 67 69 63 61 6c 57 69 64 74 68 gGetLogicalWidth
4470: 73 28 53 43 52 49 50 54 5f 53 54 52 49 4e 47 5f s(SCRIPT_STRING_
4480: 41 4e 41 4c 59 53 49 53 2c 20 69 6e 74 2a 29 3b ANALYSIS, int*);
4490: 0a 09 48 52 45 53 55 4c 54 20 53 63 72 69 70 74 ..HRESULT Script
44a0: 53 74 72 69 6e 67 56 61 6c 69 64 61 74 65 28 53 StringValidate(S
44b0: 43 52 49 50 54 5f 53 54 52 49 4e 47 5f 41 4e 41 CRIPT_STRING_ANA
44c0: 4c 59 53 49 53 29 3b 0a 09 48 52 45 53 55 4c 54 LYSIS);..HRESULT
44d0: 20 53 63 72 69 70 74 53 74 72 69 6e 67 4f 75 74 ScriptStringOut
44e0: 28 53 43 52 49 50 54 5f 53 54 52 49 4e 47 5f 41 (SCRIPT_STRING_A
44f0: 4e 41 4c 59 53 49 53 2c 20 69 6e 74 2c 20 69 6e NALYSIS, int, in
4500: 74 2c 20 55 49 4e 54 2c 20 43 50 74 72 21 28 52 t, UINT, CPtr!(R
4510: 45 43 54 29 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 ECT), int, int,
4520: 42 4f 4f 4c 29 3b 0a 0a 09 2f 2a 20 54 4f 44 4f BOOL);.../* TODO
4530: 3a 20 57 69 6e 64 6f 77 73 20 56 69 73 74 61 20 : Windows Vista
4540: 66 65 61 72 75 72 65 64 20 66 75 6e 63 74 69 6f fearured functio
4550: 6e 73 0a 09 53 63 72 69 70 74 47 65 74 46 6f 6e ns..ScriptGetFon
4560: 74 41 6c 74 65 72 6e 61 74 65 47 6c 79 70 68 73 tAlternateGlyphs
4570: 28 29 0a 09 53 63 72 69 70 74 47 65 74 46 6f 6e ()..ScriptGetFon
4580: 74 46 65 61 74 75 72 65 54 61 67 73 28 29 0a 09 tFeatureTags()..
4590: 53 63 72 69 70 74 47 65 74 46 6f 6e 74 4c 61 6e ScriptGetFontLan
45a0: 67 75 61 67 65 54 61 67 73 28 29 0a 09 53 63 72 guageTags()..Scr
45b0: 69 70 74 47 65 74 46 6f 6e 74 53 63 72 69 70 74 iptGetFontScript
45c0: 54 61 67 73 28 29 0a 09 53 63 72 69 70 74 49 74 Tags()..ScriptIt
45d0: 65 6d 69 7a 65 4f 70 65 6e 54 79 70 65 28 29 0a emizeOpenType().
45e0: 09 53 63 72 69 70 74 50 6c 61 63 65 4f 70 65 6e .ScriptPlaceOpen
45f0: 54 79 70 65 28 29 0a 09 53 63 72 69 70 74 50 6f Type()..ScriptPo
4600: 73 69 74 69 6f 6e 53 69 6e 67 6c 65 47 6c 79 70 sitionSingleGlyp
4610: 68 28 29 0a 09 53 63 72 69 70 74 53 68 61 70 65 h()..ScriptShape
4620: 4f 70 65 6e 54 79 70 65 28 29 0a 09 53 63 72 69 OpenType()..Scri
4630: 70 74 53 75 62 73 74 69 74 75 74 65 53 69 6e 67 ptSubstituteSing
4640: 6c 65 47 6c 79 70 68 28 29 0a 09 2a 2f 0a 7d 0a leGlyph()..*/.}.