Hi Paul,

On May 30, 2010, at 9:51 PM, Paul Howson wrote:

> On 31/05/2010, at 11:47 AM, Laurent Sansonetti wrote:
> 
>> Hi Paul,
>> 
>> I believe that here the function is typed to return an anonymous struct 
>> (likely a bug in the bridgesupport file), so MacRuby won't be able to 
>> associate it as an NSRange. You may be able to access location using 
>> string_range[0] and length using string_range[1].
>> 
>> Laurent
> 
> Thanks Laurent.
> 
> That appears not to work:
> 
>   undefined method `[]' for #<Boxed:0x2006947a0> (NoMethodError)

I see :( Could you file a ticket about this? I believe we should expose the 
structure fields for these special Boxed objects.

> Is the bridgesupport file produced elsewhere within Apple? (i.e. out of your 
> control)

Yep, the file ships with the system, so we have full control. I just checked 
and the problem has been fixed in the new version of BridgeSupport that we are 
working on.

> Any other suggestions for getting around this bug?

It is possible to fix the problem by manually editing the file.

/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Resources/BridgeSupport/CoreText.bridgesupport

Then, locate the description of CTLineGetStringRange. It should be something 
like:

<function name='CTLineGetStringRange'>
<arg type='^{__CTLine=}'/>
<retval type64='{?=qq}' type='{?=ii}'/>
</function>

And replace with:

<function name='CTLineGetStringRange'>
<arg type='^{__CTLine=}'/>
<retval type64='{_CFRange=qq}' type='{_CFRange=ii}'/>
</function>

I understand that editing the file manually is probably not an option if you 
intend to ship the project later, but I think we can add a fix in trunk to 
expose the fields. We can maybe find another workaround if needed.

Laurent
_______________________________________________
MacRuby-devel mailing list
MacRuby-devel@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

Reply via email to