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 */ 543