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