matchText question
Peter M. Brigham
pmbrig at gmail.com
Sat Feb 28 10:29:53 EST 2015
OK, so based on all this, here is a handler for getting a handler from the script of an object (watch linewraps).
-- Peter
Peter M. Brigham
pmbrig at gmail.com
http://home.comcast.net/~pmbrig
---------
function getHandlerFromScript pObjRef, pHandlerName, pType
-- returns the specified handler from the script of pObjRef
-- pHandlerName should be the bare name of the handler
-- if you have duplicate handler names, eg, a function and a command with
-- the same name, or getprop and setprop handlers with the same name,
-- then both/all will be returned,
-- unless you specify the optional pType as
-- "function" or "command" or "getprop" or "setprop"
-- if not found, returns "no such handler:" && pType && pHandlerName
-- requires caseSwitch()
put the script of pObjRef into tScript
put the revAvailableHandlers of pObjRef into hList
delete word 5 to -1 of line 1 of hList
filter hList with "* " & pHandlerName & " *"
put caseSwitch(pType,"function=F","command=M","getprop=G","setprop=S","*=*") \
into tType
if tType <> empty then
filter hList with "*" & tType & " *"
end if
if hList = empty then
put "no such handler:" && pType && pHandlerName into tError
replace " " with space in tError
return tError
end if
repeat for each line h in hList
put line (word 3 of h) to (word 4 of h) of tScript & cr & cr after outScript
end repeat
delete char -2 to -1 of outScript
return outScript
end getHandlerFromScript
function caseSwitch
-- does a quick inline switch/case
-- param 1 is checkValue
-- params 2+ are in the form matchValue(s)>=<returnValue
-- separate multiple matcheValues with commas
-- and enclose each matchValue=returnValue pair in quotes
-- if checkValue matches one or more items in matchValue(s),
-- returns returnValue
-- note that checkValue should NOT be enclosed in quotes
-- use a matchValue of "*" to specify a default value,
-- to be returned if no matches found in the list
-- if the default is "*=*" then no match returns the original <checkValue>
-- if no match and no default value specified, then returns empty
-- usage:
-- put caseSwitch(len(tZip),"5=zip","10=zip+4","*=not a zip code") \
-- into zipCodeType
-- from Ken Ray, use-LC list, originally named stsSwitch()
put param(1) into tCheckValue
set the itemDel to "="
put "" into tDefault
repeat with x = 2 to the paramCount
put param(x) into tCheck
put item 1 of tCheck into tMatch
put item 2 of tCheck into tRetVal
replace "," with "=" in tMatch
if tCheckValue is among the items of tMatch then return tRetVal
if tMatch = "*" then
if tRetVal = "*" then
put tCheckValue into tDefault
else
put tRetVal into tDefault
end if
end if
end repeat
return tDefault
end caseSwitch
---------
On Feb 28, 2015, at 10:14 AM, Richard Gaskin wrote:
> Peter M. Brigham wrote:
>
> > On Feb 27, 2015, at 10:20 PM, Richard Gaskin wrote:
> >
> >> Peter M. Brigham wrote:
> >> > The output I get from revAvailableHandlers looks like this:
> >> >
> >> > M mouseleave 14 17 button id 1026 of group id 1021 of card id 1082
> >> > of stack "NCMHC notes" of stack "/Users/pmbrig/Documents/LiveCode/
> >> > NCMHC notes/ NCMHC notes.rev"
> >> > M mousemove 1 12
> >> > M mouseup 19 131
> >> > F countVisits 133 165
> >> >
> >> > It looks as if the first line is the first handler && the long id
> >> > of the target, followed by the other handlers, M for command and
> >> > F for function, with the starting and ending line numbers. Very
> >> > useful, but an odd format. This is on LC 5.5.1. Can others confirm
> >> > that the output is similar with later versions of LC?
> >>
> >> The cool thing about this format is that it distinguishes handler
> >> type. In a simple list of handler names you may not know that one
> >> of them is a getProp, the other a function, and which ones are
> >> private. With this format you get that and more.
> >>
> >> The line numbers let you extract handlers instantly if needed, for
> >> example to quickly compare chunks from one version of a script and
> >> another.
> >>
> >> Uncommon indeed, but also uncommonly useful.
> >
> > Yes, it's a terrifically useful format overall. My question was about
> > that curious first line, however -- whether I can safely delete word
> > 5 to -1 of line 1 (I mistakenly said 'word 4 to -1' in my original
> > post) and get a pure list of handlers with their types and
> > lineoffsets. I don't know why the LC team didn't put the long id of
> > the object in line 1 and start the handler list at line 2, and I
> > wanted to make sure that this oddity persists in later versions of
> > the engine.
>
> Your understanding of the format is consistent with mine, and I use it daily in my message path access tools.
>
> As for why it's this way, beats me but to hopefully get an explanation I've taken the liberty of CC'ing Ben here so he can check with the implementer.
>
> --
> Richard Gaskin
> Fourth World Systems
> Software Design and Development for the Desktop, Mobile, and the Web
> ____________________________________________________________________
> Ambassador at FourthWorld.com http://www.FourthWorld.com
>
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode
More information about the use-livecode
mailing list