Create the AHCI branch for Aman's work
[reactos.git] / sdk / include / psdk / usp10.h
1 /*
2 * Copyright (C) 2005 Steven Edwards
3 * Copyright (C) 2005 Vijay Kiran Kamuju
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
18 */
19
20 #ifndef __USP10_H
21 #define __USP10_H
22
23 #ifndef __WINESRC__
24 # include <windows.h>
25 #endif
26 /* FIXME: #include <specstrings.h> */
27
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31
32 /** ScriptStringAnalyse */
33 #define SSA_PASSWORD 0x00000001
34 #define SSA_TAB 0x00000002
35 #define SSA_CLIP 0x00000004
36 #define SSA_FIT 0x00000008
37 #define SSA_DZWG 0x00000010
38 #define SSA_FALLBACK 0x00000020
39 #define SSA_BREAK 0x00000040
40 #define SSA_GLYPHS 0x00000080
41 #define SSA_RTL 0x00000100
42 #define SSA_GCP 0x00000200
43 #define SSA_HOTKEY 0x00000400
44 #define SSA_METAFILE 0x00000800
45 #define SSA_LINK 0x00001000
46 #define SSA_HIDEHOTKEY 0x00002000
47 #define SSA_HOTKEYONLY 0x00002400
48 #define SSA_FULLMEASURE 0x04000000
49 #define SSA_LPKANSIFALLBACK 0x08000000
50 #define SSA_PIDX 0x10000000
51 #define SSA_LAYOUTRTL 0x20000000
52 #define SSA_DONTGLYPH 0x40000000
53 #define SSA_NOKASHIDA 0x80000000
54
55 /** StringIsComplex */
56 #define SIC_COMPLEX 1
57 #define SIC_ASCIIDIGIT 2
58 #define SIC_NEUTRAL 4
59
60 /** ScriptGetCMap */
61 #define SGCM_RTL 0x00000001
62
63 /** ScriptApplyDigitSubstitution */
64 #define SCRIPT_DIGITSUBSTITUTE_CONTEXT 0
65 #define SCRIPT_DIGITSUBSTITUTE_NONE 1
66 #define SCRIPT_DIGITSUBSTITUTE_NATIONAL 2
67 #define SCRIPT_DIGITSUBSTITUTE_TRADITIONAL 3
68
69 #define SCRIPT_UNDEFINED 0
70
71 #define USP_E_SCRIPT_NOT_IN_FONT MAKE_HRESULT(SEVERITY_ERROR,FACILITY_ITF,0x200)
72
73 typedef enum tag_SCRIPT_JUSTIFY {
74 SCRIPT_JUSTIFY_NONE = 0,
75 SCRIPT_JUSTIFY_ARABIC_BLANK = 1,
76 SCRIPT_JUSTIFY_CHARACTER = 2,
77 SCRIPT_JUSTIFY_RESERVED1 = 3,
78 SCRIPT_JUSTIFY_BLANK = 4,
79 SCRIPT_JUSTIFY_RESERVED2 = 5,
80 SCRIPT_JUSTIFY_RESERVED3 = 6,
81 SCRIPT_JUSTIFY_ARABIC_NORMAL = 7,
82 SCRIPT_JUSTIFY_ARABIC_KASHIDA = 8,
83 SCRIPT_JUSTIFY_ARABIC_ALEF = 9,
84 SCRIPT_JUSTIFY_ARABIC_HA = 10,
85 SCRIPT_JUSTIFY_ARABIC_RA = 11,
86 SCRIPT_JUSTIFY_ARABIC_BA = 12,
87 SCRIPT_JUSTIFY_ARABIC_BARA = 13,
88 SCRIPT_JUSTIFY_ARABIC_SEEN = 14,
89 SCRIPT_JUSTIFY_ARABIC_SEEN_M = 15,
90 } SCRIPT_JUSTIFY;
91
92 typedef struct tag_SCRIPT_CONTROL {
93 DWORD uDefaultLanguage :16;
94 DWORD fContextDigits :1;
95 DWORD fInvertPreBoundDir :1;
96 DWORD fInvertPostBoundDir :1;
97 DWORD fLinkStringBefore :1;
98 DWORD fLinkStringAfter :1;
99 DWORD fNeutralOverride :1;
100 DWORD fNumericOverride :1;
101 DWORD fLegacyBidiClass :1;
102 DWORD fMergeNeutralItems :1;
103 DWORD fReserved :7;
104 } SCRIPT_CONTROL;
105
106 typedef struct {
107 DWORD langid :16;
108 DWORD fNumeric :1;
109 DWORD fComplex :1;
110 DWORD fNeedsWordBreaking :1;
111 DWORD fNeedsCaretInfo :1;
112 DWORD bCharSet :8;
113 DWORD fControl :1;
114 DWORD fPrivateUseArea :1;
115 DWORD fNeedsCharacterJustify :1;
116 DWORD fInvalidGlyph :1;
117 DWORD fInvalidLogAttr :1;
118 DWORD fCDM :1;
119 DWORD fAmbiguousCharSet :1;
120 DWORD fClusterSizeVaries :1;
121 DWORD fRejectInvalid :1;
122 } SCRIPT_PROPERTIES;
123
124 typedef struct tag_SCRIPT_STATE {
125 WORD uBidiLevel :5;
126 WORD fOverrideDirection :1;
127 WORD fInhibitSymSwap :1;
128 WORD fCharShape :1;
129 WORD fDigitSubstitute :1;
130 WORD fInhibitLigate :1;
131 WORD fDisplayZWG :1;
132 WORD fArabicNumContext :1;
133 WORD fGcpClusters :1;
134 WORD fReserved :1;
135 WORD fEngineReserved :2;
136 } SCRIPT_STATE;
137
138 typedef struct tag_SCRIPT_ANALYSIS {
139 WORD eScript :10;
140 WORD fRTL :1;
141 WORD fLayoutRTL :1;
142 WORD fLinkBefore :1;
143 WORD fLinkAfter :1;
144 WORD fLogicalOrder :1;
145 WORD fNoGlyphIndex :1;
146 SCRIPT_STATE s;
147 } SCRIPT_ANALYSIS;
148
149 typedef struct tag_SCRIPT_ITEM {
150 int iCharPos;
151 SCRIPT_ANALYSIS a;
152 } SCRIPT_ITEM;
153
154 typedef struct tag_SCRIPT_DIGITSUBSTITUTE {
155 DWORD NationalDigitLanguage :16;
156 DWORD TraditionalDigitLanguage :16;
157 DWORD DigitSubstitute :8;
158 DWORD dwReserved;
159 } SCRIPT_DIGITSUBSTITUTE;
160
161 typedef struct tag_SCRIPT_FONTPROPERTIES {
162 int cBytes;
163 WORD wgBlank;
164 WORD wgDefault;
165 WORD wgInvalid;
166 WORD wgKashida;
167 int iKashidaWidth;
168 } SCRIPT_FONTPROPERTIES;
169
170 typedef struct tag_SCRIPT_TABDEF {
171 int cTabStops;
172 int iScale;
173 int *pTabStops;
174 int iTabOrigin;
175 } SCRIPT_TABDEF;
176
177 typedef struct tag_SCRIPT_VISATTR {
178 WORD uJustification :4;
179 WORD fClusterStart :1;
180 WORD fDiacritic :1;
181 WORD fZeroWidth :1;
182 WORD fReserved :1;
183 WORD fShapeReserved :8;
184 } SCRIPT_VISATTR;
185
186 typedef struct tag_SCRIPT_LOGATTR {
187 BYTE fSoftBreak :1;
188 BYTE fWhiteSpace :1;
189 BYTE fCharStop :1;
190 BYTE fWordStop :1;
191 BYTE fInvalid :1;
192 BYTE fReserved :3;
193 } SCRIPT_LOGATTR;
194
195 typedef void *SCRIPT_CACHE;
196 typedef void *SCRIPT_STRING_ANALYSIS;
197
198 #ifndef LSDEFS_DEFINED
199 typedef struct tagGOFFSET {
200 LONG du;
201 LONG dv;
202 } GOFFSET;
203 #endif
204
205 typedef ULONG OPENTYPE_TAG;
206
207 typedef struct tagOPENTYPE_FEATURE_RECORD
208 {
209 OPENTYPE_TAG tagFeature;
210 LONG lParameter;
211 } OPENTYPE_FEATURE_RECORD;
212
213 typedef struct tagSCRIPT_GLYPHPROP
214 {
215 SCRIPT_VISATTR sva;
216 WORD reserved;
217 } SCRIPT_GLYPHPROP;
218
219 typedef struct tagSCRIPT_CHARPROP
220 {
221 WORD fCanGlyphAlone :1;
222 WORD reserved :15;
223 } SCRIPT_CHARPROP;
224
225 typedef struct tagTEXTRANGE_PROPERTIES
226 {
227 OPENTYPE_FEATURE_RECORD *potfRecords;
228 INT cotfRecords;
229 } TEXTRANGE_PROPERTIES;
230
231 /* Function Declarations */
232
233 _Check_return_
234 HRESULT
235 WINAPI
236 ScriptApplyDigitSubstitution(
237 _In_reads_(1) const SCRIPT_DIGITSUBSTITUTE* psds,
238 _Out_writes_(1) SCRIPT_CONTROL* psc,
239 _Out_writes_(1) SCRIPT_STATE* pss);
240
241 _Check_return_
242 HRESULT
243 WINAPI
244 ScriptApplyLogicalWidth(
245 _In_reads_(cChars) const int *piDx,
246 _In_ int cChars,
247 _In_ int cGlyphs,
248 _In_reads_(cChars) const WORD *pwLogClust,
249 _In_reads_(cGlyphs) const SCRIPT_VISATTR *psva,
250 _In_reads_(cGlyphs) const int *piAdvance,
251 _In_reads_(1) const SCRIPT_ANALYSIS *psa,
252 _Inout_updates_opt_(1) ABC *pABC,
253 _Out_writes_all_(cGlyphs) int *piJustify);
254
255 _Check_return_
256 HRESULT
257 WINAPI
258 ScriptRecordDigitSubstitution(
259 _In_ LCID Locale,
260 _Out_writes_(1) SCRIPT_DIGITSUBSTITUTE *psds);
261
262 _Check_return_
263 HRESULT
264 WINAPI
265 ScriptItemize(
266 _In_reads_(cInChars) const WCHAR *pwcInChars,
267 _In_ int cInChars,
268 _In_ int cMaxItems,
269 _In_reads_opt_(1) const SCRIPT_CONTROL *psControl,
270 _In_reads_opt_(1) const SCRIPT_STATE *psState,
271 _Out_writes_to_(cMaxItems, *pcItems) SCRIPT_ITEM *pItems,
272 _Out_writes_(1) int *pcItems);
273
274 _Check_return_
275 HRESULT
276 WINAPI
277 ScriptGetCMap(
278 _In_ HDC hdc,
279 _Inout_updates_(1) SCRIPT_CACHE *psc,
280 _In_reads_(cChars) const WCHAR *pwcInChars,
281 _In_ int cChars,
282 _In_ DWORD dwFlags,
283 _Out_writes_(cChars) WORD *pwOutGlyphs);
284
285 _Check_return_
286 HRESULT
287 WINAPI
288 ScriptGetFontProperties(
289 _In_ HDC hdc,
290 _Inout_updates_(1) SCRIPT_CACHE *psc,
291 _Out_writes_(1) SCRIPT_FONTPROPERTIES *sfp);
292
293 _Check_return_
294 HRESULT
295 WINAPI
296 ScriptGetGlyphABCWidth(
297 _In_ HDC hdc,
298 _Inout_updates_(1) SCRIPT_CACHE *psc,
299 _In_ WORD wGlyph,
300 _Out_writes_(1) ABC *pABC);
301
302 _Check_return_
303 HRESULT
304 WINAPI
305 ScriptGetLogicalWidths(
306 _In_reads_(1) const SCRIPT_ANALYSIS *psa,
307 _In_ int cChars,
308 _In_ int cGlyphs,
309 _In_reads_(cGlyphs) const int *piGlyphWidth,
310 _In_reads_(cChars) const WORD *pwLogClust,
311 _In_reads_(cGlyphs) const SCRIPT_VISATTR *psva,
312 _In_reads_(cChars) int *piDx);
313
314 _Check_return_
315 HRESULT
316 WINAPI
317 ScriptGetProperties(
318 _Outptr_result_buffer_(*piNumScripts) const SCRIPT_PROPERTIES ***ppSp,
319 _Out_ int *piNumScripts);
320
321 _Check_return_
322 HRESULT
323 WINAPI
324 ScriptStringAnalyse(
325 _In_ HDC hdc,
326 _In_ const void *pString,
327 _In_ int cString,
328 _In_ int cGlyphs,
329 _In_ int iCharset,
330 _In_ DWORD dwFlags,
331 _In_ int iReqWidth,
332 _In_reads_opt_(1) SCRIPT_CONTROL *psControl,
333 _In_reads_opt_(1) SCRIPT_STATE *psState,
334 _In_reads_opt_(cString) const int *piDx,
335 _In_reads_opt_(1) SCRIPT_TABDEF *pTabdef,
336 _In_ const BYTE *pbInClass,
337 _Outptr_result_buffer_(1) SCRIPT_STRING_ANALYSIS *pssa);
338
339 _Check_return_
340 HRESULT
341 WINAPI
342 ScriptStringValidate(
343 _In_reads_(1) SCRIPT_STRING_ANALYSIS ssa);
344
345 _Check_return_
346 HRESULT
347 WINAPI
348 ScriptStringFree(
349 _Inout_updates_(1) SCRIPT_STRING_ANALYSIS *pssa);
350
351 _Check_return_
352 HRESULT
353 WINAPI
354 ScriptFreeCache(
355 _Inout_updates_(1) _At_(*psc, _Post_null_) SCRIPT_CACHE *psc);
356
357 _Check_return_
358 HRESULT
359 WINAPI
360 ScriptIsComplex(
361 _In_reads_(cInChars) const WCHAR *pwcInChars,
362 _In_ int cInChars,
363 _In_ DWORD dwFlags);
364
365 _Check_return_
366 HRESULT
367 WINAPI
368 ScriptJustify(
369 _In_reads_(cGlyphs) const SCRIPT_VISATTR *psva,
370 _In_reads_(cGlyphs) const int *piAdvance,
371 _In_ int cGlyphs,
372 _In_ int iDx,
373 _In_ int iMinKashida,
374 _Out_writes_all_(cGlyphs) int *piJustify);
375
376 _Check_return_
377 HRESULT
378 WINAPI
379 ScriptLayout(
380 int cRuns,
381 _In_reads_(cRuns) const BYTE *pbLevel,
382 _Out_writes_all_opt_(cRuns) int *piVisualToLogical,
383 _Out_writes_all_opt_(cRuns) int *piLogicalToVisual);
384
385 _Check_return_
386 HRESULT
387 WINAPI
388 ScriptShape(
389 _In_ HDC hdc,
390 _Inout_updates_(1) SCRIPT_CACHE *psc,
391 _In_reads_(cChars) const WCHAR *pwcChars,
392 _In_ int cChars,
393 _In_ int cMaxGlyphs,
394 _Inout_updates_(1) SCRIPT_ANALYSIS *psa,
395 _Out_writes_to_(cMaxGlyphs, *pcGlyphs) WORD *pwOutGlyphs,
396 _Out_writes_all_(cChars) WORD *pwLogClust,
397 _Out_writes_to_(cMaxGlyphs, *pcGlyphs) SCRIPT_VISATTR *psva,
398 _Out_writes_(1) int *pcGlyphs);
399
400 _Check_return_
401 HRESULT
402 WINAPI
403 ScriptPlace(
404 _In_ HDC hdc,
405 _Inout_updates_(1) SCRIPT_CACHE *psc,
406 _In_reads_(cGlyphs) const WORD *pwGlyphs,
407 _In_ int cGlyphs,
408 _In_reads_(cGlyphs) const SCRIPT_VISATTR *psva,
409 _Inout_updates_(1) SCRIPT_ANALYSIS *psa,
410 _Out_writes_all_(cGlyphs) int *piAdvance,
411 _Out_writes_all_opt_(cGlyphs) GOFFSET *pGoffset,
412 _Out_writes_(1) ABC *pABC);
413
414 _Check_return_
415 HRESULT
416 WINAPI
417 ScriptBreak(
418 _In_reads_(cChars) const WCHAR *pwcChars,
419 _In_ int cChars,
420 _In_reads_(1) const SCRIPT_ANALYSIS *psa,
421 _Out_writes_all_(cChars) SCRIPT_LOGATTR *psla);
422
423 _Check_return_
424 HRESULT
425 WINAPI
426 ScriptCacheGetHeight(
427 _In_ HDC hdc,
428 _Inout_updates_(1) SCRIPT_CACHE *psc,
429 _Out_writes_(1) LONG *tmHeight);
430
431 _Check_return_
432 HRESULT
433 WINAPI
434 ScriptCPtoX(
435 _In_ int iCP,
436 _In_ BOOL fTrailing,
437 _In_ int cChars,
438 _In_ int cGlyphs,
439 _In_reads_(cChars) const WORD *pwLogClust,
440 _In_reads_(cGlyphs) const SCRIPT_VISATTR *psva,
441 _In_reads_(cGlyphs) const int *piAdvance,
442 _In_reads_(1) const SCRIPT_ANALYSIS *psa,
443 _Out_ int *piX);
444
445 _Check_return_
446 HRESULT
447 WINAPI
448 ScriptXtoCP(
449 _In_ int iX,
450 _In_ int cChars,
451 _In_ int cGlyphs,
452 _In_reads_(cChars) const WORD *pwLogClust,
453 _In_reads_(cGlyphs) const SCRIPT_VISATTR *psva,
454 _In_reads_(cGlyphs) const int *piAdvance,
455 _In_reads_(1) const SCRIPT_ANALYSIS *psa,
456 _Out_writes_(1) int *piCP,
457 _Out_writes_(1) int *piTrailing);
458
459 _Check_return_
460 HRESULT
461 WINAPI
462 ScriptStringCPtoX(
463 _In_reads_(1) SCRIPT_STRING_ANALYSIS ssa,
464 _In_ int icp,
465 _In_ BOOL fTrailing,
466 _Out_writes_(1) int *pX);
467
468 _Check_return_
469 HRESULT
470 WINAPI
471 ScriptStringXtoCP(
472 _In_reads_(1) SCRIPT_STRING_ANALYSIS ssa,
473 _In_ int iX,
474 _Out_writes_(1) int *piCh,
475 _Out_writes_(1) int *piTrailing);
476
477 _Check_return_
478 HRESULT
479 WINAPI
480 ScriptStringGetLogicalWidths(
481 _In_reads_(1) SCRIPT_STRING_ANALYSIS ssa,
482 _Out_ int *piDx);
483
484 _Check_return_
485 HRESULT
486 WINAPI
487 ScriptStringGetOrder(
488 _In_reads_(1) SCRIPT_STRING_ANALYSIS ssa,
489 _Out_ UINT *puOrder);
490
491 _Check_return_
492 HRESULT
493 WINAPI
494 ScriptStringOut(
495 _In_reads_(1) SCRIPT_STRING_ANALYSIS ssa,
496 _In_ int iX,
497 _In_ int iY,
498 _In_ UINT uOptions,
499 _In_reads_opt_(1) const RECT *prc,
500 _In_ int iMinSel,
501 _In_ int iMaxSel,
502 _In_ BOOL fDisabled);
503
504 _Check_return_
505 HRESULT
506 WINAPI
507 ScriptTextOut(
508 _In_ const HDC hdc,
509 _Inout_updates_(1) SCRIPT_CACHE *psc,
510 _In_ int x,
511 _In_ int y,
512 _In_ UINT fuOptions,
513 _In_reads_opt_(1) const RECT *lprc,
514 _In_reads_(1) const SCRIPT_ANALYSIS *psa,
515 _Reserved_ const WCHAR *pwcReserved,
516 _Reserved_ int iReserved,
517 _In_reads_(cGlyphs) const WORD *pwGlyphs,
518 _In_ int cGlyphs,
519 _In_reads_(cGlyphs) const int *piAdvance,
520 _In_reads_opt_(cGlyphs) const int *piJustify,
521 _In_reads_(cGlyphs) const GOFFSET *pGoffset);
522
523 const int*
524 WINAPI
525 ScriptString_pcOutChars(
526 _In_reads_(1) SCRIPT_STRING_ANALYSIS ssa);
527
528 const SCRIPT_LOGATTR*
529 WINAPI
530 ScriptString_pLogAttr(
531 _In_reads_(1) SCRIPT_STRING_ANALYSIS ssa);
532
533 const SIZE*
534 WINAPI
535 ScriptString_pSize(
536 _In_reads_(1) SCRIPT_STRING_ANALYSIS ssa);
537
538 #ifdef __cplusplus
539 } /* extern "C" */
540 #endif
541
542 #endif /* __USP10_H */