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 ()...*/..}..