From 39ce205f754ede6979bbe14f5dda78e972aa6a6b Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 12 Mar 2009 21:52:45 -0500 Subject: [PATCH] add a binding to part or all of uniscribe --- basis/windows/nt/nt.factor | 1 + basis/windows/usp10/authors.txt | 1 + basis/windows/usp10/usp10.factor | 337 +++++++++++++++++++++++++++++++ 3 files changed, 339 insertions(+) create mode 100755 basis/windows/usp10/authors.txt create mode 100755 basis/windows/usp10/usp10.factor diff --git a/basis/windows/nt/nt.factor b/basis/windows/nt/nt.factor index 85aa991857..24d0032c5b 100644 --- a/basis/windows/nt/nt.factor +++ b/basis/windows/nt/nt.factor @@ -12,4 +12,5 @@ USING: alien sequences ; { "gl" "opengl32.dll" "stdcall" } { "glu" "glu32.dll" "stdcall" } { "ole32" "ole32.dll" "stdcall" } + { "usp10" "usp10.dll" "stdcall" } } [ first3 add-library ] each diff --git a/basis/windows/usp10/authors.txt b/basis/windows/usp10/authors.txt new file mode 100755 index 0000000000..7c1b2f2279 --- /dev/null +++ b/basis/windows/usp10/authors.txt @@ -0,0 +1 @@ +Doug Coleman diff --git a/basis/windows/usp10/usp10.factor b/basis/windows/usp10/usp10.factor new file mode 100755 index 0000000000..6ad149b4f0 --- /dev/null +++ b/basis/windows/usp10/usp10.factor @@ -0,0 +1,337 @@ +! Copyright (C) 2009 Doug Coleman. +! See http: +USING: alien.syntax ; +IN: windows.usp10 + +LIBRARY: usp10 + +C-STRUCT: SCRIPT_CONTROL + { "DWORD" "flags" } ; + +C-STRUCT: SCRIPT_STATE + { "WORD" "flags" } ; + +C-STRUCT: SCRIPT_ANALYSIS + { "WORD" "flags" } + { "SCRIPT_STATE" "s" } ; + +C-STRUCT: SCRIPT_ITEM + { "int" "iCharPos" } + { "SCRIPT_ANALYSIS" "a" } ; + +FUNCTION: HRESULT ScriptItemize ( + WCHAR* pwcInChars, + int cInChars, + int cMaxItems, + SCRIPT_CONTROL* psControl, + SCRIPT_STATE* psState, + SCRIPT_ITEM* pItems, + int* pcItems +) ; + +FUNCTION: HRESULT ScriptLayout ( + int cRuns, + BYTE* pbLevel, + int* piVisualToLogical, + int* piLogicalToVisual +) ; + +C-ENUM: SCRIPT_JUSTIFY_NONE +SCRIPT_JUSTIFY_ARABIC_BLANK +SCRIPT_JUSTIFY_CHARACTER +SCRIPT_JUSTIFY_RESERVED1 +SCRIPT_JUSTIFY_BLANK +SCRIPT_JUSTIFY_RESERVED2 +SCRIPT_JUSTIFY_RESERVED3 +SCRIPT_JUSTIFY_ARABIC_NORMAL +SCRIPT_JUSTIFY_ARABIC_KASHIDA +SCRIPT_JUSTIFY_ALEF +SCRIPT_JUSTIFY_HA +SCRIPT_JUSTIFY_RA +SCRIPT_JUSTIFY_BA +SCRIPT_JUSTIFY_BARA +SCRIPT_JUSTIFY_SEEN +SCRIPT_JUSTIFFY_RESERVED4 ; + +C-STRUCT: SCRIPT_VISATTR + { "WORD" "flags" } ; + +FUNCTION: HRESULT ScriptShape ( + HDC hdc, + SCRIPT_CACHE* psc, + WCHAR* pwcChars, + int cChars, + int cMaxGlyphs, + SCRIPT_ANALYSIS* psa, + WORD* pwOutGlyphs, + WORD* pwLogClust, + SCRIPT_VISATTR* psva, + int* pcGlyphs +) ; + +C-STRUCT: GOFFSET + { "LONG" "du" } + { "LONG" "dv" } ; + +FUNCTION: HRESULT ScriptPlace ( + HDC hdc, + SCRIPT_CACHE* psc, + WORD* pwGlyphs, + int cGlyphs, + SCRIPT_VISATTR* psva, + SCRIPT_ANALYSIS* psa, + int* piAdvance, + GOFFSET* pGoffset, + ABC* pABC +) ; + +FUNCTION: HRESULT ScriptTextOut ( + HDC hdc, + SCRIPT_CACHE* psc, + int x, + int y, + UINT fuOptions, + RECT* lprc, + SCRIPT_ANALYSIS* psa, + WCHAR* pwcReserved, + int iReserved, + WORD* pwGlyphs, + int cGlyphs, + int* piAdvance, + int* piJustify, + GOFFSET* pGoffset +) ; + +FUNCTION: HRESULT ScriptJustify ( + SCRIPT_VISATTR* psva, + int* piAdvance, + int cGlyphs, + int iDx, + int iMinKashida, + int* piJustify +) ; + +C-STRUCT: SCRIPT_LOGATTR + { "BYTE" "flags" } ; + +FUNCTION: HRESULT ScriptBreak ( + WCHAR* pwcChars, + int cChars, + SCRIPT_ANALYSIS* psa, + SCRIPT_LOGATTR* psla +) ; + +FUNCTION: HRESULT ScriptCPtoX ( + int iCP, + BOOL fTrailing, + int cChars, + int cGlyphs, + WORD* pwLogClust, + SCRIPT_VISATTR* psva, + int* piAdvance, + SCRIPT_ANALYSIS* psa, + int* piX +) ; + +FUNCTION: HRESULT ScriptXtoCP ( + int iCP, + BOOL fTrailing, + int cChars, + int cGlyphs, + WORD* pwLogClust, + SCRIPT_VISATTR* psva, + int* piAdvance, + SCRIPT_ANALYSIS* psa, + int* piCP, + int* piTrailing +) ; + +FUNCTION: HRESULT ScriptGetLogicalWidths ( + SCRIPT_ANALYSIS* psa, + int cChars, + int cGlyphs, + int* piGlyphWidth, + WORD* pwLogClust, + SCRIPT_VISATTR* psva, + int* piDx +) ; + +FUNCTION: HRESULT ScriptApplyLogicalWidth ( + int* piDx, + int cChars, + int cGlyphs, + WORD* pwLogClust, + SCRIPT_VISATTR* psva, + int* piAdvance, + SCRIPT_ANALYSIS* psa, + ABC* pABC, + int* piJustify +) ; + +FUNCTION: HRESULT ScriptGetCMap ( + HDC hdc, + SCRIPT_CACHE* psc, + WCHAR* pwcInChars, + int cChars, + DWORD dwFlags, + WORD* pwOutGlyphs +) ; + +FUNCTION: HRESULT ScriptGetGlyphABCWidth ( + HDC hdc, + SCRIPT_CACHE* psc, + WORD wGlyph, + ABC* pABC +) ; + +C-STRUCT: SCRIPT_PROPERTIES + { "DWORD" "flags" } ; + +FUNCTION: HRESULT ScriptGetProperties ( + SCRIPT_PROPERTIES*** ppSp, + int* piNumScripts +) ; + +C-STRUCT: SCRIPT_FONTPROPERTIES + { "int" "cBytes" } + { "WORD" "wgBlank" } + { "WORD" "wgDefault" } + { "WORD" "wgInvalid" } + { "WORD" "wgKashida" } + { "int" "iKashidaWidth" } ; + +FUNCTION: HRESULT ScriptGetFontProperties ( + HDC hdc, + SCRIPT_CACHE* psc, + SCRIPT_FONTPROPERTIES* sfp +) ; + +FUNCTION: HRESULT ScriptCacheGetHeight ( + HDC hdc, + SCRIPT_CACHE* psc, + long* tmHeight +) ; + +CONSTANT: SSA_PASSWORD HEX: 00000001 +CONSTANT: SSA_TAB HEX: 00000002 +CONSTANT: SSA_CLIP HEX: 00000004 +CONSTANT: SSA_FIT HEX: 00000008 +CONSTANT: SSA_DZWG HEX: 00000010 +CONSTANT: SSA_FALLBACK HEX: 00000020 +CONSTANT: SSA_BREAK HEX: 00000040 +CONSTANT: SSA_GLYPHS HEX: 00000080 +CONSTANT: SSA_RTL HEX: 00000100 +CONSTANT: SSA_GCP HEX: 00000200 +CONSTANT: SSA_HOTKEY HEX: 00000400 +CONSTANT: SSA_METAFILE HEX: 00000800 +CONSTANT: SSA_LINK HEX: 00001000 +CONSTANT: SSA_HIDEHOTKEY HEX: 00002000 +CONSTANT: SSA_HOTKEYONLY HEX: 00002400 +CONSTANT: SSA_FULLMEASURE HEX: 04000000 +CONSTANT: SSA_LPKANSIFALLBACK HEX: 08000000 +CONSTANT: SSA_PIDX HEX: 10000000 +CONSTANT: SSA_LAYOUTRTL HEX: 20000000 +CONSTANT: SSA_DONTGLYPH HEX: 40000000 +CONSTANT: SSA_NOKASHIDA HEX: 80000000 + +C-STRUCT: SCRIPT_TABDEF + { "int" "cTabStops" } + { "int" "iScale" } + { "int*" "pTabStops" } + { "int" "iTabOrigin" } ; + +TYPEDEF: void* SCRIPT_STRING_ANALYSIS + +FUNCTION: HRESULT ScriptStringAnalyse ( + HDC hdc, + void* pString, + int cString, + int cGlyphs, + int iCharset, + DWORD dwFlags, + int iReqWidth, + SCRIPT_CONTROL* psControl, + SCRIPT_STATE* psState, + int* piDx, + SCRIPT_TABDEF* pTabDef, + BYTE* pbInClass, + SCRIPT_STRING_ANALYSIS* pssa +) ; + +FUNCTION: HRESULT ScriptStringFree ( + SCRIPT_STRING_ANALYSIS* pssa +) ; + +FUNCTION: SIZE* ScriptString_pSize ( SCRIPT_STRING_ANALYSIS ssa ) ; + +FUNCTION: int* ScriptString_pcOutChars ( SCRIPT_STRING_ANALYSIS ssa ) ; + +FUNCTION: SCRIPT_LOGATTR* ScriptString_pLogAttr ( SCRIPT_STRING_ANALYSIS ssa ) ; + +FUNCTION: HRESULT ScriptStringGetOrder ( + SCRIPT_STRING_ANALYSIS ssa, + UINT* puOrder +) ; + +FUNCTION: HRESULT ScriptStringCPtoX ( + SCRIPT_STRING_ANALYSIS ssa, + int icp, + BOOL fTrailing, + int* pX +) ; + +FUNCTION: HRESULT ScriptStringXtoCP ( + SCRIPT_STRING_ANALYSIS ssa, + int iX, + int* piCh, + int* piTrailing +) ; + +FUNCTION: HRESULT ScriptStringGetLogicalWidths ( + SCRIPT_STRING_ANALYSIS ssa, + int* piDx +) ; + +FUNCTION: HRESULT ScriptStringValidate ( + SCRIPT_STRING_ANALYSIS ssa +) ; + +FUNCTION: HRESULT ScriptStringOut ( + SCRIPT_STRING_ANALYSIS ssa, + int iX, + int iY, + UINT uOptions, + RECT* prc, + int iMinSel, + int iMaxSel, + BOOL fDisabled +) ; + +CONSTANT: SIC_COMPLEX 1 +CONSTANT: SIC_ASCIIDIGIT 2 +CONSTANT: SIC_NEUTRAL 4 + +FUNCTION: HRESULT ScriptIsComplex ( + WCHAR* pwcInChars, + int cInChars, + DWORD dwFlags +) ; + +C-STRUCT: SCRIPT_DIGITSUBSTITUTE + { "DWORD" "flags" } ; + +FUNCTION: HRESULT ScriptRecordDigitSubstitution ( + LCID Locale, + SCRIPT_DIGITSUBSTITUTE* psds +) ; + +CONSTANT: SCRIPT_DIGITSUBSTITUTE_CONTEXT 0 +CONSTANT: SCRIPT_DIGITSUBSTITUTE_NONE 1 +CONSTANT: SCRIPT_DIGITSUBSTITUTE_NATIONAL 2 +CONSTANT: SCRIPT_DIGITSUBSTITUTE_TRADITIONAL 3 + +FUNCTION: HRESULT ScriptApplyDigitSubstitution ( + SCRIPT_DIGITSUBSTITUTE* psds, + SCRIPT_CONTROL* psc, + SCRIPT_STATE* pss +) ; \ No newline at end of file -- 2.34.1