| 1 |
/* USP - Unicode Complex Script processor |
|---|
| 2 |
* http://msdn2.microsoft.com/library/ms776488 */ |
|---|
| 3 |
|
|---|
| 4 |
|
|---|
| 5 |
module win32.usp10; |
|---|
| 6 |
import win32.windows; |
|---|
| 7 |
|
|---|
| 8 |
|
|---|
| 9 |
|
|---|
| 10 |
/* Uniscribe Enumeration Types |
|---|
| 11 |
* http://msdn2.microsoft.com/library/ms776518 */ |
|---|
| 12 |
|
|---|
| 13 |
enum : WORD { |
|---|
| 14 |
SCRIPT_UNDEFINED = 0, |
|---|
| 15 |
} |
|---|
| 16 |
|
|---|
| 17 |
enum : DWORD { |
|---|
| 18 |
SGCM_RTL = 0x00000001, |
|---|
| 19 |
} |
|---|
| 20 |
|
|---|
| 21 |
enum : DWORD { |
|---|
| 22 |
SSA_PASSWORD = 0x00000001, |
|---|
| 23 |
SSA_TAB = 0x00000002, |
|---|
| 24 |
SSA_CLIP = 0x00000004, |
|---|
| 25 |
SSA_FIT = 0x00000008, |
|---|
| 26 |
SSA_DZWG = 0x00000010, |
|---|
| 27 |
SSA_FALLBACK = 0x00000020, |
|---|
| 28 |
SSA_BREAK = 0x00000040, |
|---|
| 29 |
SSA_GLYPHS = 0x00000080, |
|---|
| 30 |
SSA_RTL = 0x00000100, |
|---|
| 31 |
SSA_GCP = 0x00000200, |
|---|
| 32 |
SSA_HOTKEY = 0x00000400, |
|---|
| 33 |
SSA_METAFILE = 0x00000800, |
|---|
| 34 |
SSA_LINK = 0x00001000, |
|---|
| 35 |
SSA_HIDEHOTKEY = 0x00002000, |
|---|
| 36 |
SSA_HOTKEYONLY = 0x00002400, |
|---|
| 37 |
SSA_FULLMEASURE = 0x04000000, |
|---|
| 38 |
SSA_LPKANSIFALLBACK = 0x08000000, |
|---|
| 39 |
SSA_PIDX = 0x10000000, |
|---|
| 40 |
SSA_LAYOUTRTL = 0x20000000, |
|---|
| 41 |
SSA_DONTGLYPH = 0x40000000, |
|---|
| 42 |
SSA_NOKASHIDA = 0x80000000, |
|---|
| 43 |
} |
|---|
| 44 |
|
|---|
| 45 |
enum : DWORD { |
|---|
| 46 |
SIC_COMPLEX = 1, |
|---|
| 47 |
SIC_ASCIIDIGIT = 2, |
|---|
| 48 |
SIC_NEUTRAL = 4, |
|---|
| 49 |
} |
|---|
| 50 |
|
|---|
| 51 |
enum : DWORD { |
|---|
| 52 |
SCRIPT_DIGITSUBSTITUTE_CONTEXT, |
|---|
| 53 |
SCRIPT_DIGITSUBSTITUTE_NONE, |
|---|
| 54 |
SCRIPT_DIGITSUBSTITUTE_NATIONAL, |
|---|
| 55 |
SCRIPT_DIGITSUBSTITUTE_TRADITIONAL, |
|---|
| 56 |
} |
|---|
| 57 |
|
|---|
| 58 |
enum SCRIPT_JUSTIFY : WORD { |
|---|
| 59 |
SCRIPT_JUSTIFY_NONE, |
|---|
| 60 |
SCRIPT_JUSTIFY_ARABIC_BLANK, |
|---|
| 61 |
SCRIPT_JUSTIFY_CHARACTER, |
|---|
| 62 |
SCRIPT_JUSTIFY_RESERVED1, |
|---|
| 63 |
SCRIPT_JUSTIFY_BLANK, |
|---|
| 64 |
SCRIPT_JUSTIFY_RESERVED2, |
|---|
| 65 |
SCRIPT_JUSTIFY_RESERVED3, |
|---|
| 66 |
SCRIPT_JUSTIFY_ARABIC_NORMAL, |
|---|
| 67 |
SCRIPT_JUSTIFY_ARABIC_KASHIDA, |
|---|
| 68 |
SCRIPT_JUSTIFY_ARABIC_ALEF, |
|---|
| 69 |
SCRIPT_JUSTIFY_ARABIC_HA, |
|---|
| 70 |
SCRIPT_JUSTIFY_ARABIC_RA, |
|---|
| 71 |
SCRIPT_JUSTIFY_ARABIC_BA, |
|---|
| 72 |
SCRIPT_JUSTIFY_ARABIC_BARA, |
|---|
| 73 |
SCRIPT_JUSTIFY_ARABIC_SEEN, |
|---|
| 74 |
SCRIPT_JUSTIFY_ARABIC_SEEN_M, |
|---|
| 75 |
} |
|---|
| 76 |
|
|---|
| 77 |
|
|---|
| 78 |
|
|---|
| 79 |
/* Uniscribe Structures |
|---|
| 80 |
* http://msdn2.microsoft.com/library/ms776479 */ |
|---|
| 81 |
|
|---|
| 82 |
alias void* SCRIPT_CACHE; |
|---|
| 83 |
alias void* SCRIPT_STRING_ANALYSIS; |
|---|
| 84 |
|
|---|
| 85 |
extern (C) |
|---|
| 86 |
{ |
|---|
| 87 |
struct SCRIPT_CONTROL |
|---|
| 88 |
{ |
|---|
| 89 |
private DWORD _bitfield; |
|---|
| 90 |
DWORD uDefaultLanguage() { return (_bitfield >> 0) & 0xFFFF; } |
|---|
| 91 |
DWORD uDefaultLanguage(DWORD val) { _bitfield = cast(DWORD)((_bitfield & 0xFFFFFFFFFFFF0000) | (val << 0)); return val; } |
|---|
| 92 |
DWORD fContextDigits() { return (_bitfield >> 16) & 0x1; } |
|---|
| 93 |
DWORD fContextDigits(DWORD val) { _bitfield = cast(DWORD)((_bitfield & 0xFFFFFFFFFFFEFFFF) | (val << 16)); return val; } |
|---|
| 94 |
DWORD fInvertPreBoundDir() { return (_bitfield >> 17) & 0x1; } |
|---|
| 95 |
DWORD fInvertPreBoundDir(DWORD val) { _bitfield = cast(DWORD)((_bitfield & 0xFFFFFFFFFFFDFFFF) | (val << 17)); return val; } |
|---|
| 96 |
DWORD fInvertPostBoundDir() { return (_bitfield >> 18) & 0x1; } |
|---|
| 97 |
DWORD fInvertPostBoundDir(DWORD val) { _bitfield = cast(DWORD)((_bitfield & 0xFFFFFFFFFFFBFFFF) | (val << 18)); return val; } |
|---|
| 98 |
DWORD fLinkStringBefore() { return (_bitfield >> 19) & 0x1; } |
|---|
| 99 |
DWORD fLinkStringBefore(DWORD val) { _bitfield = cast(DWORD)((_bitfield & 0xFFFFFFFFFFF7FFFF) | (val << 19)); return val; } |
|---|
| 100 |
DWORD fLinkStringAfter() { return (_bitfield >> 20) & 0x1; } |
|---|
| 101 |
DWORD fLinkStringAfter(DWORD val) { _bitfield = cast(DWORD)((_bitfield & 0xFFFFFFFFFFEFFFFF) | (val << 20)); return val; } |
|---|
| 102 |
DWORD fNeutralOverride() { return (_bitfield >> 21) & 0x1; } |
|---|
| 103 |
DWORD fNeutralOverride(DWORD val) { _bitfield = cast(DWORD)((_bitfield & 0xFFFFFFFFFFDFFFFF) | (val << 21)); return val; } |
|---|
| 104 |
DWORD fNumericOverride() { return (_bitfield >> 22) & 0x1; } |
|---|
| 105 |
DWORD fNumericOverride(DWORD val) { _bitfield = cast(DWORD)((_bitfield & 0xFFFFFFFFFFBFFFFF) | (val << 22)); return val; } |
|---|
| 106 |
DWORD fLegacyBidiClass() { return (_bitfield >> 23) & 0x1; } |
|---|
| 107 |
DWORD fLegacyBidiClass(DWORD val) { _bitfield = cast(DWORD)((_bitfield & 0xFFFFFFFFFF7FFFFF) | (val << 23)); return val; } |
|---|
| 108 |
DWORD fReserved() { return (_bitfield >> 24) & 0xFF; } |
|---|
| 109 |
DWORD fReserved(DWORD val) { _bitfield = cast(DWORD)((_bitfield & 0xFFFFFFFF00FFFFFF) | (val << 24)); return val; } |
|---|
| 110 |
} |
|---|
| 111 |
|
|---|
| 112 |
struct SCRIPT_STATE |
|---|
| 113 |
{ |
|---|
| 114 |
private WORD _bitfield; |
|---|
| 115 |
WORD uBidiLevel() { return cast(WORD)((_bitfield >> 0) & 0x1F); } |
|---|
| 116 |
WORD uBidiLevel(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFFFE0) | (val << 0)); return val; } |
|---|
| 117 |
WORD fOverrideDirection() { return cast(WORD)((_bitfield >> 5) & 0x1); } |
|---|
| 118 |
WORD fOverrideDirection(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFFFDF) | (val << 5)); return val; } |
|---|
| 119 |
WORD fInhibitSymSwap() { return cast(WORD)((_bitfield >> 6) & 0x1); } |
|---|
| 120 |
WORD fInhibitSymSwap(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFFFBF) | (val << 6)); return val; } |
|---|
| 121 |
WORD fCharShape() { return cast(WORD)((_bitfield >> 7) & 0x1); } |
|---|
| 122 |
WORD fCharShape(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFFF7F) | (val << 7)); return val; } |
|---|
| 123 |
WORD fDigitSubstitute() { return cast(WORD)((_bitfield >> 8) & 0x1); } |
|---|
| 124 |
WORD fDigitSubstitute(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFFEFF) | (val << 8)); return val; } |
|---|
| 125 |
WORD fInhibitLigate() { return cast(WORD)((_bitfield >> 9) & 0x1); } |
|---|
| 126 |
WORD fInhibitLigate(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFFDFF) | (val << 9)); return val; } |
|---|
| 127 |
WORD fDisplayZWG() { return cast(WORD)((_bitfield >> 10) & 0x1); } |
|---|
| 128 |
WORD fDisplayZWG(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFFBFF) | (val << 10)); return val; } |
|---|
| 129 |
WORD fArabicNumContext() { return cast(WORD)((_bitfield >> 11) & 0x1); } |
|---|
| 130 |
WORD fArabicNumContext(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFF7FF) | (val << 11)); return val; } |
|---|
| 131 |
WORD fGcpClusters() { return cast(WORD)((_bitfield >> 12) & 0x1); } |
|---|
| 132 |
WORD fGcpClusters(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFEFFF) | (val << 12)); return val; } |
|---|
| 133 |
WORD fReserved() { return cast(WORD)((_bitfield >> 13) & 0x1); } |
|---|
| 134 |
WORD fReserved(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFDFFF) | (val << 13)); return val; } |
|---|
| 135 |
WORD fEngineReserved() { return cast(WORD)((_bitfield >> 14) & 0x3); } |
|---|
| 136 |
WORD fEngineReserved(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFF3FFF) | (val << 14)); return val; } |
|---|
| 137 |
} |
|---|
| 138 |
|
|---|
| 139 |
|
|---|
| 140 |
struct SCRIPT_ANALYSIS |
|---|
| 141 |
{ |
|---|
| 142 |
private WORD _bitfield; |
|---|
| 143 |
WORD eScript() { return cast(WORD)((_bitfield >> 0) & 0x3FF); } |
|---|
| 144 |
WORD eScript(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFFC00) | (val << 0)); return val; } |
|---|
| 145 |
WORD fRTL() { return cast(WORD)((_bitfield >> 10) & 0x1); } |
|---|
| 146 |
WORD fRTL(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFFBFF) | (val << 10)); return val; } |
|---|
| 147 |
WORD fLayoutRTL() { return cast(WORD)((_bitfield >> 11) & 0x1); } |
|---|
| 148 |
WORD fLayoutRTL(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFF7FF) | (val << 11)); return val; } |
|---|
| 149 |
WORD fLinkBefore() { return cast(WORD)((_bitfield >> 12) & 0x1); } |
|---|
| 150 |
WORD fLinkBefore(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFEFFF) | (val << 12)); return val; } |
|---|
| 151 |
WORD fLinkAfter() { return cast(WORD)((_bitfield >> 13) & 0x1); } |
|---|
| 152 |
WORD fLinkAfter(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFDFFF) | (val << 13)); return val; } |
|---|
| 153 |
WORD fLogicalOrder() { return cast(WORD)((_bitfield >> 14) & 0x1); } |
|---|
| 154 |
WORD fLogicalOrder(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFBFFF) | (val << 14)); return val; } |
|---|
| 155 |
WORD fNoGlyphIndex() { return cast(WORD)((_bitfield >> 15) & 0x1); } |
|---|
| 156 |
WORD fNoGlyphIndex(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFF7FFF) | (val << 15)); return val; } |
|---|
| 157 |
SCRIPT_STATE s; |
|---|
| 158 |
} |
|---|
| 159 |
|
|---|
| 160 |
|
|---|
| 161 |
struct SCRIPT_ITEM |
|---|
| 162 |
{ |
|---|
| 163 |
int iCharPos; |
|---|
| 164 |
SCRIPT_ANALYSIS a; |
|---|
| 165 |
} |
|---|
| 166 |
|
|---|
| 167 |
struct SCRIPT_VISATTR |
|---|
| 168 |
{ |
|---|
| 169 |
private WORD _bitfield; |
|---|
| 170 |
WORD uJustification() { return cast(WORD)((_bitfield >> 0) & 0xF); } |
|---|
| 171 |
WORD uJustification(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFFFF0) | (val << 0)); return val; } |
|---|
| 172 |
WORD fClusterStart() { return cast(WORD)((_bitfield >> 4) & 0x1); } |
|---|
| 173 |
WORD fClusterStart(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFFFEF) | (val << 4)); return val; } |
|---|
| 174 |
WORD fDiacritic() { return cast(WORD)((_bitfield >> 5) & 0x1); } |
|---|
| 175 |
WORD fDiacritic(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFFFDF) | (val << 5)); return val; } |
|---|
| 176 |
WORD fZeroWidth() { return cast(WORD)((_bitfield >> 6) & 0x1); } |
|---|
| 177 |
WORD fZeroWidth(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFFFBF) | (val << 6)); return val; } |
|---|
| 178 |
WORD fReserved() { return cast(WORD)((_bitfield >> 7) & 0x1); } |
|---|
| 179 |
WORD fReserved(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFFF7F) | (val << 7)); return val; } |
|---|
| 180 |
WORD fShapeReserved() { return cast(WORD)((_bitfield >> 8) & 0xFF); } |
|---|
| 181 |
WORD fShapeReserved(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFF00FF) | (val << 8)); return val; } |
|---|
| 182 |
} |
|---|
| 183 |
|
|---|
| 184 |
struct GOFFSET |
|---|
| 185 |
{ |
|---|
| 186 |
LONG du; |
|---|
| 187 |
LONG dv; |
|---|
| 188 |
} |
|---|
| 189 |
|
|---|
| 190 |
struct SCRIPT_LOGATTR |
|---|
| 191 |
{ |
|---|
| 192 |
BYTE _bitfield; |
|---|
| 193 |
BYTE fSoftBreak() { return cast(BYTE)((_bitfield >> 0) & 0x1); } |
|---|
| 194 |
BYTE fSoftBreak(BYTE val) { _bitfield = cast(BYTE)((_bitfield & 0xFFFFFFFFFFFFFFFE) | (val << 0)); return val; } |
|---|
| 195 |
BYTE fWhiteSpace() { return cast(BYTE)((_bitfield >> 1) & 0x1); } |
|---|
| 196 |
BYTE fWhiteSpace(BYTE val) { _bitfield = cast(BYTE)((_bitfield & 0xFFFFFFFFFFFFFFFD) | (val << 1)); return val; } |
|---|
| 197 |
BYTE fCharStop() { return cast(BYTE)((_bitfield >> 2) & 0x1); } |
|---|
| 198 |
BYTE fCharStop(BYTE val) { _bitfield = cast(BYTE)((_bitfield & 0xFFFFFFFFFFFFFFFB) | (val << 2)); return val; } |
|---|
| 199 |
BYTE fWordStop() { return cast(BYTE)((_bitfield >> 3) & 0x1); } |
|---|
| 200 |
BYTE fWordStop(BYTE val) { _bitfield = cast(BYTE)((_bitfield & 0xFFFFFFFFFFFFFFF7) | (val << 3)); return val; } |
|---|
| 201 |
BYTE fInvalid() { return cast(BYTE)((_bitfield >> 4) & 0x1); } |
|---|
| 202 |
BYTE fInvalid(BYTE val) { _bitfield = cast(BYTE)((_bitfield & 0xFFFFFFFFFFFFFFEF) | (val << 4)); return val; } |
|---|
| 203 |
BYTE fReserved() { return cast(BYTE)((_bitfield >> 5) & 0x7); } |
|---|
| 204 |
BYTE fReserved(BYTE val) { _bitfield = cast(BYTE)((_bitfield & 0xFFFFFFFFFFFFFF1F) | (val << 5)); return val; } |
|---|
| 205 |
} |
|---|
| 206 |
|
|---|
| 207 |
struct SCRIPT_PROPERTIES |
|---|
| 208 |
{ |
|---|
| 209 |
private DWORD _bitfield1; |
|---|
| 210 |
DWORD langid() { return (_bitfield1 >> 0) & 0xFFFF; } |
|---|
| 211 |
DWORD langid(DWORD val) { _bitfield1 = cast(DWORD)((_bitfield1 & 0xFFFFFFFFFFFF0000) | (val << 0)); return val; } |
|---|
| 212 |
DWORD fNumeric() { return (_bitfield1 >> 16) & 0x1; } |
|---|
| 213 |
DWORD fNumeric(DWORD val) { _bitfield1 = cast(DWORD)((_bitfield1 & 0xFFFFFFFFFFFEFFFF) | (val << 16)); return val; } |
|---|
| 214 |
DWORD fComplex() { return (_bitfield1 >> 17) & 0x1; } |
|---|
| 215 |
DWORD fComplex(DWORD val) { _bitfield1 = cast(DWORD)((_bitfield1 & 0xFFFFFFFFFFFDFFFF) | (val << 17)); return val; } |
|---|
| 216 |
DWORD fNeedsWordBreaking() { return (_bitfield1 >> 18) & 0x1; } |
|---|
| 217 |
DWORD fNeedsWordBreaking(DWORD val) { _bitfield1 = cast(DWORD)((_bitfield1 & 0xFFFFFFFFFFFBFFFF) | (val << 18)); return val; } |
|---|
| 218 |
DWORD fNeedsCaretInfo() { return (_bitfield1 >> 19) & 0x1; } |
|---|
| 219 |
DWORD fNeedsCaretInfo(DWORD val) { _bitfield1 = cast(DWORD)((_bitfield1 & 0xFFFFFFFFFFF7FFFF) | (val << 19)); return val; } |
|---|
| 220 |
DWORD bCharSet() { return (_bitfield1 >> 20) & 0xFF; } |
|---|
| 221 |
DWORD bCharSet(DWORD val) { _bitfield1 = cast(DWORD)((_bitfield1 & 0xFFFFFFFFF00FFFFF) | (val << 20)); return val; } |
|---|
| 222 |
DWORD fControl() { return (_bitfield1 >> 28) & 0x1; } |
|---|
| 223 |
DWORD fControl(DWORD val) { _bitfield1 = cast(DWORD)((_bitfield1 & 0xFFFFFFFFEFFFFFFF) | (val << 28)); return val; } |
|---|
| 224 |
DWORD fPrivateUseArea() { return (_bitfield1 >> 29) & 0x1; } |
|---|
| 225 |
DWORD fPrivateUseArea(DWORD val) { _bitfield1 = cast(DWORD)((_bitfield1 & 0xFFFFFFFFDFFFFFFF) | (val << 29)); return val; } |
|---|
| 226 |
DWORD fNeedsCharacterJustify() { return (_bitfield1 >> 30) & 0x1; } |
|---|
| 227 |
DWORD fNeedsCharacterJustify(DWORD val) { _bitfield1 = cast(DWORD)((_bitfield1 & 0xFFFFFFFFBFFFFFFF) | (val << 30)); return val; } |
|---|
| 228 |
DWORD fInvalidGlyph() { return (_bitfield1 >> 31) & 0x1; } |
|---|
| 229 |
DWORD fInvalidGlyph(DWORD val) { _bitfield1 = cast(DWORD)((_bitfield1 & 0xFFFFFFFF7FFFFFFF) | (val << 31)); return val; } |
|---|
| 230 |
private DWORD _bitfield2; |
|---|
| 231 |
DWORD fInvalidLogAttr() { return (_bitfield2 >> 0) & 0x1; } |
|---|
| 232 |
DWORD fInvalidLogAttr(DWORD val) { _bitfield2 = cast(DWORD)((_bitfield2 & 0xFFFFFFFFFFFFFFFE) | (val << 0)); return val; } |
|---|
| 233 |
DWORD fCDM() { return (_bitfield2 >> 1) & 0x1; } |
|---|
| 234 |
DWORD fCDM(DWORD val) { _bitfield2 = cast(DWORD)((_bitfield2 & 0xFFFFFFFFFFFFFFFD) | (val << 1)); return val; } |
|---|
| 235 |
DWORD fAmbiguousCharSet() { return (_bitfield2 >> 2) & 0x1; } |
|---|
| 236 |
DWORD fAmbiguousCharSet(DWORD val) { _bitfield2 = cast(DWORD)((_bitfield2 & 0xFFFFFFFFFFFFFFFB) | (val << 2)); return val; } |
|---|
| 237 |
DWORD fClusterSizeVaries() { return (_bitfield2 >> 3) & 0x1; } |
|---|
| 238 |
DWORD fClusterSizeVaries(DWORD val) { _bitfield2 = cast(DWORD)((_bitfield2 & 0xFFFFFFFFFFFFFFF7) | (val << 3)); return val; } |
|---|
| 239 |
DWORD fRejectInvalid() { return (_bitfield2 >> 4) & 0x1; } |
|---|
| 240 |
DWORD fRejectInvalid(DWORD val) { _bitfield2 = cast(DWORD)((_bitfield2 & 0xFFFFFFFFFFFFFFEF) | (val << 4)); return val; } |
|---|
| 241 |
} |
|---|
| 242 |
|
|---|
| 243 |
struct SCRIPT_FONTPROPERTIES |
|---|
| 244 |
{ |
|---|
| 245 |
int cBytes = SCRIPT_FONTPROPERTIES.sizeof; |
|---|
| 246 |
WORD wgBlank; |
|---|
| 247 |
WORD wgDefault; |
|---|
| 248 |
WORD wgInvalid; |
|---|
| 249 |
WORD wgKashida; |
|---|
| 250 |
int iKashidaWidth; |
|---|
| 251 |
} |
|---|
| 252 |
|
|---|
| 253 |
struct SCRIPT_TABDEF |
|---|
| 254 |
{ |
|---|
| 255 |
int cTabStops; |
|---|
| 256 |
int iScale; |
|---|
| 257 |
int* pTabStops; |
|---|
| 258 |
int iTabOrigin; |
|---|
| 259 |
} |
|---|
| 260 |
|
|---|
| 261 |
struct SCRIPT_DIGITSUBSTITUTE |
|---|
| 262 |
{ |
|---|
| 263 |
private DWORD _bitfield1; |
|---|
| 264 |
DWORD NationalDigitLanguage() { return (_bitfield1 >> 0) & 0xFFFF; } |
|---|
| 265 |
DWORD NationalDigitLanguage(DWORD val) { _bitfield1 = cast(DWORD)((_bitfield1 & 0xFFFFFFFFFFFF0000) | (val << 0)); return val; } |
|---|
| 266 |
DWORD TraditionalDigitLanguage() { return (_bitfield1 >> 16) & 0xFFFF; } |
|---|
| 267 |
DWORD TraditionalDigitLanguage(DWORD val) { _bitfield1 = cast(DWORD)((_bitfield1 & 0xFFFFFFFF0000FFFF) | (val << 16)); return val; } |
|---|
| 268 |
private DWORD _bitfield2; |
|---|
| 269 |
DWORD DigitSubstitute() { return (_bitfield2 >> 0) & 0xFF; } |
|---|
| 270 |
DWORD DigitSubstitute(DWORD val) { _bitfield2 = cast(DWORD)((_bitfield2 & 0xFFFFFFFFFFFFFF00) | (val << 0)); return val; } |
|---|
| 271 |
DWORD dwReserved; |
|---|
| 272 |
} |
|---|
| 273 |
|
|---|
| 274 |
/* TODO: Windows Vista fearured structs |
|---|
| 275 |
OPENTYPE_FEATURE_RECORD |
|---|
| 276 |
OPENTYPE_TAG |
|---|
| 277 |
SCRIPT_CHARPROP |
|---|
| 278 |
SCRIPT_GLYPHPROP |
|---|
| 279 |
TEXTRANGE_PROPERTIES |
|---|
| 280 |
*/ |
|---|
| 281 |
} |
|---|
| 282 |
|
|---|
| 283 |
|
|---|
| 284 |
/* Uniscribe Functions |
|---|
| 285 |
* http://msdn2.microsoft.com/library/ms776469 */ |
|---|
| 286 |
extern (Windows) |
|---|
| 287 |
{ |
|---|
| 288 |
HRESULT ScriptFreeCache(SCRIPT_CACHE*); |
|---|
| 289 |
HRESULT ScriptItemize(CPtr!(WCHAR), int, int, CPtr!(SCRIPT_CONTROL), CPtr!(SCRIPT_STATE), SCRIPT_ITEM*, int*); |
|---|
| 290 |
HRESULT ScriptLayout(int, CPtr!(BYTE), int*, int*); |
|---|
| 291 |
HRESULT ScriptShape(HDC, SCRIPT_CACHE*, CPtr!(WCHAR), int, int, SCRIPT_ANALYSIS*, WORD*, WORD*, SCRIPT_VISATTR*, int*); |
|---|
| 292 |
HRESULT ScriptPlace(HDC, SCRIPT_CACHE*, CPtr!(WORD), int, CPtr!(SCRIPT_VISATTR), SCRIPT_ANALYSIS*, int*, GOFFSET*, ABC*); |
|---|
| 293 |
HRESULT ScriptTextOut(HDC, SCRIPT_CACHE*, int, int, UINT, CPtr!(RECT), CPtr!(SCRIPT_ANALYSIS), CPtr!(WCHAR), int, CPtr!(WORD), int, CPtr!(int), int*, CPtr!(GOFFSET)); |
|---|
| 294 |
HRESULT ScriptJustify(CPtr!(SCRIPT_VISATTR), CPtr!(int), int, int, int, int*); |
|---|
| 295 |
HRESULT ScriptBreak(CPtr!(WCHAR), int, CPtr!(SCRIPT_ANALYSIS), CPtr!(SCRIPT_LOGATTR)); |
|---|
| 296 |
HRESULT ScriptCPtoX(int, BOOL, int, int, CPtr!(WORD), CPtr!(SCRIPT_VISATTR), CPtr!(int), CPtr!(SCRIPT_ANALYSIS), int*); |
|---|
| 297 |
HRESULT ScriptXtoCP(int, int, int, CPtr!(WORD), CPtr!(SCRIPT_VISATTR), CPtr!(int), CPtr!(SCRIPT_ANALYSIS), int*, int*); |
|---|
| 298 |
HRESULT ScriptGetLogicalWidths(CPtr!(SCRIPT_ANALYSIS), int, int, CPtr!(int), CPtr!(WORD), CPtr!(SCRIPT_VISATTR), int*); |
|---|
| 299 |
HRESULT ScriptApplyLogicalWidth(CPtr!(int), int, int, CPtr!(WORD), CPtr!(SCRIPT_VISATTR), CPtr!(int), CPtr!(SCRIPT_ANALYSIS), ABC*, int*); |
|---|
| 300 |
HRESULT ScriptGetCMap(HDC, SCRIPT_CACHE*, CPtr!(WCHAR), int, DWORD, WORD*); |
|---|
| 301 |
HRESULT ScriptGetGlyphABCWidth(HDC, SCRIPT_CACHE*, WORD, ABC*); |
|---|
| 302 |
HRESULT ScriptGetProperties(CPtr!(SCRIPT_PROPERTIES**), int*); |
|---|
| 303 |
HRESULT ScriptGetFontProperties(HDC, SCRIPT_CACHE*, SCRIPT_FONTPROPERTIES*); |
|---|
| 304 |
HRESULT ScriptCacheGetHeight(HDC, SCRIPT_CACHE*, int*); |
|---|
| 305 |
HRESULT ScriptIsComplex(CPtr!(WCHAR), int, DWORD); |
|---|
| 306 |
HRESULT ScriptRecordDigitSubstitution(LCID, SCRIPT_DIGITSUBSTITUTE*); |
|---|
| 307 |
HRESULT ScriptApplyDigitSubstitution(CPtr!(SCRIPT_DIGITSUBSTITUTE), SCRIPT_CONTROL*, SCRIPT_STATE*); |
|---|
| 308 |
|
|---|
| 309 |
/* ScriptString Functions |
|---|
| 310 |
* http://msdn2.microsoft.com/library/ms776485 */ |
|---|
| 311 |
HRESULT ScriptStringAnalyse(HDC, CPtr!(void), int, int, int, DWORD, int, SCRIPT_CONTROL*, SCRIPT_STATE*, CPtr!(int), SCRIPT_TABDEF*, CPtr!(BYTE), SCRIPT_STRING_ANALYSIS*); |
|---|
| 312 |
HRESULT ScriptStringFree(SCRIPT_STRING_ANALYSIS*); |
|---|
| 313 |
CPtr!(SIZE) ScriptString_pSize(SCRIPT_STRING_ANALYSIS); |
|---|
| 314 |
CPtr!(int) ScriptString_pcOutChars(SCRIPT_STRING_ANALYSIS); |
|---|
| 315 |
CPtr!(SCRIPT_LOGATTR) ScriptString_pLogAttr(SCRIPT_STRING_ANALYSIS); |
|---|
| 316 |
HRESULT ScriptStringGetOrder(SCRIPT_STRING_ANALYSIS, UINT*); |
|---|
| 317 |
HRESULT ScriptStringCPtoX(SCRIPT_STRING_ANALYSIS, int, BOOL, int*); |
|---|
| 318 |
HRESULT ScriptStringXtoCP(SCRIPT_STRING_ANALYSIS, int, int*, int*); |
|---|
| 319 |
HRESULT ScriptStringGetLogicalWidths(SCRIPT_STRING_ANALYSIS, int*); |
|---|
| 320 |
HRESULT ScriptStringValidate(SCRIPT_STRING_ANALYSIS); |
|---|
| 321 |
HRESULT ScriptStringOut(SCRIPT_STRING_ANALYSIS, int, int, UINT, CPtr!(RECT), int, int, BOOL); |
|---|
| 322 |
|
|---|
| 323 |
/* TODO: Windows Vista fearured functions |
|---|
| 324 |
ScriptGetFontAlternateGlyphs() |
|---|
| 325 |
ScriptGetFontFeatureTags() |
|---|
| 326 |
ScriptGetFontLanguageTags() |
|---|
| 327 |
ScriptGetFontScriptTags() |
|---|
| 328 |
ScriptItemizeOpenType() |
|---|
| 329 |
ScriptPlaceOpenType() |
|---|
| 330 |
ScriptPositionSingleGlyph() |
|---|
| 331 |
ScriptShapeOpenType() |
|---|
| 332 |
ScriptSubstituteSingleGlyph() |
|---|
| 333 |
*/ |
|---|
| 334 |
} |
|---|