1use ctypes::{c_int, c_long, c_void};
8use shared::minwindef::{BOOL, BYTE, DWORD, UINT, ULONG, WORD};
9use shared::ntdef::LCID;
10use shared::windef::{HDC, RECT, SIZE};
11use shared::winerror::{FACILITY_ITF, SEVERITY_ERROR};
12use um::wingdi::ABC;
13use um::winnt::{HRESULT, LONG, WCHAR};
14pub const SCRIPT_UNDEFINED: WORD = 0;
15pub const USP_E_SCRIPT_NOT_IN_FONT: HRESULT = MAKE_HRESULT!(SEVERITY_ERROR, FACILITY_ITF, 0x200);
16DECLARE_HANDLE!{SCRIPT_CACHE, SCRIPT_CACHE__}
17extern "system" {
18 pub fn ScriptFreeCache(
19 psc: *mut SCRIPT_CACHE,
20 ) -> HRESULT;
21}
22STRUCT!{struct SCRIPT_CONTROL {
23 bit_fields: DWORD,
24}}
25BITFIELD!{SCRIPT_CONTROL bit_fields: DWORD [
26 uDefaultLanguage set_uDefaultLanguage[0..16],
27 fContextDigits set_fContextDigits[16..17],
28 fInvertPreBoundDir set_fInvertPreBoundDir[17..18],
29 fInvertPostBoundDir set_fInvertPostBoundDir[18..19],
30 fLinkStringBefore set_fLinkStringBefore[19..20],
31 fLinkStringAfter set_fLinkStringAfter[20..21],
32 fNeutralOverride set_fNeutralOverride[21..22],
33 fNumericOverride set_fNumericOverride[22..23],
34 fLegacyBidiClass set_fLegacyBidiClass[23..24],
35 fMergeNeutralItems set_fMergeNeutralItems[24..25],
36 fReserved set_fReserved[25..32],
37]}
38STRUCT!{struct SCRIPT_STATE {
39 bit_fields: WORD,
40}}
41BITFIELD!{SCRIPT_STATE bit_fields: WORD [
42 uBidiLevel set_uBidiLevel[0..5],
43 fOverrideDirection set_fOverrideDirection[5..6],
44 fInhibitSymSwap set_fInhibitSymSwap[6..7],
45 fCharShape set_fCharShape[7..8],
46 fDigitSubstitute set_fDigitSubstitute[8..9],
47 fInhibitLigate set_fInhibitLigate[9..10],
48 fDisplayZWG set_fDisplayZWG[10..11],
49 fArabicNumContext set_fArabicNumContext[11..12],
50 fGcpClusters set_fGcpClusters[12..13],
51 fReserved set_fReserved[13..14],
52 fEngineReserved set_fEngineReserved[14..16],
53]}
54STRUCT!{struct SCRIPT_ANALYSIS {
55 bit_fields: WORD,
56 s: SCRIPT_STATE,
57}}
58BITFIELD!{SCRIPT_ANALYSIS bit_fields: WORD [
59 eScript set_eScript[0..10],
60 fRTL set_fRTL[10..11],
61 fLayoutRTL set_fLayoutRTL[11..12],
62 fLinkBefore set_fLinkBefore[12..13],
63 fLinkAfter set_fLinkAfter[13..14],
64 fLogicalOrder set_fLogicalOrder[14..15],
65 fNoGlyphIndex set_fNoGlyphIndex[15..16],
66]}
67STRUCT!{struct SCRIPT_ITEM {
68 iCharPos: c_int,
69 a: SCRIPT_ANALYSIS,
70}}
71extern "system" {
72 pub fn ScriptItemize(
73 pwcInChars: *const WCHAR,
74 cInChars: c_int,
75 cMaxItems: c_int,
76 psControl: *const SCRIPT_CONTROL,
77 psState: *const SCRIPT_STATE,
78 pItems: *mut SCRIPT_ITEM,
79 pcItems: *mut c_int,
80 ) -> HRESULT;
81 pub fn ScriptLayout(
82 cRuns: c_int,
83 pbLevel: *const BYTE,
84 piVisualToLogical: *mut c_int,
85 piLogicalToVisual: *mut c_int,
86 ) -> HRESULT;
87}
88pub const SCRIPT_JUSTIFY_NONE: WORD = 0;
89pub const SCRIPT_JUSTIFY_ARABIC_BLANK: WORD = 1;
90pub const SCRIPT_JUSTIFY_CHARACTER: WORD = 2;
91pub const SCRIPT_JUSTIFY_RESERVED1: WORD = 3;
92pub const SCRIPT_JUSTIFY_BLANK: WORD = 4;
93pub const SCRIPT_JUSTIFY_RESERVED2: WORD = 5;
94pub const SCRIPT_JUSTIFY_RESERVED3: WORD = 6;
95pub const SCRIPT_JUSTIFY_ARABIC_NORMAL: WORD = 7;
96pub const SCRIPT_JUSTIFY_ARABIC_KASHIDA: WORD = 8;
97pub const SCRIPT_JUSTIFY_ARABIC_ALEF: WORD = 9;
98pub const SCRIPT_JUSTIFY_ARABIC_HA: WORD = 10;
99pub const SCRIPT_JUSTIFY_ARABIC_RA: WORD = 11;
100pub const SCRIPT_JUSTIFY_ARABIC_BA: WORD = 12;
101pub const SCRIPT_JUSTIFY_ARABIC_BARA: WORD = 13;
102pub const SCRIPT_JUSTIFY_ARABIC_SEEN: WORD = 14;
103pub const SCRIPT_JUSTIFY_ARABIC_SEEN_M: WORD = 15;
104STRUCT!{struct SCRIPT_VISATTR {
105 bit_fields: WORD,
106}}
107BITFIELD!{SCRIPT_VISATTR bit_fields: WORD [
108 uJustification set_uJustification[0..4],
109 fClusterStart set_fClusterStart[4..5],
110 fDiacritic set_fDiacritic[5..6],
111 fZeroWidth set_fZeroWidth[6..7],
112 fReserved set_fReserved[7..8],
113 fShapeReserved set_fShapeReserved[8..16],
114]}
115extern "system" {
116 pub fn ScriptShape(
117 hdc: HDC,
118 psc: *mut SCRIPT_CACHE,
119 pwcChars: *const WCHAR,
120 cChars: c_int,
121 cMaxGlyphs: c_int,
122 psa: *mut SCRIPT_ANALYSIS,
123 pwOutGlyphs: *mut WORD,
124 pwLogClust: *mut WORD,
125 psva: *mut SCRIPT_VISATTR,
126 pcGlyphs: *mut c_int,
127 ) -> HRESULT;
128}
129STRUCT!{struct GOFFSET {
130 du: LONG,
131 dv: LONG,
132}}
133extern "system" {
134 pub fn ScriptPlace(
135 hdc: HDC,
136 psc: *mut SCRIPT_CACHE,
137 pwGlyphs: *const WORD,
138 cGlyphs: c_int,
139 psva: *const SCRIPT_VISATTR,
140 psa: *mut SCRIPT_ANALYSIS,
141 piAdvance: *mut c_int,
142 pGoffset: *mut GOFFSET,
143 pABC: *mut ABC,
144 ) -> HRESULT;
145 pub fn ScriptTextOut(
146 hdc: HDC,
147 psc: *mut SCRIPT_CACHE,
148 x: c_int,
149 y: c_int,
150 fuOptions: UINT,
151 lprc: *const RECT,
152 psa: *const SCRIPT_ANALYSIS,
153 pwcReserved: *const WCHAR,
154 iReserved: c_int,
155 pwGlyphs: *const WORD,
156 cGlyphs: c_int,
157 piAdvance: *const c_int,
158 piJustify: *const c_int,
159 pGoffset: *const GOFFSET,
160 ) -> HRESULT;
161 pub fn ScriptJustify(
162 psva: *const SCRIPT_VISATTR,
163 piAdvance: *const c_int,
164 cGlyphs: c_int,
165 iDx: c_int,
166 iMinKashida: c_int,
167 piJustify: *mut c_int,
168 ) -> HRESULT;
169}
170STRUCT!{struct SCRIPT_LOGATTR {
171 bit_fields: BYTE,
172}}
173BITFIELD!{SCRIPT_LOGATTR bit_fields: BYTE [
174 fSoftBreak set_fSoftBreak[0..1],
175 fWhiteSpace set_fWhiteSpace[1..2],
176 fCharStop set_fCharStop[2..3],
177 fWordStop set_fWordStop[3..4],
178 fInvalid set_fInvalid[4..5],
179 fReserved set_fReserved[5..8],
180]}
181extern "system" {
182 pub fn ScriptBreak(
183 pwcChars: *const WCHAR,
184 cChars: c_int,
185 psa: *const SCRIPT_ANALYSIS,
186 psla: *mut SCRIPT_LOGATTR,
187 ) -> HRESULT;
188 pub fn ScriptCPtoX(
189 iCP: c_int,
190 fTrailing: BOOL,
191 cChars: c_int,
192 cGlyphs: c_int,
193 pwLogClust: *const WORD,
194 psva: *const SCRIPT_VISATTR,
195 piAdvance: *const c_int,
196 psa: *const SCRIPT_ANALYSIS,
197 piX: *mut c_int,
198 ) -> HRESULT;
199 pub fn ScriptXtoCP(
200 iX: c_int,
201 cChars: c_int,
202 cGlyphs: c_int,
203 pwLogClust: *const WORD,
204 psva: *const SCRIPT_VISATTR,
205 piAdvance: *const c_int,
206 psa: *const SCRIPT_ANALYSIS,
207 piCP: *mut c_int,
208 piTrailing: *mut c_int,
209 ) -> HRESULT;
210 pub fn ScriptGetLogicalWidths(
211 psa: *const SCRIPT_ANALYSIS,
212 cChars: c_int,
213 cGlyphs: c_int,
214 piGlyphWidth: *const c_int,
215 pwLogClust: *const WORD,
216 psva: *const SCRIPT_VISATTR,
217 piDx: *mut c_int,
218 ) -> HRESULT;
219 pub fn ScriptApplyLogicalWidth(
220 piDx: *const c_int,
221 cChars: c_int,
222 cGlyphs: c_int,
223 pwLogClust: *const WORD,
224 psva: *const SCRIPT_VISATTR,
225 piAdvance: *const c_int,
226 psa: *const SCRIPT_ANALYSIS,
227 pABC: *mut ABC,
228 piJustify: *mut c_int,
229 ) -> HRESULT;
230}
231pub const SGCM_RTL: DWORD = 0x00000001;
232extern "system" {
233 pub fn ScriptGetCMap(
234 hdc: HDC,
235 psc: *mut SCRIPT_CACHE,
236 pwcInChars: *const WCHAR,
237 cChars: c_int,
238 dwFlags: DWORD,
239 pwOutGlyphs: *mut WORD,
240 ) -> HRESULT;
241 pub fn ScriptGetGlyphABCWidth(
242 hdc: HDC,
243 psc: *mut SCRIPT_CACHE,
244 wGlyph: WORD,
245 pABC: *mut ABC,
246 ) -> HRESULT;
247}
248STRUCT!{struct SCRIPT_PROPERTIES {
249 bit_fields1: DWORD,
250 bit_fields2: DWORD,
251}}
252BITFIELD!{SCRIPT_PROPERTIES bit_fields1: DWORD [
253 langid set_langid[0..16],
254 fNumeric set_fNumeric[16..17],
255 fComplex set_fComplex[17..18],
256 fNeedsWordBreaking set_fNeedsWordBreaking[18..19],
257 fNeedsCaretInfo set_fNeedsCaretInfo[19..20],
258 bCharSet set_bCharSet[20..28],
259 fControl set_fControl[28..29],
260 fPrivateUseArea set_fPrivateUseArea[29..30],
261 fNeedsCharacterJustify set_fNeedsCharacterJustify[30..31],
262 fInvalidGlyph set_fInvalidGlyph[31..32],
263]}
264BITFIELD!{SCRIPT_PROPERTIES bit_fields2: DWORD [
265 fInvalidLogAttr set_fInvalidLogAttr[0..1],
266 fCDM set_fCDM[1..2],
267 fAmbiguousCharSet set_fAmbiguousCharSet[2..3],
268 fClusterSizeVaries set_fClusterSizeVaries[3..4],
269 fRejectInvalid set_fRejectInvalid[4..5],
270]}
271extern "system" {
272 pub fn ScriptGetProperties(
273 ppSp: *mut *mut *const SCRIPT_PROPERTIES,
274 piNumScripts: *mut c_int,
275 ) -> HRESULT;
276}
277STRUCT!{struct SCRIPT_FONTPROPERTIES {
278 cBytes: c_int,
279 wgBlank: WORD,
280 wgDefault: WORD,
281 wgInvalid: WORD,
282 wgKashida: WORD,
283 iKashidaWidth: c_int,
284}}
285extern "system" {
286 pub fn ScriptGetFontProperties(
287 hdc: HDC,
288 psc: *mut SCRIPT_CACHE,
289 sfp: *mut SCRIPT_FONTPROPERTIES,
290 ) -> HRESULT;
291 pub fn ScriptCacheGetHeight(
292 hdc: HDC,
293 psc: *mut SCRIPT_CACHE,
294 tmHeight: *mut c_long,
295 ) -> HRESULT;
296}
297pub const SSA_PASSWORD: DWORD = 0x00000001;
298pub const SSA_TAB: DWORD = 0x00000002;
299pub const SSA_CLIP: DWORD = 0x00000004;
300pub const SSA_FIT: DWORD = 0x00000008;
301pub const SSA_DZWG: DWORD = 0x00000010;
302pub const SSA_FALLBACK: DWORD = 0x00000020;
303pub const SSA_BREAK: DWORD = 0x00000040;
304pub const SSA_GLYPHS: DWORD = 0x00000080;
305pub const SSA_RTL: DWORD = 0x00000100;
306pub const SSA_GCP: DWORD = 0x00000200;
307pub const SSA_HOTKEY: DWORD = 0x00000400;
308pub const SSA_METAFILE: DWORD = 0x00000800;
309pub const SSA_LINK: DWORD = 0x00001000;
310pub const SSA_HIDEHOTKEY: DWORD = 0x00002000;
311pub const SSA_HOTKEYONLY: DWORD = 0x00002400;
312pub const SSA_FULLMEASURE: DWORD = 0x04000000;
313pub const SSA_LPKANSIFALLBACK: DWORD = 0x08000000;
314pub const SSA_PIDX: DWORD = 0x10000000;
315pub const SSA_LAYOUTRTL: DWORD = 0x20000000;
316pub const SSA_DONTGLYPH: DWORD = 0x40000000;
317pub const SSA_NOKASHIDA: DWORD = 0x80000000;
318STRUCT!{struct SCRIPT_TABDEF {
319 cTabStops: c_int,
320 iScale: c_int,
321 pTabStops: *mut c_int,
322 iTabOrigin: c_int,
323}}
324DECLARE_HANDLE!{SCRIPT_STRING_ANALYSIS, SCRIPT_STRING_ANALYSIS__}
325extern "system" {
326 pub fn ScriptStringAnalyse(
327 hdc: HDC,
328 pString: *const c_void,
329 cString: c_int,
330 cGlyphs: c_int,
331 iCharset: c_int,
332 dwFlags: DWORD,
333 iReqWidth: c_int,
334 psControl: *mut SCRIPT_CONTROL,
335 psState: *mut SCRIPT_STATE,
336 piDx: *const c_int,
337 pTabdef: *mut SCRIPT_TABDEF,
338 pbInClass: *const BYTE,
339 pssa: *mut SCRIPT_STRING_ANALYSIS,
340 ) -> HRESULT;
341 pub fn ScriptStringFree(
342 pssa: *mut SCRIPT_STRING_ANALYSIS,
343 ) -> HRESULT;
344 pub fn ScriptString_pSize(
345 ssa: SCRIPT_STRING_ANALYSIS,
346 ) -> *const SIZE;
347 pub fn ScriptString_pcOutChars(
348 ssa: SCRIPT_STRING_ANALYSIS,
349 ) -> *const c_int;
350 pub fn ScriptString_pLogAttr(
351 ssa: SCRIPT_STRING_ANALYSIS,
352 ) -> *const SCRIPT_LOGATTR;
353 pub fn ScriptStringGetOrder(
354 ssa: SCRIPT_STRING_ANALYSIS,
355 puOrder: *mut UINT,
356 ) -> HRESULT;
357 pub fn ScriptStringCPtoX(
358 ssa: SCRIPT_STRING_ANALYSIS,
359 icp: c_int,
360 fTrailing: BOOL,
361 pX: *mut c_int,
362 ) -> HRESULT;
363 pub fn ScriptStringXtoCP(
364 ssa: SCRIPT_STRING_ANALYSIS,
365 iX: c_int,
366 piCh: *mut c_int,
367 piTrailing: *mut c_int,
368 ) -> HRESULT;
369 pub fn ScriptStringGetLogicalWidths(
370 ssa: SCRIPT_STRING_ANALYSIS,
371 dpiDx: *mut c_int,
372 ) -> HRESULT;
373 pub fn ScriptStringValidate(
374 ssa: SCRIPT_STRING_ANALYSIS,
375 ) -> HRESULT;
376 pub fn ScriptStringOut(
377 ssa: SCRIPT_STRING_ANALYSIS,
378 iX: c_int,
379 iY: c_int,
380 uOptions: UINT,
381 prc: *const RECT,
382 iMinSel: c_int,
383 iMaxSel: c_int,
384 fDisabled: BOOL,
385 ) -> HRESULT;
386}
387pub const SIC_COMPLEX: DWORD = 1;
388pub const SIC_ASCIIDIGIT: DWORD = 2;
389pub const SIC_NEUTRAL: DWORD = 4;
390extern "system" {
391 pub fn ScriptIsComplex(
392 pwcInChars: *const WCHAR,
393 cInChars: c_int,
394 dwFlags: DWORD,
395 ) -> HRESULT;
396}
397STRUCT!{struct SCRIPT_DIGITSUBSTITUTE {
398 bit_fields1: DWORD,
399 bit_fields2: DWORD,
400 dwReserved: DWORD,
401}}
402BITFIELD!{SCRIPT_DIGITSUBSTITUTE bit_fields1: DWORD [
403 NationalDigitLanguage set_NationalDigitLanguage[0..16],
404 TraditionalDigitLanguage set_TraditionalDigitLanguage[16..32],
405]}
406BITFIELD!{SCRIPT_DIGITSUBSTITUTE bit_fields2: DWORD [
407 DigitSubstitute set_DigitSubstitute[0..8],
408]}
409extern "system" {
410 pub fn ScriptRecordDigitSubstitution(
411 Locale: LCID,
412 psds: *mut SCRIPT_DIGITSUBSTITUTE,
413 ) -> HRESULT;
414}
415pub const SCRIPT_DIGITSUBSTITUTE_CONTEXT: BYTE = 0;
416pub const SCRIPT_DIGITSUBSTITUTE_NONE: BYTE = 1;
417pub const SCRIPT_DIGITSUBSTITUTE_NATIONAL: BYTE = 2;
418pub const SCRIPT_DIGITSUBSTITUTE_TRADITIONAL: BYTE = 3;
419extern "system" {
420 pub fn ScriptApplyDigitSubstitution(
421 psds: *const SCRIPT_DIGITSUBSTITUTE,
422 psc: *mut SCRIPT_CONTROL,
423 pss: *mut SCRIPT_STATE,
424 ) -> HRESULT;
425}
426pub type OPENTYPE_TAG = ULONG;
427pub const SCRIPT_TAG_UNKNOWN: OPENTYPE_TAG = 0x00000000;
428STRUCT!{struct OPENTYPE_FEATURE_RECORD {
429 tagFeature: OPENTYPE_TAG,
430 lParameter: LONG,
431}}
432STRUCT!{struct TEXTRANGE_PROPERTIES {
433 potfRecords: *mut OPENTYPE_FEATURE_RECORD,
434 cotfRecords: c_int,
435}}
436STRUCT!{struct SCRIPT_CHARPROP {
437 bit_fields: WORD,
438}}
439BITFIELD!{SCRIPT_CHARPROP bit_fields: WORD [
440 fCanGlyphAlone set_fCanGlyphAlone[0..1],
441 reserved set_reserved[1..16],
442]}
443STRUCT!{struct SCRIPT_GLYPHPROP {
444 sva: SCRIPT_VISATTR,
445 reserved: WORD,
446}}
447extern "system" {
448 pub fn ScriptShapeOpenType(
449 hdc: HDC,
450 psc: *mut SCRIPT_CACHE,
451 psa: *mut SCRIPT_ANALYSIS,
452 tagScript: OPENTYPE_TAG,
453 tagLangSys: OPENTYPE_TAG,
454 rcRangeChars: *mut c_int,
455 rpRangeProperties: *mut *mut TEXTRANGE_PROPERTIES,
456 cRanges: c_int,
457 pwcChars: *const WCHAR,
458 cChars: c_int,
459 cMaxGlyphs: c_int,
460 pwLogClust: *mut WORD,
461 pCharProps: *mut SCRIPT_CHARPROP,
462 pwOutGlyphs: *mut WORD,
463 pOutGlyphProps: *mut SCRIPT_GLYPHPROP,
464 pcGlyphs: *mut c_int,
465 ) -> HRESULT;
466 pub fn ScriptPlaceOpenType(
467 hdc: HDC,
468 psc: *mut SCRIPT_CACHE,
469 psa: *mut SCRIPT_ANALYSIS,
470 tagScript: OPENTYPE_TAG,
471 tagLangSys: OPENTYPE_TAG,
472 rcRangeChars: *mut c_int,
473 rpRangeProperties: *mut *mut TEXTRANGE_PROPERTIES,
474 cRanges: c_int,
475 pwcChars: *const WCHAR,
476 pwLogClust: *mut WORD,
477 pCharProps: *mut SCRIPT_CHARPROP,
478 cChars: c_int,
479 pwGlyphs: *const WORD,
480 pGlyphProps: *const SCRIPT_GLYPHPROP,
481 cGlyphs: c_int,
482 piAdvance: *mut c_int,
483 pGoffset: *mut GOFFSET,
484 pABC: *mut ABC,
485 ) -> HRESULT;
486 pub fn ScriptItemizeOpenType(
487 pwcInChars: *const WCHAR,
488 cInChars: c_int,
489 cMaxItems: c_int,
490 psControl: *const SCRIPT_CONTROL,
491 psState: *const SCRIPT_STATE,
492 pItems: *mut SCRIPT_ITEM,
493 pScriptTags: *mut OPENTYPE_TAG,
494 pcItems: *mut c_int,
495 ) -> HRESULT;
496 pub fn ScriptGetFontScriptTags(
497 hdc: HDC,
498 psc: *mut SCRIPT_CACHE,
499 psa: *mut SCRIPT_ANALYSIS,
500 cMaxTags: c_int,
501 pScriptTags: *mut OPENTYPE_TAG,
502 pcTags: *mut c_int,
503 ) -> HRESULT;
504 pub fn ScriptGetFontLanguageTags(
505 hdc: HDC,
506 psc: *mut SCRIPT_CACHE,
507 psa: *mut SCRIPT_ANALYSIS,
508 tagScript: OPENTYPE_TAG,
509 cMaxTags: c_int,
510 pLangsysTags: *mut OPENTYPE_TAG,
511 pcTags: *mut c_int,
512 ) -> HRESULT;
513 pub fn ScriptGetFontFeatureTags(
514 hdc: HDC,
515 psc: *mut SCRIPT_CACHE,
516 psa: *mut SCRIPT_ANALYSIS,
517 tagScript: OPENTYPE_TAG,
518 tagLangSys: OPENTYPE_TAG,
519 cMaxTags: c_int,
520 pFeatureTags: *mut OPENTYPE_TAG,
521 pcTags: *mut c_int,
522 ) -> HRESULT;
523 pub fn ScriptGetFontAlternateGlyphs(
524 hdc: HDC,
525 psc: *mut SCRIPT_CACHE,
526 psa: *mut SCRIPT_ANALYSIS,
527 tagScript: OPENTYPE_TAG,
528 tagLangSys: OPENTYPE_TAG,
529 tagFeature: OPENTYPE_TAG,
530 wGlyphId: WORD,
531 cMaxAlternates: c_int,
532 pAlternateGlyphs: *mut WORD,
533 pcAlternates: *mut c_int,
534 ) -> HRESULT;
535 pub fn ScriptSubstituteSingleGlyph(
536 hdc: HDC,
537 psc: *mut SCRIPT_CACHE,
538 psa: *mut SCRIPT_ANALYSIS,
539 tagScript: OPENTYPE_TAG,
540 tagLangSys: OPENTYPE_TAG,
541 tagFeature: OPENTYPE_TAG,
542 lParameter: LONG,
543 wGlyphId: WORD,
544 pwOutGlyphId: *mut WORD,
545 ) -> HRESULT;
546 pub fn ScriptPositionSingleGlyph(
547 hdc: HDC,
548 psc: *mut SCRIPT_CACHE,
549 psa: *mut SCRIPT_ANALYSIS,
550 tagScript: OPENTYPE_TAG,
551 tagLangSys: OPENTYPE_TAG,
552 tagFeature: OPENTYPE_TAG,
553 lParameter: LONG,
554 wGlyphId: WORD,
555 iAdvance: c_int,
556 GOffset: GOFFSET,
557 piOutAdvance: *mut c_int,
558 pOutGoffset: *mut GOFFSET,
559 ) -> HRESULT;
560}