From c6414048ce006a153fc565673f3f84c5f1ee9351 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 22 Jun 2019 09:55:17 -0500 Subject: [PATCH] windows.uniscribe: Apply the patch from #1402 for Windows. --- basis/windows/uniscribe/uniscribe.factor | 33 ++++++++++++++++-------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/basis/windows/uniscribe/uniscribe.factor b/basis/windows/uniscribe/uniscribe.factor index b1d892462a..77bdc94fc3 100644 --- a/basis/windows/uniscribe/uniscribe.factor +++ b/basis/windows/uniscribe/uniscribe.factor @@ -12,31 +12,42 @@ IN: windows.uniscribe TUPLE: script-string < disposable font string metrics ssa size image ; -: line-offset>x ( n script-string -- x ) +x ( n script-string -- x ) + n script-string 2dup string>> length = [ ssa>> ! ssa - swap 1 - ! icp + ! swap 1 - ! icp + swap 0 swap script-string string>> subseq + utf16n encode length 2 / >integer 1 - ! icp TRUE ! fTrailing ] [ ssa>> - swap ! icp + ! swap ! icp + swap 0 swap script-string string>> subseq + utf16n encode length 2 / >integer ! icp FALSE ! fTrailing ] if { int } [ ScriptStringCPtoX check-ole32-error ] with-out-parameters ; -: x>line-offset ( x script-string -- n trailing ) +:: x>line-offset ( x script-string -- n trailing ) + x script-string ssa>> ! ssa swap ! iX - { int int } [ ScriptStringXtoCP check-ole32-error ] with-out-parameters ; - -> utf16n encode subseq + utf16n decode length + swap ; : make-ssa ( dc script-string -- ssa ) dup selection? [ string>> ] when - [ utf16n encode ] ! pString - [ length ] bi ! cString + ! [ utf16n encode ] ! pString + ! [ length ] bi ! cString + utf16n encode ! pString + dup length 2 / >integer ! cString dup 1.5 * 16 + >integer ! cGlyphs -- MSDN says this is "recommended size" -1 ! iCharset -- Unicode ssa-dwFlags -- 2.34.1