// Copyright © 2015, Jordan Miner // Licensed under the MIT License //! Uniscribe structure declarations and constant definitions pub const SCRIPT_UNDEFINED: ::WORD = 0; pub const USP_E_SCRIPT_NOT_IN_FONT: ::HRESULT = MAKE_HRESULT!( ::SEVERITY_ERROR, ::FACILITY_ITF, 0x200 ); DECLARE_HANDLE!(SCRIPT_CACHE, SCRIPT_CACHE__); STRUCT!{struct SCRIPT_CONTROL { bit_fields: ::DWORD, }} BITFIELD!(SCRIPT_CONTROL bit_fields: ::DWORD [ uDefaultLanguage set_uDefaultLanguage[0..16], fContextDigits set_fContextDigits[16..17], fInvertPreBoundDir set_fInvertPreBoundDir[17..18], fInvertPostBoundDir set_fInvertPostBoundDir[18..19], fLinkStringBefore set_fLinkStringBefore[19..20], fLinkStringAfter set_fLinkStringAfter[20..21], fNeutralOverride set_fNeutralOverride[21..22], fNumericOverride set_fNumericOverride[22..23], fLegacyBidiClass set_fLegacyBidiClass[23..24], fMergeNeutralItems set_fMergeNeutralItems[24..25], fReserved set_fReserved[25..32], ]); STRUCT!{struct SCRIPT_STATE { bit_fields: ::WORD, }} BITFIELD!(SCRIPT_STATE bit_fields: ::WORD [ uBidiLevel set_uBidiLevel[0..5], fOverrideDirection set_fOverrideDirection[5..6], fInhibitSymSwap set_fInhibitSymSwap[6..7], fCharShape set_fCharShape[7..8], fDigitSubstitute set_fDigitSubstitute[8..9], fInhibitLigate set_fInhibitLigate[9..10], fDisplayZWG set_fDisplayZWG[10..11], fArabicNumContext set_fArabicNumContext[11..12], fGcpClusters set_fGcpClusters[12..13], fReserved set_fReserved[13..14], fEngineReserved set_fEngineReserved[14..16], ]); STRUCT!{struct SCRIPT_ANALYSIS { bit_fields: ::WORD, s: SCRIPT_STATE, }} BITFIELD!(SCRIPT_ANALYSIS bit_fields: ::WORD [ eScript set_eScript[0..10], fRTL set_fRTL[10..11], fLayoutRTL set_fLayoutRTL[11..12], fLinkBefore set_fLinkBefore[12..13], fLinkAfter set_fLinkAfter[13..14], fLogicalOrder set_fLogicalOrder[14..15], fNoGlyphIndex set_fNoGlyphIndex[15..16], ]); STRUCT!{struct SCRIPT_ITEM { iCharPos: ::c_int, a: SCRIPT_ANALYSIS, }} //490 pub const SCRIPT_JUSTIFY_NONE: ::WORD = 0; pub const SCRIPT_JUSTIFY_ARABIC_BLANK: ::WORD = 1; pub const SCRIPT_JUSTIFY_CHARACTER: ::WORD = 2; pub const SCRIPT_JUSTIFY_RESERVED1: ::WORD = 3; pub const SCRIPT_JUSTIFY_BLANK: ::WORD = 4; pub const SCRIPT_JUSTIFY_RESERVED2: ::WORD = 5; pub const SCRIPT_JUSTIFY_RESERVED3: ::WORD = 6; pub const SCRIPT_JUSTIFY_ARABIC_NORMAL: ::WORD = 7; pub const SCRIPT_JUSTIFY_ARABIC_KASHIDA: ::WORD = 8; pub const SCRIPT_JUSTIFY_ARABIC_ALEF: ::WORD = 9; pub const SCRIPT_JUSTIFY_ARABIC_HA: ::WORD = 10; pub const SCRIPT_JUSTIFY_ARABIC_RA: ::WORD = 11; pub const SCRIPT_JUSTIFY_ARABIC_BA: ::WORD = 12; pub const SCRIPT_JUSTIFY_ARABIC_BARA: ::WORD = 13; pub const SCRIPT_JUSTIFY_ARABIC_SEEN: ::WORD = 14; pub const SCRIPT_JUSTIFY_ARABIC_SEEN_M: ::WORD = 15; STRUCT!{struct SCRIPT_VISATTR { bit_fields: ::WORD, }} BITFIELD!(SCRIPT_VISATTR bit_fields: ::WORD [ uJustification set_uJustification[0..4], fClusterStart set_fClusterStart[4..5], fDiacritic set_fDiacritic[5..6], fZeroWidth set_fZeroWidth[6..7], fReserved set_fReserved[7..8], fShapeReserved set_fShapeReserved[8..16], ]); STRUCT!{struct GOFFSET { du: ::LONG, dv: ::LONG, }} STRUCT!{struct SCRIPT_LOGATTR { bit_fields: ::BYTE, }} BITFIELD!(SCRIPT_LOGATTR bit_fields: ::BYTE [ fSoftBreak set_fSoftBreak[0..1], fWhiteSpace set_fWhiteSpace[1..2], fCharStop set_fCharStop[2..3], fWordStop set_fWordStop[3..4], fInvalid set_fInvalid[4..5], fReserved set_fReserved[5..8], ]); pub const SGCM_RTL: ::DWORD = 0x00000001; STRUCT!{struct SCRIPT_PROPERTIES { bit_fields1: ::DWORD, bit_fields2: ::DWORD, }} BITFIELD!(SCRIPT_PROPERTIES bit_fields1: ::DWORD [ langid set_langid[0..16], fNumeric set_fNumeric[16..17], fComplex set_fComplex[17..18], fNeedsWordBreaking set_fNeedsWordBreaking[18..19], fNeedsCaretInfo set_fNeedsCaretInfo[19..20], bCharSet set_bCharSet[20..28], fControl set_fControl[28..29], fPrivateUseArea set_fPrivateUseArea[29..30], fNeedsCharacterJustify set_fNeedsCharacterJustify[30..31], fInvalidGlyph set_fInvalidGlyph[31..32], ]); BITFIELD!(SCRIPT_PROPERTIES bit_fields2: ::DWORD [ fInvalidLogAttr set_fInvalidLogAttr[0..1], fCDM set_fCDM[1..2], fAmbiguousCharSet set_fAmbiguousCharSet[2..3], fClusterSizeVaries set_fClusterSizeVaries[3..4], fRejectInvalid set_fRejectInvalid[4..5], ]); STRUCT!{struct SCRIPT_FONTPROPERTIES { cBytes: ::c_int, wgBlank: ::WORD, wgDefault: ::WORD, wgInvalid: ::WORD, wgKashida: ::WORD, iKashidaWidth: ::c_int, }} //1440 pub const SSA_PASSWORD: ::DWORD = 0x00000001; pub const SSA_TAB: ::DWORD = 0x00000002; pub const SSA_CLIP: ::DWORD = 0x00000004; pub const SSA_FIT: ::DWORD = 0x00000008; pub const SSA_DZWG: ::DWORD = 0x00000010; pub const SSA_FALLBACK: ::DWORD = 0x00000020; pub const SSA_BREAK: ::DWORD = 0x00000040; pub const SSA_GLYPHS: ::DWORD = 0x00000080; pub const SSA_RTL: ::DWORD = 0x00000100; pub const SSA_GCP: ::DWORD = 0x00000200; pub const SSA_HOTKEY: ::DWORD = 0x00000400; pub const SSA_METAFILE: ::DWORD = 0x00000800; pub const SSA_LINK: ::DWORD = 0x00001000; pub const SSA_HIDEHOTKEY: ::DWORD = 0x00002000; pub const SSA_HOTKEYONLY: ::DWORD = 0x00002400; pub const SSA_FULLMEASURE: ::DWORD = 0x04000000; pub const SSA_LPKANSIFALLBACK: ::DWORD = 0x08000000; pub const SSA_PIDX: ::DWORD = 0x10000000; pub const SSA_LAYOUTRTL: ::DWORD = 0x20000000; pub const SSA_DONTGLYPH: ::DWORD = 0x40000000; pub const SSA_NOKASHIDA: ::DWORD = 0x80000000; STRUCT!{struct SCRIPT_TABDEF { cTabStops: ::c_int, iScale: ::c_int, pTabStops: *mut ::c_int, iTabOrigin: ::c_int, }} DECLARE_HANDLE!(SCRIPT_STRING_ANALYSIS, SCRIPT_STRING_ANALYSIS__); pub const SIC_COMPLEX: ::DWORD = 1; pub const SIC_ASCIIDIGIT: ::DWORD = 2; pub const SIC_NEUTRAL: ::DWORD = 4; STRUCT!{struct SCRIPT_DIGITSUBSTITUTE { bit_fields1: ::DWORD, bit_fields2: ::DWORD, dwReserved: ::DWORD, }} BITFIELD!(SCRIPT_DIGITSUBSTITUTE bit_fields1: ::DWORD [ NationalDigitLanguage set_NationalDigitLanguage[0..16], TraditionalDigitLanguage set_TraditionalDigitLanguage[16..32], ]); BITFIELD!(SCRIPT_DIGITSUBSTITUTE bit_fields2: ::DWORD [ DigitSubstitute set_DigitSubstitute[0..8], ]); pub const SCRIPT_DIGITSUBSTITUTE_CONTEXT: ::BYTE = 0; pub const SCRIPT_DIGITSUBSTITUTE_NONE: ::BYTE = 1; pub const SCRIPT_DIGITSUBSTITUTE_NATIONAL: ::BYTE = 2; pub const SCRIPT_DIGITSUBSTITUTE_TRADITIONAL: ::BYTE = 3; pub type OPENTYPE_TAG = ::ULONG; pub const SCRIPT_TAG_UNKNOWN: OPENTYPE_TAG = 0x00000000; STRUCT!{struct OPENTYPE_FEATURE_RECORD { tagFeature: OPENTYPE_TAG, lParameter: ::LONG, }} STRUCT!{struct TEXTRANGE_PROPERTIES { potfRecords: *mut OPENTYPE_FEATURE_RECORD, cotfRecords: ::c_int, }} STRUCT!{struct SCRIPT_CHARPROP { bit_fields: ::WORD, }} BITFIELD!(SCRIPT_CHARPROP bit_fields: ::WORD [ fCanGlyphAlone set_fCanGlyphAlone[0..1], reserved set_reserved[1..16], ]); STRUCT!{struct SCRIPT_GLYPHPROP { sva: SCRIPT_VISATTR, reserved: ::WORD, }}