run-selection-span ( ctline run start end -- span/f )


Vocabulary
core-text

Inputs
ctlinean object
runan object
startan object
endan object


Outputs
span/fan object


Definition


:: run-selection-span ( ctline run start end -- span/f )
run CTRunGetStringRange [ location>> ] [ length>> ] bi
over + :> ( a b ) start a max :> lo end b min :> hi lo hi <
[
run run-x :> left run 0 0 <CFRange>
f f f CTRunGetTypographicBounds left +
:> right run CTRunGetStatus kCTRunStatusRightToLeft
bitand zero? [ left right ] [ right left ] if
:> ( leading trailing ) lo a =
[ leading ]
[ ctline lo f CTLineGetOffsetForStringIndex ] if hi b =
[ trailing ]
[ ctline hi f CTLineGetOffsetForStringIndex ] if
[ min ] [ max ] 2bi 2array
] [ f ] if ;