HTML5 deployment: progress comes into sight

Mark Waddingham mark at livecode.com
Thu Jun 1 06:27:43 EDT 2017


On 2017-05-31 23:13, hh via use-livecode wrote:
> Call, send , dispatch, do script ...
> It is very impressive how the core team can still have all that
> messaging in mind while developing LC Builder.

The problem here is what syntax to use in LCS to 'call into a widget' - 
widget's need to be able to expose public handlers which can be called 
from LiveCode Script (not just properties and events).

> Now why not use kind of a mnemonic naming in LCB e.g.
> 
>    sendHandler <handler> <to object>
>    callHandler <handler> <of object>
>    dispatchHandler <handler> <of object>
>    doHandler <handler> <of object>?

The problem is that all the keywords (naturally) associated with 
'calling' something in another context are already taken (i.e. send, 
call, dispatch, do) and their context is the script of the object. So:

    call "foo" in widget 1

Means send the message 'foo' to the *LiveCode Script* side of the widget 
- it is not entirely clear how that could work to mean 'call the handler 
'foo' exported by the widget's implementation'.

I've pondered 'invoke' as a new keyword - but I'm not sure how much I 
like that, but it would 'fill the gap'.

The other way to slice and dice things is to make it so that any 
handlers you want to export to act on the widget internally are added as 
'library handlers'. e.g.

   widget foo
     public handler CopySpecial() returns nothing
       ... do magic stuff ...
     end handler
   end widget

Would export fooCopySpecial() as a function accessible from LCS where 
you can do:

    fooCopySpecial(the long id of widget 1, ...)

Or similar. This is closer to how the engine does syntax - which are all 
non-object based functions in C++, which then dispatch to the object. 
e.g.

    copy widget 1

Ends up calling a C++ function:

    MCInterfaceExecCopyControl(ctxt, ptr-to-widget-1)

Which then does:

    ptr-to-widget-1->copy()

> We could still have
> 
>    do <script> <in object> [as language]
> 
> the default for a browser widget being "as javascript".
> Could be used parallel to
>    doHandler <handler> of <browser widget>
> (where <handler> has to be a javascript function name).

This would almost fix the 'overloading' problem of 'do in <browser 
widget>'. If we require you to do:

    do X in <browser widget> as javascript

If you want to execute the code fragment *inside* the browser widget; 
then that means:

   do X in <control>

Could be taken to mean execute X as LCS in the context of <control>.

Anyway, a bit more to think on here :)

Warmest Regards,

Mark.

-- 
Mark Waddingham ~ mark at livecode.com ~ http://www.livecode.com/
LiveCode: Everyone can create apps




More information about the use-livecode mailing list